UNPKG

@azure/monitor-opentelemetry

Version:
94 lines 7.09 kB
"use strict"; // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", { value: true }); exports.getInstance = getInstance; const types_js_1 = require("../types.js"); const index_js_1 = require("../shared/logging/index.js"); let instance; class StatsbeatConfiguration { constructor() { // Initial Statsbeat options this.initializedByShim = false; this.currentStatsbeatInstrumentations = {}; this.currentStatsbeatFeatures = {}; this.setStatsbeatFeatures = (statsbeatInstrumentations, statsbeatFeatures) => { let statsbeatEnv; try { statsbeatEnv = JSON.parse(process.env[types_js_1.AZURE_MONITOR_STATSBEAT_FEATURES] || "{}"); } catch (error) { index_js_1.Logger.getInstance().error("Failed to parse statsbeat config environment variable.", error); } this.currentStatsbeatInstrumentations = Object.assign(Object.assign({}, this.currentStatsbeatInstrumentations), statsbeatInstrumentations); this.currentStatsbeatFeatures = Object.assign(Object.assign({}, this.currentStatsbeatFeatures), statsbeatFeatures); // Set the statsbeat options for community instrumentations based on the environment variable statsbeatInstrumentations = Object.assign(Object.assign({}, this.currentStatsbeatInstrumentations), { amqplib: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.AMQPLIB ? true : false, cucumber: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.CUCUMBER ? true : false, dataloader: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.DATALOADER ? true : false, fs: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.FS ? true : false, lruMemoizer: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.LRU_MEMOIZER ? true : false, mongoose: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.MONGOOSE ? true : false, runtimeNode: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.RUNTIME_NODE ? true : false, socketIo: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.SOCKET_IO ? true : false, tedious: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.TEDIOUS ? true : false, undici: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.UNDICI ? true : false, cassandra: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.CASSANDRA ? true : false, connect: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.CONNECT ? true : false, dns: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.DNS ? true : false, express: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.EXPRESS ? true : false, fastify: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.FASTIFY ? true : false, genericPool: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.GENERIC_POOL ? true : false, graphql: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.GRAPHQL ? true : false, hapi: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.HAPI ? true : false, ioredis: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.IOREDIS ? true : false, knex: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.KNEX ? true : false, koa: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.KOA ? true : false, memcached: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.MEMCACHED ? true : false, mysql2: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.MYSQL2 ? true : false, nestjsCore: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.NESTJS_CORE ? true : false, net: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.NET ? true : false, pino: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.PINO ? true : false, restify: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.RESTIFY ? true : false, router: statsbeatEnv.instrumentation & types_js_1.StatsbeatInstrumentation.ROUTER ? true : false }); let instrumentationBitMap = types_js_1.StatsbeatInstrumentation.NONE; const instrumentationArray = Object.entries(statsbeatInstrumentations).map((entry) => { return { option: entry[0], value: entry[1] }; }); // Map the instrumentation options to a bit map for (let i = 0; i < instrumentationArray.length; i++) { if (instrumentationArray[i].value) { instrumentationBitMap |= 2 ** i; } } // Create feature bit map let featureBitMap = types_js_1.StatsbeatFeature.NONE; if (this.initializedByShim) { this.currentStatsbeatFeatures.shim = true; } else { this.currentStatsbeatFeatures.distro = true; } if (statsbeatFeatures.liveMetrics) { this.currentStatsbeatFeatures.liveMetrics = true; } const featureArray = Object.entries(this.currentStatsbeatFeatures).map((entry) => { return { option: entry[0], value: entry[1] }; }); // Map the feature options to a bit map for (let i = 0; i < featureArray.length; i++) { if (featureArray[i].value) { featureBitMap |= types_js_1.StatsbeatFeaturesMap.get(featureArray[i].option); } } // Merge old statsbeat options with new statsbeat options overriding any common properties try { const currentFeaturesBitMap = Number(process.env[types_js_1.AZURE_MONITOR_STATSBEAT_FEATURES]); if (!isNaN(currentFeaturesBitMap)) { featureBitMap |= currentFeaturesBitMap; } process.env[types_js_1.AZURE_MONITOR_STATSBEAT_FEATURES] = JSON.stringify({ instrumentation: instrumentationBitMap, feature: featureBitMap, }); } catch (error) { index_js_1.Logger.getInstance().error("Failed call to JSON.stringify.", error); } }; // Check for shim initialization upon construction try { if (JSON.parse(process.env[types_js_1.AZURE_MONITOR_STATSBEAT_FEATURES] || "{}").feature & types_js_1.StatsbeatFeature.SHIM) { this.initializedByShim = true; } } catch (error) { index_js_1.Logger.getInstance().error("Failed to parse statsbeat config environment variable.", error); } } } /** * Singleton Statsbeat instance. * @internal */ function getInstance() { if (!instance) { instance = new StatsbeatConfiguration(); } return instance; } //# sourceMappingURL=statsbeat.js.map