feat(analytics) add Mixpanel

Test Plan: edgehill --test

Reviewers: bengotow

Reviewed By: bengotow

Differential Revision: https://review.inboxapp.com/D1299
This commit is contained in:
Evan Morikawa 2015-03-13 20:05:55 -04:00
parent 6b270734ef
commit 809033c601
3 changed files with 70 additions and 1 deletions

View file

@ -42,9 +42,10 @@ module.exports =
MessageStore: require '../src/flux/stores/message-store'
ContactStore: require '../src/flux/stores/contact-store'
NamespaceStore: require '../src/flux/stores/namespace-store'
AnalyticsStore: require '../src/flux/stores/analytics-store'
WorkspaceStore: require '../src/flux/stores/workspace-store'
FileUploadStore: require '../src/flux/stores/file-upload-store'
FileDownloadStore: require '../src/flux/stores/file-download-store'
WorkspaceStore: require '../src/flux/stores/workspace-store'
## TODO move to inside of individual Salesforce package. See https://trello.com/c/tLAGLyeb/246-move-salesforce-models-into-individual-package-db-models-for-packages-various-refactors
SalesforceAssociation: require '../src/flux/models/salesforce-association'

View file

@ -44,6 +44,7 @@
"less-cache": "0.21",
"marked": "^0.3",
"mkdirp": "^0.5",
"mixpanel": "^0.0.20",
"moment": "^2.8",
"moment-timezone": "^0.3",
"nslog": "^2.0.0",

View file

@ -0,0 +1,67 @@
_ = require 'underscore-plus'
Reflux = require 'reflux'
Mixpanel = require 'mixpanel'
Actions = require '../actions'
NamespaceStore = require './namespace-store'
module.exports =
AnalyticsStore = Reflux.createStore
init: ->
@analytics = Mixpanel.init("625e2300ef07cb4eb70a69b3638ca579")
@listenTo NamespaceStore, => @identify()
@identify()
@_listenToActions()
# We white list actions to track.
#
# The Key is the action and the value is the callback function for that
# action. That callback function should return the data we pass along to
# our analytics service based on the sending data.
#
# IMPORTANT: Be VERY careful about what private data we send to our
# analytics service!!
#
# Only completely anonymous data essential to future metrics or
# debugging may be sent.
actionsToTrack: ->
logout: -> {}
fileAborted: (uploadData={}) -> {fileSize: uploadData.fileSize}
fileUploaded: (uploadData={}) -> {fileSize: uploadData.fileSize}
sendDraftError: (dId, msg) -> {drafLocalId: dId, error: msg}
sendDraftSuccess: (draftLocalId) -> {draftLocalId: draftLocalId}
destroyDraftSuccess: -> {}
destroyDraftError: (msg) -> {error: msg}
showDeveloperConsole: -> {}
composeReply: ({threadId, messageId}) -> {threadId, messageId}
composeForward: ({threadId, messageId}) -> {threadId, messageId}
composeReplyAll: ({threadId, messageId}) -> {threadId, messageId}
composePopoutDraft: (localId) -> {draftLocalId: draftLocalId}
composeNewBlankDraft: -> {}
sendDraft: (draftLocalId) -> {draftLocalId: draftLocalId}
destroyDraft: (draftLocalId) -> {draftLocalId: draftLocalId}
searchQueryCommitted: (query) -> {}
fetchAndOpenFile: -> {}
fetchAndSaveFile: -> {}
abortDownload: -> {}
fileDownloaded: -> {}
track: (action, data={}) ->
return unless @id
@analytics.track(action, _.extend(data, namespaceId: @id))
identify: ->
@id = NamespaceStore.current?()?.id?
return unless @id
me = NamespaceStore.current().me()
@analytics.people.set @id,
"$email": me.email
"$first_name": me.firstName()
"$last_name": me.lastName()
"namespaceId": me.namespaceId
_listenToActions: ->
_.each @actionsToTrack(), (callback, action) =>
@listenTo Actions[action], (args...) =>
@track(action, callback(args...))