Skip to content

Commit 06df415

Browse files
committed
chore: logged in and subsciber power user metric tagging
1 parent 16eba14 commit 06df415

File tree

1 file changed

+34
-11
lines changed

1 file changed

+34
-11
lines changed

src/utils/Metrics.js

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,20 @@
3939
* @module utils/Metrics
4040
*/
4141
define(function (require, exports, module) {
42+
const KernalModeTrust = window.KernalModeTrust;
43+
if(!KernalModeTrust){
44+
// integrated extensions will have access to kernal mode, but not external extensions
45+
throw new Error("Metrics should have access to KernalModeTrust. Cannot boot without trust ring");
46+
}
47+
4248
const MAX_AUDIT_ENTRIES = 3000,
4349
ONE_DAY = 24 * 60* 60 * 1000;
4450
let initDone = false,
4551
disabled = false,
4652
loggedDataForAudit = new Map();
4753

4854
let isFirstUseDay;
49-
let userID, isPowerUserFn;
55+
let userID, isPowerUserFn, powerUserPrefix;
5056
let cachedIsPowerUser = false;
5157

5258
function _setUserID() {
@@ -260,6 +266,25 @@ define(function (require, exports, module) {
260266
document.getElementsByTagName('head')[0].appendChild(script);
261267
}
262268

269+
async function _setPowerUserPrefix() {
270+
powerUserPrefix = null;
271+
const EntitlementsManager = KernalModeTrust.EntitlementsManager;
272+
if(cachedIsPowerUser){
273+
// A power user is someone who used Phoenix at least 3 days/8 hours in the last two weeks
274+
powerUserPrefix = "P";
275+
} else if(!isFirstUseDay){
276+
// A repeat user is a user who has used phoenix at least one other day before
277+
powerUserPrefix = "R";
278+
}
279+
if(EntitlementsManager.isLoggedIn()){
280+
if(await EntitlementsManager.isPaidSubscriber()){
281+
powerUserPrefix = "S"; // subscriber
282+
return;
283+
}
284+
powerUserPrefix = "L"; // logged in user
285+
}
286+
}
287+
263288
/**
264289
* We are transitioning to our own analytics instead of google as we breached the free user threshold of google
265290
* and paid plans for GA starts at 100,000 USD.
@@ -275,10 +300,14 @@ define(function (require, exports, module) {
275300
if (initOptions.isPowerUserFn) {
276301
isPowerUserFn = initOptions.isPowerUserFn;
277302
cachedIsPowerUser = isPowerUserFn(); // only call once to avoid heavy computations repeatedly
303+
_setPowerUserPrefix();
278304
setInterval(()=>{
279305
cachedIsPowerUser = isPowerUserFn();
306+
_setPowerUserPrefix();
280307
}, ONE_DAY);
281308
}
309+
KernalModeTrust.EntitlementsManager.on(KernalModeTrust.EntitlementsManager.EVENT_ENTITLEMENTS_CHANGED,
310+
_setPowerUserPrefix);
282311
}
283312

284313
// some events generate too many ga events that ga can't handle. ignore them.
@@ -363,12 +392,9 @@ define(function (require, exports, module) {
363392
* @type {function}
364393
*/
365394
function countEvent(eventType, eventCategory, eventSubCategory, count= 1) {
366-
if(cachedIsPowerUser){
395+
if(powerUserPrefix){
367396
// emit power user metrics too
368-
_countEvent(`P-${eventType}`, eventCategory, eventSubCategory, count);
369-
} else if(!isFirstUseDay){
370-
// emit repeat user metrics too
371-
_countEvent(`R-${eventType}`, eventCategory, eventSubCategory, count);
397+
_countEvent(`${powerUserPrefix}-${eventType}`, eventCategory, eventSubCategory, count);
372398
}
373399
_countEvent(eventType, eventCategory, eventSubCategory, count);
374400
}
@@ -394,12 +420,9 @@ define(function (require, exports, module) {
394420
* @type {function}
395421
*/
396422
function valueEvent(eventType, eventCategory, eventSubCategory, value) {
397-
if(cachedIsPowerUser){
423+
if(powerUserPrefix){
398424
// emit power user metrics too
399-
_valueEvent(`P-${eventType}`, eventCategory, eventSubCategory, value);
400-
} else if(!isFirstUseDay){
401-
// emit repeat user metrics too
402-
_valueEvent(`R-${eventType}`, eventCategory, eventSubCategory, value);
425+
_valueEvent(`${powerUserPrefix}-${eventType}`, eventCategory, eventSubCategory, value);
403426
}
404427
_valueEvent(eventType, eventCategory, eventSubCategory, value);
405428
}

0 commit comments

Comments
 (0)