#############
Tracking Logs
#############

* Tracking logs are made available as separate tar files on S3 in the course-data bucket.
* They are represented as JSON files that catalog all user interactions with the site.
* To avoid filename collisions the tracking logs are organized by server name, where each directory corresponds to a server where they were stored. 

*************
Common Fields
*************

  .. list-table::
     :widths: 10 40 10 25
     :header-rows: 1
     
     * - field
       - details
       - type
       - values/format
     * - `username`
       - username of the user who triggered the event, empty string for anonymous events (not logged in)
       - string
       - 
     * - `session`
       - key identifying the user's session, may be undefined
       - string
       - 32 digits key
     * - `time`
       - GMT time the event was triggered
       - string	
       - `YYYY-MM-DDThh:mm:ss.xxxxxx`
     * - `ip`
       - user ip address
       - string
       - 
     * - `agent`
       - users browser agent string
       - string
       - 
     * - `page`
       - page the user was visiting when the event was generated
       - string
       - `$URL`
     * - event_source
       - event source
       - string
       - `browser`, `server`
     * - `event_type`
       - type of event triggered, values depends on `event_source`
       - string
       - *more details listed below*
     * - `event`
       - specifics of the event (dependenty of the event_type)
       - string/json
       - *the event string may encode a JSON record*
       

*************
Event Sources
*************

The `event_source` field identifies whether the event originated in the browser (via javascript) or on the server (during the processing of a request).

Server Events
=============

  .. list-table::
     :widths: 20 10 10 10 50
     :header-rows: 1
  
     * - event_type
       - event fields
       - type
       - values/format
       - details
     * - `show_answer`
       - `problem_id`
       - string
       - 
       - id of the problem being shown. Ex: `i4x://MITx/6.00x/problem/L15:L15_Problem_2`
     * - `save_problem_check`
       - `problem_id`
       - string
       - 
       - id of the problem being shown
     * -
       - `success`
       - string
       - correct, incorrect
       - whether the problem was correct
     * -  	
       - `attempts`
       - integer
       - number of attempts
       -
     * - 
       - `correct_map`
       - string/json
       - 
       - see details below
     * - 
       - `state`
       - string/json
       - 
       - current problem state
     * - 
       - `answers`
       - string/json
       -
       - students answers
     * -
       - `reset_problem`
       - problem_id
       - string
       - id of the problem being shown


`correct_map` details
---------------------

  .. list-table::
     :widths: 15 10 15 10
     :header-rows: 1
    
     * - correct_map fields
       - type
       - values/format
       - null allowed?
     * - hint
       - string
       -
       -
     * - hintmode
       - boolean
       -
       - yes
     * - correctness
       - string
       - correct, incorrect
       -
     * - npoints
       - integer
       -
       - yes
     * - msg
       - string
       -
       -
     * - queuestate
       - string/json
       - keys: key, time
       -


Browser Events
==============

  .. list-table::
     :widths: 10 10 8 12 20 10
     :header-rows: 1
  
     * - event_type
       - fields
       - type
       - values/format
       - details
       - example
     * - `book`
       - `type`
       - string
       - `gotopage`	
       -
       -
     * - 
       - `old`
       - integer	
       - `$PAGE`
       - from page number
       - `2`
     * -
       - `new`
       - integer
       - `$PAGE`
       - to page number
       - `25`
     * - `book`
       - `type`
       - string
       - `nextpage`
       -
       -
     * - 
       - new
       - integer
       - `$PAGE`
       - next page number
       - `10`
     * - `page_close`
       - *empty*
       - string
       -
       - 'page' field indicates which page was being closed
       -
     * - play_video
       - `id`
       - string
       -
       - edX id of the video being watched
       - `i4x-HarvardX-PH207x-video-Simple_Random_Sample`
     * -
       - code
       - string
       -
       - youtube id of the video being watched
       - `FU3fCJNs94Y`
     * -
       - `currentTime`
       - float
       -
       - time the video was paused at, in seconds
       - `1.264`
     * -
       - `speed`
       - string
       - `0.75, 1.0, 1.25, 1.50`
       - video speed being played
       - `"1.0"`
     * - `pause_video`
       - `id`
       - string
       -
       - edX id of the video being watched
       -
     * -
       - `code`
       - string
       -
       - youtube id of the video being watched
       -
     * -
       - `currentTime`
       - float
       -
       - time the video was paused at
       -
     * - 
       - `speed`
       - string
       - `0.75, 1.0, 1.25, 1.50`
       - video speed being played
       -
     * - `problem_check`
       - *none*
       - string
       -
       - event field contains the values of all input fields from the problem being checked (in the style of GET parameters (`key=value&key=value`))
       -
     * - `problem_show`
       - `problem`
       - string
       - 
       - id of the problem being checked
       -
     * - `seq_goto`
       - `id`
       - string
       -
       - edX id of the sequence
       -
     * -	
       - `old`
       - integer
       -
       - sequence element being jumped from
       - `3`
     * -
       - `new`
       - integer
       -
       - sequence element being jumped to
       - `5`
     * - `seq_next`
       - `id`
       - string
       -
       - edX id of the sequence	
       -
     * -	
       - `old`
       - integer
       -
       - sequence element being jumped from
       - `4`
     * -
       - `new`
       - integer
       -
       - sequence element being jumped to
       - `6`
     * - `rubric_select`
       - `location`
       - string
       -
       - location of the rubric's problem
       - `i4x://MITx/6.00x/problem/L15:L15_Problem_2`
     * -
       - `category`
       - integer
       - 
       - category number of the rubric selection
       -
     * -
       - `value`
       - integer
       -
       - value selected within the category
       -
     * - `(oe / peer_grading / staff_grading)`
         `_show_problem`
       - `location`
       - string
       -
       - the location of the problem whose prompt we're showing
       -
     * - `(oe / peer_grading / staff_grading)`
         `_hide_problem`
       - `location`
       - string
       - 
       - the location of the problem whose prompt we're hiding
       -
     * - `oe_show_full_feedback`
       - *empty*
       -
       -
       - the page where they're showing full feedback is already recorded
       -
     * - `oe_show_respond_to_feedback`
       - *empty*
       -
       -
       - the page where they're showing the feedback response form is already recorded
       -
     * - `oe_feedback_response_selected`
       - `value`
       - integer
       -
       - the value selected in the feedback response form
       -