1
- /**
2
- * Google Analytics / TestPilot Metrics
3
- */
4
- const TRACKING_ID = 'UA-35433268-79' ;
5
1
const KINTO_SERVER = 'https://testpilot.settings.services.mozilla.com/v1' ;
6
2
// XXX: Read this from Kinto fxa-params
7
3
const FXA_CLIENT_ID = 'a3dbd8c5a6fd93e2' ;
8
4
const FXA_OAUTH_SERVER = 'https://oauth.accounts.firefox.com/v1' ;
9
5
const FXA_PROFILE_SERVER = 'https://profile.accounts.firefox.com/v1' ;
10
6
const FXA_SCOPES = [ 'profile' , 'https://identity.mozilla.com/apps/notes' ] ;
11
- const timeouts = { } ;
12
- let closeUI = null ;
13
7
let isEditorReady = false ;
14
8
let editorConnectedDeferred ;
15
9
let isEditorConnected = new Promise ( resolve => { editorConnectedDeferred = { resolve} ; } ) ;
@@ -19,86 +13,6 @@ const client = new Kinto({remote: KINTO_SERVER, bucket: 'default'});
19
13
// Used by sync to load only changes from lastModified timestamp.
20
14
let lastSyncTimestamp = null ; // eslint-disable-line no-unused-vars
21
15
22
- // Analytics
23
- const analytics = new TestPilotGA ( {
24
- tid : TRACKING_ID ,
25
- ds : 'addon' ,
26
- an : 'Notes Experiment' ,
27
- aid : 'notes@mozilla.com' ,
28
- av : browser . runtime . getManifest ( ) . version
29
- } ) ;
30
-
31
- // This object is updated onMessage 'redux', sended by sidebar store.js on every change.
32
- // We need to keep it to generate `cd10`
33
- let reduxState = { } ;
34
-
35
- function sendMetrics ( event , context = { } , state = reduxState ) {
36
-
37
- // This function debounce sending metrics.
38
- const later = function ( ) {
39
- timeouts [ event ] = null ;
40
-
41
- let metrics = { } ;
42
-
43
- if ( event === 'open' ) {
44
- metrics . cd9 = context . loaded !== false ;
45
- } else if ( event === 'close' ) {
46
- metrics . cd7 = context . closeUI ;
47
- metrics . cd8 = null ; // reason editing session ended
48
- } else if ( event === 'changed' || event === 'drag-n-drop' ) { // Editing
49
- metrics = {
50
- cm1 : context . characters ,
51
- cm2 : context . lineBreaks ,
52
- cm3 : null , // Size of the change
53
- cd1 : context . syncEnabled ,
54
- cd2 : context . usesSize ,
55
- cd3 : context . usesBold ,
56
- cd4 : context . usesItalics ,
57
- cd5 : context . usesStrikethrough ,
58
- cd6 : context . usesList ,
59
- } ;
60
- } else if ( event === 'export' ) {
61
- metrics . el = 'html' ;
62
- } else if ( event === 'new-note' ) {
63
- metrics . el = context . origin ;
64
- } else if ( event === 'delete-note' ) {
65
- metrics . el = context . origin ;
66
- }
67
-
68
- // Generate cd10 based on footer.js rules
69
- if ( state . sync && [ 'open' , 'close' , 'changed' , 'drag-n-drop' , 'new-note' , 'export' ,
70
- 'delete-note' , 'give-feedback' , 'limit-reached' ] . includes ( event ) ) {
71
- if ( state . sync . email ) { // If user is authenticated
72
- if ( state . sync . error ) {
73
- metrics . cd10 = 'error' ;
74
- } else if ( state . sync . isSyncing ) {
75
- metrics . cd10 = 'isSyncing' ;
76
- } else {
77
- metrics . cd10 = 'synced' ;
78
- }
79
- } else {
80
- if ( state . sync . isOpeningLogin ) { // eslint-disable-line no-lonely-if
81
- metrics . cd10 = 'openLogin' ;
82
- } else if ( state . sync . isPleaseLogin ) {
83
- metrics . cd10 = 'verifyAccount' ;
84
- } else if ( state . sync . isReconnectSync ) {
85
- metrics . cd10 = 'reconnectSync' ;
86
- } else {
87
- metrics . cd10 = 'signIn' ;
88
- }
89
- }
90
- }
91
-
92
- if ( state . notes ) {
93
- metrics . cd11 = state . notes . length ;
94
- }
95
-
96
- return analytics . sendEvent ( 'notes' , event , metrics ) ;
97
- } ;
98
- clearTimeout ( timeouts [ event ] ) ;
99
- timeouts [ event ] = setTimeout ( later , 20000 ) ;
100
- }
101
-
102
16
function fetchProfile ( credentials ) {
103
17
return fxaFetchProfile ( FXA_PROFILE_SERVER , credentials . access_token ) . then ( ( profile ) => {
104
18
browser . storage . local . set ( { credentials} ) . then ( ( ) => {
@@ -120,7 +34,6 @@ function authenticate() {
120
34
redirectUri : browser . identity . getRedirectURL ( ) ,
121
35
scopes : FXA_SCOPES ,
122
36
} ) . then ( ( loginDetails ) => {
123
- sendMetrics ( 'login-success' ) ;
124
37
lastSyncTimestamp = null ;
125
38
const key = loginDetails . keys [ 'https://identity.mozilla.com/apps/notes' ] ;
126
39
const credentials = {
@@ -141,7 +54,6 @@ function authenticate() {
141
54
chrome . runtime . sendMessage ( {
142
55
action : 'reconnect'
143
56
} ) ;
144
- sendMetrics ( 'login-failed' ) ;
145
57
} ) ;
146
58
}
147
59
browser . runtime . onMessage . addListener ( function ( eventData ) {
@@ -152,7 +64,6 @@ browser.runtime.onMessage.addListener(function(eventData) {
152
64
credentials . get ( )
153
65
. then ( result => {
154
66
if ( ! result ) {
155
- sendMetrics ( 'webext-button-authenticate' ) ;
156
67
authenticate ( ) ;
157
68
} else {
158
69
chrome . runtime . sendMessage ( {
@@ -164,7 +75,6 @@ browser.runtime.onMessage.addListener(function(eventData) {
164
75
break ;
165
76
case 'disconnected' :
166
77
disconnectFromKinto ( client ) . then ( ( ) => {
167
- sendMetrics ( 'webext-button-disconnect' , eventData . context ) ;
168
78
credentials . clear ( ) ;
169
79
chrome . runtime . sendMessage ( {
170
80
action : 'disconnected'
@@ -178,35 +88,16 @@ browser.runtime.onMessage.addListener(function(eventData) {
178
88
notes : result . notes
179
89
} ) ;
180
90
} ) . catch ( ( e ) => {
181
- sendMetrics ( 'open' , { loaded : false } ) ;
91
+ // nothing to do here
182
92
} ) ;
183
93
break ;
184
94
case 'kinto-sync' :
185
95
loadFromKinto ( client , credentials ) ;
186
96
break ;
187
- case 'metrics-changed' :
188
- sendMetrics ( 'changed' , eventData . context ) ;
189
- break ;
190
- case 'metrics-drag-n-drop' :
191
- sendMetrics ( 'drag-n-drop' , eventData . context ) ;
192
- break ;
193
- case 'metrics-reconnect-sync' :
194
- sendMetrics ( 'reconnect-sync' , eventData . context ) ;
195
- break ;
196
- case 'metrics-limit-reached' :
197
- sendMetrics ( 'limit-reached' , eventData . context ) ;
198
- break ;
199
- case 'metrics-export' :
200
- sendMetrics ( 'export' ) ;
201
- break ;
202
- case 'metrics-give-feedback' :
203
- sendMetrics ( 'give-feedback' ) ;
204
- break ;
205
97
case 'editor-ready' :
206
98
isEditorReady = true ;
207
99
break ;
208
100
case 'create-note' :
209
- sendMetrics ( 'new-note' , { origin : eventData . origin } ) ;
210
101
// We create a note, and send id with note-created nessage
211
102
createNote ( client , credentials , {
212
103
id : eventData . id ,
@@ -223,7 +114,6 @@ browser.runtime.onMessage.addListener(function(eventData) {
223
114
saveToKinto ( client , credentials , eventData . note , eventData . from ) ;
224
115
break ;
225
116
case 'delete-note' :
226
- sendMetrics ( 'delete-note' , { origin : eventData . origin } ) ;
227
117
// We create a note, and send id with note-created nessage
228
118
deleteNote ( client , credentials , eventData . id ) . then ( ( ) => {
229
119
// loadFromKinto(client, credentials);
@@ -234,14 +124,10 @@ browser.runtime.onMessage.addListener(function(eventData) {
234
124
} ) ;
235
125
break ;
236
126
case 'theme-changed' :
237
- sendMetrics ( 'theme-changed' , eventData . content ) ;
238
127
browser . runtime . sendMessage ( {
239
128
action : 'theme-changed'
240
129
} ) ;
241
130
break ;
242
- case 'redux' :
243
- reduxState = eventData . state ;
244
- break ;
245
131
case 'fetch-email' :
246
132
credentials . get ( ) . then ( received => {
247
133
fetchProfile ( received ) . catch ( e => {
@@ -259,19 +145,15 @@ function connected(p) {
259
145
checkIndexedDbHealth ( ) . then ( ( ) => { } ,
260
146
( idbError ) => {
261
147
console . warn ( 'idbError' , idbError ) ; // eslint-disable-line no-console
262
- sendMetrics ( 'idb-fail' ) ;
263
148
}
264
149
) ;
265
150
266
- sendMetrics ( 'open' , { loaded : true } ) ;
267
- closeUI = 'closeButton' ;
268
151
editorConnectedDeferred . resolve ( ) ;
269
152
270
153
p . onDisconnect . addListener ( ( ) => {
271
154
// sidebar closed, therefore editor is not ready to receive any content
272
155
isEditorConnected = new Promise ( resolve => { editorConnectedDeferred = { resolve} ; } ) ;
273
156
isEditorReady = false ;
274
- sendMetrics ( 'close' , { 'closeUI' : closeUI } ) ;
275
157
} ) ;
276
158
}
277
159
@@ -308,8 +190,6 @@ browser.contextMenus.create({
308
190
309
191
browser . contextMenus . onClicked . addListener ( ( info , tab ) => {
310
192
311
- sendMetrics ( 'metrics-context-menu' ) ;
312
-
313
193
// open sidebar which will trigger `isEditorReady`...
314
194
if ( ! isEditorReady ) {
315
195
browser . sidebarAction . open ( ) ;
0 commit comments