UNPKG

@jbrowse/core

Version:

JBrowse 2 core libraries used by plugins

87 lines (86 loc) 4.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.writeAWSAnalytics = writeAWSAnalytics; exports.writeGAAnalytics = writeGAAnalytics; exports.doAnalytics = doAnalytics; const configuration_1 = require("../configuration"); const util_1 = require("../util"); async function writeAWSAnalytics(rootModel, initialTimeStamp, sessionQuery) { try { const url = 'https://analytics.jbrowse.org/api/v1'; const multiAssemblyTracks = rootModel.jbrowse.tracks.filter((track) => ((0, configuration_1.readConfObject)(track, 'assemblyNames') || []).length > 1).length; const savedSessionCount = Object.keys(localStorage).filter(name => name.includes('localSaved-')).length; const { jbrowse: config, session, version: ver } = rootModel; const { tracks, assemblies, plugins } = config; const stats = { ver, 'plugins-count': (plugins === null || plugins === void 0 ? void 0 : plugins.length) || 0, 'plugin-names': plugins === null || plugins === void 0 ? void 0 : plugins.map((p) => p.name).join(','), 'assemblies-count': assemblies.length, 'tracks-count': tracks.length, 'session-tracks-count': (session === null || session === void 0 ? void 0 : session.sessionTracks.length) || 0, 'open-views': (session === null || session === void 0 ? void 0 : session.views.length) || 0, 'synteny-tracks-count': multiAssemblyTracks, 'saved-sessions-count': savedSessionCount, 'existing-session-param-type': (sessionQuery === null || sessionQuery === void 0 ? void 0 : sessionQuery.split('-')[0]) || 'none', 'scn-h': window.screen.height, 'scn-w': window.screen.width, 'win-h': window.innerHeight, 'win-w': window.innerWidth, electron: util_1.isElectron, loadTime: (Date.now() - initialTimeStamp) / 1000, jb2: true, }; tracks.forEach((track) => { const key = `track-types-${track.type}`; stats[key] = stats[key] + 1 || 1; }); session === null || session === void 0 ? void 0 : session.sessionTracks.forEach((track) => { const key = `sessionTrack-types-${track.type}`; stats[key] = stats[key] + 1 || 1; }); const qs = Object.keys(stats) .map(key => `${key}=${stats[key]}`) .join('&'); await fetch(`${url}?${qs}`); } catch (e) { console.error('Failed to write analytics to AWS.', e); } } async function writeGAAnalytics(rootModel, initialTimestamp) { var _a; const jbrowseUser = 'UA-7115575-5'; const stats = { 'tracks-count': rootModel.jbrowse.tracks.length, ver: rootModel.version, electron: util_1.isElectron, loadTime: Date.now() - initialTimestamp, pluginNames: ((_a = rootModel.jbrowse.plugins) === null || _a === void 0 ? void 0 : _a.map((plugin) => plugin.name)) || '', }; let analyticsScript = "(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){"; analyticsScript += '(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),'; analyticsScript += 'm=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)'; analyticsScript += "})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');"; analyticsScript += `ga('create', '${jbrowseUser}', 'auto', 'jbrowseTracker');`; const gaData = {}; const googleDimensions = 'tracks-count ver electron loadTime pluginNames'; for (const [index, key] of googleDimensions.split(/\s+/).entries()) { gaData[`dimension${index + 1}`] = stats[key]; } gaData.metric1 = Math.round(stats.loadTime); analyticsScript += `ga('jbrowseTracker.send', 'pageview',${JSON.stringify(gaData)});`; const analyticsScriptNode = document.createElement('script'); analyticsScriptNode.innerHTML = analyticsScript; document.getElementsByTagName('head')[0].append(analyticsScriptNode); } function doAnalytics(rootModel, initialTimestamp, initialSessionQuery) { if (rootModel && !(0, configuration_1.readConfObject)(rootModel.jbrowse.configuration, 'disableAnalytics')) { writeAWSAnalytics(rootModel, initialTimestamp, initialSessionQuery); writeGAAnalytics(rootModel, initialTimestamp); } }