forked from phcode-dev/phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMetrics.js
More file actions
1 lines (1 loc) · 8.63 KB
/
Metrics.js
File metadata and controls
1 lines (1 loc) · 8.63 KB
1
define(function(require,exports,module){const KernalModeTrust=window.KernalModeTrust;if(!KernalModeTrust)throw new Error("Metrics should have access to KernalModeTrust. Cannot boot without trust ring");const MAX_AUDIT_ENTRIES=3e3,ONE_DAY=864e5;let initDone=!1,disabled=!1,loggedDataForAudit=new Map,isFirstUseDay,userID,isPowerUserFn,powerUserPrefix,cachedIsPowerUser=!1;function _setUserID(){const userIDKey="phoenixUserPseudoID";(userID=window.PhStore.getItem(userIDKey))||(userID=crypto.randomUUID(),window.PhStore.setItem(userIDKey,userID))}function _setFirstDayFlag(){const firstUseDayKey="healthData.firstUseDay";let firstBootTime=window.PhStore.getItem(firstUseDayKey);firstBootTime||(firstBootTime=Date.now(),window.PhStore.setItem(firstUseDayKey,firstBootTime));let firstUseDay=new Date(firstBootTime),dayAfterFirstUse=new Date(firstUseDay);dayAfterFirstUse.setUTCDate(firstUseDay.getUTCDate()+1);let today=new Date;(isFirstUseDay=today<dayAfterFirstUse)||setTimeout(_setFirstDayFlag,ONE_DAY)}_setUserID(),_setFirstDayFlag();const EVENT_TYPE={PLATFORM:"platform",PROJECT:"project",THEMES:"themes",EXTENSIONS:"extensions",NOTIFICATIONS:"notify",UI:"UI",UI_MENU:"UIMenu",UI_DIALOG:"ui-dialog",UI_BOTTOM_PANEL:"ui-bottomPanel",UI_SIDE_PANEL:"ui-sidePanel",UPDATES:"update",LIVE_PREVIEW:"live-preview",LP_EDIT:"lp-edit",KEYBOARD:"keyboard",CODE_HINTS:"code-hints",EDITOR:"editor",QUICK_VIEW:"quickView",SEARCH:"search",SHARING:"sharing",PERFORMANCE:"performance",STORAGE:"storage",NEW_PROJECT:"new-project",ERROR:"error",USER:"user",NODEJS:"node",LINT:"lint",GIT:"git",AUTH:"auth",PRO:"pro"};function _createAnalyticsShims(){window.analytics||(window.analytics={_initData:[],loadStartTime:(new Date).getTime(),event:function(){window.analytics._initData.push(arguments)}}),Phoenix.isNativeApp||(window.dataLayer=window.dataLayer||[],window.gtag=function(){window.dataLayer.push(arguments),window.dataLayer.length>500&&window.dataLayer.splice(0,250)})}_createAnalyticsShims();const MINUTES_10=1e4;let tauriGaErrorCountSent=0,sendOnceMore=!1,noFurtherReporting=!1;function _sendTauriGAEvent(analyticsID,customUserID,events=[]){window.__TAURI__.event.emit("health",{analyticsID:analyticsID,customUserID:customUserID,events:events}).catch(err=>{window.debugMode&&console.error(err),noFurtherReporting||(tauriGaErrorCountSent++,sendOnceMore&&(noFurtherReporting=!0,logger.reportError(err,`${tauriGaErrorCountSent} _sendTauriGAEvent failures in ${MINUTES_10/1e3} minutes`)),1===tauriGaErrorCountSent&&(logger.reportError(err),setTimeout(()=>{sendOnceMore=!0},MINUTES_10)))})}let tauriGAEvents=new Map;function _sendGaEvent(eventAct,category,label,count){if(Phoenix.isNativeApp){const key=`${eventAct}:${category}:${label}}`,existingEvent=tauriGAEvents.get(key);return existingEvent?void(existingEvent.count=(existingEvent.count||0)+count):void tauriGAEvents.set(key,{eventAct:eventAct,category:category,label:label,count:count})}gtag("event",eventAct,{event_category:category,event_label:label,value:count})}const TAURI_GA_EVENT_QUEUE_INTERVAL=3e3;function _sendQueuedTauriGAEvents(){_sendTauriGAEvent(brackets.config.googleAnalyticsIDDesktop,userID,Array.from(tauriGAEvents.values())),tauriGAEvents.clear()}function _initGoogleAnalytics(){if(Phoenix.isNativeApp)return _sendTauriGAEvent(brackets.config.googleAnalyticsIDDesktop,userID),void setInterval(_sendQueuedTauriGAEvents,TAURI_GA_EVENT_QUEUE_INTERVAL);let script=document.createElement("script");script.type="text/javascript",script.async=!0,script.onload=function(){gtag("js",new Date),gtag("config",brackets.config.googleAnalyticsID,{page_title:"Phoenix editor",page_path:"/index.html",page_location:window.location.origin})},script.src="https://www.googletagmanager.com/gtag/js?"+brackets.config.googleAnalyticsID,document.getElementsByTagName("head")[0].appendChild(script)}function _initCoreAnalytics(){let script=document.createElement("script");script.type="text/javascript",script.async=!0,window.analytics.debugMode=window.debugMode,script.onload=function(){const appName=Phoenix.isNativeApp?brackets.config.coreAnalyticsAppNameDesktop:brackets.config.coreAnalyticsAppName;window.initAnalyticsSession(brackets.config.coreAnalyticsID,appName),window.analytics.event("core-analytics","client-lib","loadTime",1,(new Date).getTime()-window.analytics.loadStartTime)},script.src="https://unpkg.com/@aicore/core-analytics-client-lib/dist/analytics.min.js",document.getElementsByTagName("head")[0].appendChild(script)}async function _setPowerUserPrefix(){powerUserPrefix=null;const EntitlementsManager=KernalModeTrust.EntitlementsManager;if(cachedIsPowerUser?powerUserPrefix="P":isFirstUseDay||(powerUserPrefix="R"),EntitlementsManager&&EntitlementsManager.isLoggedIn()){if(await EntitlementsManager.isPaidSubscriber())return void(powerUserPrefix="S");powerUserPrefix="L"}}function init(initOptions={}){initDone||window.testEnvironment||(_initGoogleAnalytics(),_initCoreAnalytics(),initDone=!0,initOptions.isPowerUserFn&&(isPowerUserFn=initOptions.isPowerUserFn,cachedIsPowerUser=isPowerUserFn(),_setPowerUserPrefix(),setInterval(()=>{cachedIsPowerUser=isPowerUserFn(),_setPowerUserPrefix()},ONE_DAY)),KernalModeTrust.EntitlementsManager&&KernalModeTrust.EntitlementsManager.on(KernalModeTrust.EntitlementsManager.EVENT_ENTITLEMENTS_CHANGED,_setPowerUserPrefix))}const ignoredGAEvents=["instantSearch"];function _sendToGoogleAnalytics(category,action,label,count){if(disabled||window.testEnvironment)return;action=action||"action",label||(label=action),count||(count=1);let eventAct=`${category=category||"category"}.${action}.${label}`;ignoredGAEvents.includes(action)||_sendGaEvent(eventAct,category,label,count)}function _sendToCoreAnalytics(category,action,label,count,value){disabled||window.testEnvironment||(category=category||"category",action=action||"action",label||(label=action),value||(value=1),analytics.event(category,action,label,count,value))}const AUDIT_TYPE_COUNT="count",AUDIT_TYPE_VALUE="val";function _logEventForAudit(eventType,eventCategory,eventSubCategory,val,type){let defaultVal={eventType:type,sum:0,count:0},key=`${eventType}.${eventCategory}.${eventSubCategory}`,newVal=loggedDataForAudit.get(key)||defaultVal;if(newVal.count=newVal.count+1,newVal.sum=newVal.sum+val,loggedDataForAudit.set(key,newVal),loggedDataForAudit.size>=MAX_AUDIT_ENTRIES){const NUM_ENTRIES_TO_DELETE=1e3;let keys;Array.from(loggedDataForAudit.keys()).slice(0,NUM_ENTRIES_TO_DELETE).forEach(k=>loggedDataForAudit.delete(k))}}function _countEvent(eventType,eventCategory,eventSubCategory,count=1){_logEventForAudit(eventType,eventCategory,eventSubCategory,count,AUDIT_TYPE_COUNT),_sendToGoogleAnalytics(eventType,eventCategory,eventSubCategory,count),_sendToCoreAnalytics(eventType,eventCategory,eventSubCategory,count)}function countEvent(eventType,eventCategory,eventSubCategory,count=1){powerUserPrefix&&_countEvent(`${powerUserPrefix}-${eventType}`,eventCategory,eventSubCategory,count),_countEvent(eventType,eventCategory,eventSubCategory,count)}function _valueEvent(eventType,eventCategory,eventSubCategory,value){_logEventForAudit(eventType,eventCategory,eventSubCategory,value,AUDIT_TYPE_VALUE),_sendToGoogleAnalytics(eventType,eventCategory,eventSubCategory,value),_sendToCoreAnalytics(eventType,eventCategory,eventSubCategory,1,value)}function valueEvent(eventType,eventCategory,eventSubCategory,value){powerUserPrefix&&_valueEvent(`${powerUserPrefix}-${eventType}`,eventCategory,eventSubCategory,value),_valueEvent(eventType,eventCategory,eventSubCategory,value)}function setDisabled(shouldDisable){Phoenix._setHealthTrackingDisabled(shouldDisable),disabled=shouldDisable}function isDisabled(){return disabled}function getLoggedDataForAudit(){return loggedDataForAudit}function clearAuditData(){loggedDataForAudit.clear()}async function flushMetrics(){try{Phoenix.isNativeApp&&_sendQueuedTauriGAEvents()}catch(e){console.error("Error while flushMetrics: ",e)}}function logPerformanceTime(action,durationMs){valueEvent(EVENT_TYPE.PERFORMANCE,"ms",action,Number(durationMs))}function getRangeName(number){const ranges=[0,5,10,25,50,100,250,500,1e3,5e3,1e4];for(let i=0;i<ranges.length;i++)if(number<=ranges[i])return""+ranges[i];return"10000+"}function isPowerUser(){if(!isPowerUserFn)throw new Error("PowerUser fn is not initialized in Metrics.");return isPowerUserFn()}exports.init=init,exports.setDisabled=setDisabled,exports.isDisabled=isDisabled,exports.getLoggedDataForAudit=getLoggedDataForAudit,exports.clearAuditData=clearAuditData,exports.countEvent=countEvent,exports.valueEvent=valueEvent,exports.logPerformanceTime=logPerformanceTime,exports.flushMetrics=flushMetrics,exports.getRangeName=getRangeName,exports.isPowerUser=isPowerUser,exports.EVENT_TYPE=EVENT_TYPE,exports.AUDIT_TYPE_COUNT=AUDIT_TYPE_COUNT,exports.AUDIT_TYPE_VALUE=AUDIT_TYPE_VALUE});