{"action":"created","issue":{"url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/issues/267","labels_url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/issues/267/labels{/name}","comments_url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/issues/267/comments","events_url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/issues/267/events","html_url":"https://github.com/CUL-DigitalServices/grasshopper-ui/pull/267","id":60524509,"number":267,"title":"Instrument the front-end","user":{"login":"oszkarnagy","id":117483,"avatar_url":"https://avatars.githubusercontent.com/u/117483?v=3","gravatar_id":"","url":"https://api.github.com/users/oszkarnagy","html_url":"https://github.com/oszkarnagy","followers_url":"https://api.github.com/users/oszkarnagy/followers","following_url":"https://api.github.com/users/oszkarnagy/following{/other_user}","gists_url":"https://api.github.com/users/oszkarnagy/gists{/gist_id}","starred_url":"https://api.github.com/users/oszkarnagy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oszkarnagy/subscriptions","organizations_url":"https://api.github.com/users/oszkarnagy/orgs","repos_url":"https://api.github.com/users/oszkarnagy/repos","events_url":"https://api.github.com/users/oszkarnagy/events{/privacy}","received_events_url":"https://api.github.com/users/oszkarnagy/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/labels/Medium%20Priority","name":"Medium Priority","color":"eb6420"},{"url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/labels/More%20Work%20Needed","name":"More Work Needed","color":"d4c5f9"}],"state":"open","locked":false,"assignee":{"login":"bp323","id":218391,"avatar_url":"https://avatars.githubusercontent.com/u/218391?v=3","gravatar_id":"","url":"https://api.github.com/users/bp323","html_url":"https://github.com/bp323","followers_url":"https://api.github.com/users/bp323/followers","following_url":"https://api.github.com/users/bp323/following{/other_user}","gists_url":"https://api.github.com/users/bp323/gists{/gist_id}","starred_url":"https://api.github.com/users/bp323/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bp323/subscriptions","organizations_url":"https://api.github.com/users/bp323/orgs","repos_url":"https://api.github.com/users/bp323/repos","events_url":"https://api.github.com/users/bp323/events{/privacy}","received_events_url":"https://api.github.com/users/bp323/received_events","type":"User","site_admin":false},"milestone":{"url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/milestones/1","html_url":"https://github.com/CUL-DigitalServices/grasshopper-ui/milestones/Beta%20release","labels_url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/milestones/1/labels","id":1007640,"number":1,"title":"Beta release","description":"This should be a feature complete release with only minor and visual issues, publicly accessible and testable by end users. Hosted by CARET controlled cloud infrastructure, on the current QA server instance.","creator":{"login":"oszkarnagy","id":117483,"avatar_url":"https://avatars.githubusercontent.com/u/117483?v=3","gravatar_id":"","url":"https://api.github.com/users/oszkarnagy","html_url":"https://github.com/oszkarnagy","followers_url":"https://api.github.com/users/oszkarnagy/followers","following_url":"https://api.github.com/users/oszkarnagy/following{/other_user}","gists_url":"https://api.github.com/users/oszkarnagy/gists{/gist_id}","starred_url":"https://api.github.com/users/oszkarnagy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/oszkarnagy/subscriptions","organizations_url":"https://api.github.com/users/oszkarnagy/orgs","repos_url":"https://api.github.com/users/oszkarnagy/repos","events_url":"https://api.github.com/users/oszkarnagy/events{/privacy}","received_events_url":"https://api.github.com/users/oszkarnagy/received_events","type":"User","site_admin":false},"open_issues":11,"closed_issues":9,"state":"open","created_at":"2015-03-05T14:32:49Z","updated_at":"2015-03-23T16:06:51Z","due_on":"2015-04-27T23:00:00Z","closed_at":null},"comments":12,"created_at":"2015-03-10T16:08:30Z","updated_at":"2015-03-24T09:56:19Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/pulls/267","html_url":"https://github.com/CUL-DigitalServices/grasshopper-ui/pull/267","diff_url":"https://github.com/CUL-DigitalServices/grasshopper-ui/pull/267.diff","patch_url":"https://github.com/CUL-DigitalServices/grasshopper-ui/pull/267.patch"},"body":"The main conceptual approach here is to instrument all human initiated interactions in the app, organised around the main critical flows so that we have quantifiable data with contextual information on task completion rates and times, so that event funnels can be created the product can be iteratively improved based on these metrics.\r\n\r\nAll the stuff mentioned below assumes a 3rd party data warehouse and visualisation service in place like [Mixpanel](https://mixpanel.com) We could write our own tracking code or could also look at leveraging [segment.io](https://segment.com/) to abstract the instrumentation JS code and turn on integration to Mixpanel AND Google Analytics with 2 clicks.\r\n\r\n**Documentation**\r\nThe list below contains the list of instrumentation points. Every single entry should be part of the documentation on Github and notes should be put in for each individual event on WHEN the events is sent + other remarks. \r\nExample: Cancel event -> \"Sent when either the Cancel link or the modal close dialog icon is clicked or the user clicked outside the modal window\"\r\nThis might look cumbersome, but it will pay off on the long run when people will interpret the data \r\n\r\n**Generic points**\r\nIn all events we send the following \r\n * user_type: [\"Superadmin\", \"Departmental administrator\", \"Lecturer\", \"Student\"]\r\n * logged_in: [\"True\", \"False\"]\r\n * user: hash(\"on215\", \"key\", \"salt\") for \"Student\" & \"Lecturer\" user types\r\n * create Mixpanel user profiles for \"Superadmin\" and \"Departmental administrator\" user types and track them\r\n\r\n\r\n**Student UI instrumentation points**\r\n\r\n * [x] SUI Generic - API call error [API endpoint, http_code]\r\n\r\n * [x] SUI Auth - Signed in\r\n * [x] SUI Auth - Signed in error [http_code]\r\n * [x] SUI Auth - Sign out\r\n\r\n * [x] SUI Navigation - Tripos selector - Opened\r\n * [x] SUI Navigation - Tripos selector - Search [final search term]\r\n * [x] SUI Navigation - Tripos selector - Selected [triposID]\r\n * [x] SUI Navigation - Part selector - Opened\r\n * [x] SUI Navigation - Part selector - Selected [triposID, partID, time_from_start]\r\n * [x] SUI Navigation - Module opened\r\n * [x] SUI Navigation - Module closed\r\n * [x] SUI Navigation - Draft timetable page shown\r\n * [x] SUI Navigation - Cambridge Logo clicked\r\n * [x] SUI Navigation - Authentication modal triggered\r\n * [x] SUI Navigation - Knowledge base clicked\r\n * [x] SUI Navigation - Terms & Conditions clicked\r\n\r\n * [x] SUI Calendar - View - Week view selected\r\n * [x] SUI Calendar - View - Week - Week <\r\n * [x] SUI Calendar - View - Week - Week >\r\n * [x] SUI Calendar - View - Week - Term >\r\n * [x] SUI Calendar - View - Week - Term <\r\n * [x] SUI Calendar - View - Week - Today\r\n * [x] SUI Calendar - View - Month view selected\r\n * [x] SUI Calendar - View - Month - Month <\r\n * [x] SUI Calendar - View - Month - Month >\r\n * [x] SUI Calendar - View - Month - Term >\r\n * [x] SUI Calendar - View - Month - Term <\r\n * [x] SUI Calendar - View - Month - Today\r\n * [x] SUI Calendar - View - Day view selected\r\n * [x] SUI Calendar - View - Day - Day <\r\n * [x] SUI Calendar - View - Day - Day >\r\n * [x] SUI Calendar - View - Day - Term >\r\n * [x] SUI Calendar - View - Day - Term <\r\n * [x] SUI Calendar - View - Day - Today\r\n * [x] SUI Calendar - View - Tooltip displayed\r\n * [x] SUI Calendar - Manage - Module added [time_from_start]\r\n * [x] SUI Calendar - Manage - Module removed\r\n * [x] SUI Calendar - Manage - Series added [time_from_start]\r\n * [x] SUI Calendar - Manage - Series removed\r\n * [x] SUI Calendar - Print clicked\r\n * [x] SUI Calendar - Export - Opened\r\n * [x] SUI Calendar - Export - Closed\r\n * [x] SUI Calendar - Export - Subscribed to calendar feed [ics_feed_hash, time_from_start]\r\n * [x] SUI Calendar - Export - Other ways - Opened\r\n * [x] SUI Calendar - Export - Other ways - Closed\r\n * [x] SUI Calendar - Export - Other ways - URL Clicked [time_from_start]\r\n * [x] SUI Calendar - Export - Other ways - Google Calendar help clicked [time_from_start]\r\n * [x] SUI Calendar - Export - Other ways - MS Outlook help  clicked [time_from_start]\r\n * [x] SUI Calendar - Export - Other ways - Apple Calendar help clicked [time_from_start]\r\n\r\n**Admin UI**\r\n * [x] AUI Generic - API call error [API endpoint, http_code]\r\n\r\n * [x] AUI Auth - Signed in\r\n * [x] AUI Auth - Signed in error [http_code]\r\n * [x] AUI Auth - Sign out\r\n\r\n * [x] AUI Navigation - Home - Shortcut clicked\r\n * [x] AUI Navigation - Home - Intro video played\r\n * [x] AUI Navigation - Home - Intro video collapsed\r\n * [x] AUI Navigation - Tripos selector - Opened\r\n * [x] AUI Navigation - Tripos selector - Search [final search term]\r\n * [x] AUI Navigation - Tripos selector - Selected [triposID]\r\n * [x] AUI Navigation - Part selector - Opened\r\n * [x] AUI Navigation - Part selector - Selected [triposID, partID]\r\n * [x] AUI Navigation - Home icon clicked\r\n * [x] AUI Navigation - Module opened [moduleID]\r\n * [x] AUI Navigation - Module closed [moduleID]\r\n * [x] AUI Navigation - Series opened [seriesID, is_borrowed, can_be_edited]\r\n * [x] AUI Navigation - Calendar view selected [partID]\r\n * [x] AUI Navigation - List view selected [partID]\r\n\r\n * [x] AUI Manage - Add module - Started\r\n * [x] AUI Manage - Add module - Cancelled\r\n * [x] AUI Manage - Add module - Completed [time_from_started]\r\n * [x] AUI Manage - Add series - Started\r\n * [x] AUI Manage - Add series - Cancelled\r\n * [x] AUI Manage - Add series - Completed [time_from_started]\r\n * [x] AUI Manage - Borrow series - Started\r\n * [x] AUI Manage - Borrow series - Chosen tripos\r\n * [x] AUI Manage - Borrow series - Chosen part\r\n * [x] AUI Manage - Borrow series - Module opened\r\n * [x] AUI Manage - Borrow series - Module closed\r\n * [x] AUI Manage - Borrow series - Series added\r\n * [x] AUI Manage - Borrow series - Series removed\r\n * [x] AUI Manage - Borrow series - Cancelled\r\n * [x] AUI Manage - Borrow series - Completed [time_from_start, number_of_borrowed_series]\r\n * [x] AUI Manage - Rename series via menu\r\n * [x] AUI Manage - Rename series inline\r\n * [x] AUI Manage - Delete series [is_borrowed, number_of_modules_using_this]\r\n * [x] AUI Manage - Remove borrowed series\r\n * [x] AUI Manage - Publishing - Started\r\n * [x] AUI Manage - Publishing - Cancelled\r\n * [x] AUI Manage - Publishing - Completed [time_from_start, date_stamp]\r\n\r\n * [x] AUI Data - Added event\r\n * [x] AUI Data - Added events for empty term\r\n * [x] AUI Data - Term selected [is_empty]\r\n * [x] AUI Data - Event selected\r\n * [x] AUI Data - All events selected from menu\r\n * [x] AUI Data - Title edit - Started [is_empty]\r\n * [x] AUI Data - Title edit - Completed\r\n * [x] AUI Data - DateTime edit - Started\r\n * [x] AUI Data - DateTime edit - Calendar item selected\r\n * [x] AUI Data - DateTime edit - Week changed\r\n * [x] AUI Data - DateTime edit - Day changed\r\n * [x] AUI Data - DateTime edit - Start hour changed\r\n * [x] AUI Data - DateTime edit - Start minute changed\r\n * [x] AUI Data - DateTime edit - End hour changed\r\n * [x] AUI Data - DateTime edit - End minute changed \r\n * [x] AUI Data - DateTime edit - Completed [time_from_start]\r\n * [x] AUI Data - Lecturer edit - Started [is_empty]\r\n * [x] AUI Data - Lecturer edit - Autocomplete userID selected\r\n * [x] AUI Data - Lecturer edit - Autocomplete no results shown\r\n * [x] AUI Data - Lecturer edit - Freetext entered\r\n * [x] AUI Data - Lecturer edit - Item removed\r\n * [x] AUI Data - Lecturer edit - Completed [time_from_start]\r\n * [x] AUI Data - Location edit - Started\r\n * [x] AUI Data - Location edit - Completed\r\n * [x] AUI Data - Type changed [type]\r\n * [x] AUI Data - Event deleted\r\n * [x] AUI Data - Batch edit - Started\r\n * [x] AUI Data - Batch edit - Title edited\r\n * [x] AUI Data - Batch edit - TimeDate - Started\r\n * [x] AUI Data - Batch edit - TimeDate - Closed\r\n * [x] AUI Data - Batch edit - TimeDate - Week ticked on\r\n * [x] AUI Data - Batch edit - TimeDate - Week ticked off\r\n * [x] AUI Data - Batch edit - TimeDate - Day changed\r\n * [x] AUI Data - Batch edit - TimeDate - Start hour changed\r\n * [x] AUI Data - Batch edit - TimeDate - Start minute changed\r\n * [x] AUI Data - Batch edit - TimeDate - End hour changed\r\n * [x] AUI Data - Batch edit - TimeDate - End minute changed\r\n * [x] AUI Data - Batch edit - TimeDate - Added another day\r\n * [x] AUI Data - Batch edit - Lecturer edit - Started [is_empty]\r\n * [x] AUI Data - Batch edit - Lecturer edit - Autocomplete userID selected\r\n * [x] AUI Data - Batch edit - Lecturer edit - Autocomplete no results shown\r\n * [x] AUI Data - Batch edit - Lecturer edit - Freetext entered\r\n * [x] AUI Data - Batch edit - Lecturer edit - Item removed\r\n * [x] AUI Data - Batch edit - Lecturer edit - Completed [time_from_start]\r\n * [x] AUI Data - Batch edit - Location edited\r\n * [x] AUI Data - Batch edit - Type changed\r\n * [x] AUI Data - Batch edit - Cancelled [number_of_changes, number_of_selected_events, number_of_selected_terms, time_from_start, triposID]\r\n * [x] AUI Data - Batch edit - Completed [number_of_changes, number_of_selected_events, number_of_selected_terms, time_from_start, triposID]\r\n * [x] AUI Data - Batch edit - Clicked on disabled batch edit component\r\n\r\n**Timers**\r\n\r\nCritical user journeys and tasks should be timed via timestamps, and the delta between the start timestamp and the completed timestamp should be sent as metadata with the completed event.\r\n\r\n*Student UI*\r\n * [x] Time to first module load (pageload > module list loaded)\r\n * [x] Time to first event in personal calendar (pageload > first event in calendar)\r\n * [x] Time to calendar export (pageload > Subscription or any export link clicked)\r\n \r\n*Admin UI*\r\n * [x] Create module workflow\r\n * [x] Create series workflow\r\n * [x] Borrow series workflow\r\n * [x] Series edit workflow\r\n * [x] Batch edit sub-workflow\r\n * [x] Publish workflow"},"comment":{"url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/issues/comments/85428264","html_url":"https://github.com/CUL-DigitalServices/grasshopper-ui/pull/267#issuecomment-85428264","issue_url":"https://api.github.com/repos/CUL-DigitalServices/grasshopper-ui/issues/267","id":85428264,"user":{"login":"bp323","id":218391,"avatar_url":"https://avatars.githubusercontent.com/u/218391?v=3","gravatar_id":"","url":"https://api.github.com/users/bp323","html_url":"https://github.com/bp323","followers_url":"https://api.github.com/users/bp323/followers","following_url":"https://api.github.com/users/bp323/following{/other_user}","gists_url":"https://api.github.com/users/bp323/gists{/gist_id}","starred_url":"https://api.github.com/users/bp323/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bp323/subscriptions","organizations_url":"https://api.github.com/users/bp323/orgs","repos_url":"https://api.github.com/users/bp323/repos","events_url":"https://api.github.com/users/bp323/events{/privacy}","received_events_url":"https://api.github.com/users/bp323/received_events","type":"User","site_admin":false},"created_at":"2015-03-24T09:56:19Z","updated_at":"2015-03-24T09:56:19Z","body":"Followed up on review, back to @Coenego "}}