UNPKG

gatsby-telemetry

Version:
154 lines (151 loc) 6.02 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.AnalyticsTracker = void 0; var fs = _interopRequireWildcard(require("fs-extra")); var _os = _interopRequireDefault(require("os")); var _gatsbyCoreUtils = require("gatsby-core-utils"); var _repositoryId = require("./repository-id"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /* eslint-disable @typescript-eslint/no-unused-vars */ const finalEventRegex = /(END|STOP)$/; class AnalyticsTracker { debouncer = {}; metadataCache = {}; defaultTags = {}; sessionId = this.getSessionId(); siteHash = (0, _gatsbyCoreUtils.createContentDigest)(process.cwd()); lastEnvTagsFromFileTime = 0; lastEnvTagsFromFileValue = {}; constructor(_arg = {}) { // no-op } // We might have two instances of this lib loaded, one from globally installed gatsby-cli and one from local gatsby. // Hence we need to use process level globals that are not scoped to this module. // Due to the forking on develop process, we also need to pass this via process.env so that child processes have the same sessionId getSessionId() { const p = process; if (!p.gatsbyTelemetrySessionId) { const inherited = process.env.INTERNAL_GATSBY_TELEMETRY_SESSION_ID; if (inherited) { p.gatsbyTelemetrySessionId = inherited; } else { p.gatsbyTelemetrySessionId = _gatsbyCoreUtils.uuid.v4(); process.env.INTERNAL_GATSBY_TELEMETRY_SESSION_ID = p.gatsbyTelemetrySessionId; } } else if (!process.env.INTERNAL_GATSBY_TELEMETRY_SESSION_ID) { // in case older `gatsby-telemetry` already set `gatsbyTelemetrySessionId` property on process // but didn't set env var - let's make sure env var is set process.env.INTERNAL_GATSBY_TELEMETRY_SESSION_ID = p.gatsbyTelemetrySessionId; } return p.gatsbyTelemetrySessionId; } getRepositoryId() { if (!this.repositoryId) { this.repositoryId = (0, _repositoryId.getRepositoryId)(); } return this.repositoryId; } getTagsFromEnv() { return {}; } getGatsbyVersion() { try { const packageJson = require.resolve(`gatsby/package.json`); const { version } = JSON.parse(fs.readFileSync(packageJson, `utf-8`)); return version; } catch (e) { // ignore } return `-0.0.0`; } getGatsbyCliVersion() { try { const jsonfile = require.resolve(`gatsby-cli/package.json`); const { version } = JSON.parse(fs.readFileSync(jsonfile, `utf-8`)); return version; } catch (e) { // ignore } return `-0.0.0`; } trackCli(_type = ``, _tags = {}, _opts = { debounce: false }) {} captureEvent(_type = ``, _tags = {}, _opts = { debounce: false }) {} isFinalEvent(event) { return finalEventRegex.test(event); } captureError(_type, _tags = {}) {} captureBuildError(_type, _tags = {}) {} formatErrorAndStoreEvent(_eventType, _tags) {} buildAndStoreEvent(_eventType, _tags) {} getTagsFromPath() { return {}; } getIsTTY() { var _process$stdout; return Boolean((_process$stdout = process.stdout) === null || _process$stdout === void 0 ? void 0 : _process$stdout.isTTY); } getMachineId() { return ``; } isTrackingEnabled() { return false; } getOsInfo() { if (this.osInfo) { return this.osInfo; } const cpus = _os.default.cpus(); const osInfo = { nodeVersion: process.version, platform: _os.default.platform(), release: _os.default.release(), cpus: cpus && cpus.length > 0 && cpus[0].model || undefined, arch: _os.default.arch(), ci: false, ciName: null, docker: false, termProgram: (0, _gatsbyCoreUtils.getTermProgram)(), isTTY: this.getIsTTY() }; this.osInfo = osInfo; return osInfo; } trackActivity(_source, _tags = {}) {} decorateNextEvent(_event, _obj) {} addSiteMeasurement(_event, _obj) {} decorateAll(_tags) {} setTelemetryEnabled(_enabled) {} aggregateStats(data) { const sum = data.reduce((acc, x) => acc + x, 0); const mean = sum / data.length || 0; const median = data.sort()[Math.floor((data.length - 1) / 2)] || 0; const stdDev = Math.sqrt(data.reduce((acc, x) => acc + Math.pow(x - mean, 2), 0) / (data.length - 1)) || 0; const skewness = data.reduce((acc, x) => acc + Math.pow(x - mean, 3), 0) / data.length / Math.pow(stdDev, 3); return { count: data.length, min: data.reduce((acc, x) => x < acc ? x : acc, data[0] || 0), max: data.reduce((acc, x) => x > acc ? x : acc, 0), sum: sum, mean: mean, median: median, stdDev: stdDev, skewness: !Number.isNaN(skewness) ? skewness : 0 }; } captureMetadataEvent() {} async sendEvents() { return true; } trackFeatureIsUsed(_name) {} } exports.AnalyticsTracker = AnalyticsTracker;