UNPKG

applicationinsights

Version:

Microsoft Application Insights module for Node.js

1 lines 21.3 kB
{"version":3,"file":"telemetryClient.js","sourceRoot":"","sources":["../../../src/shim/telemetryClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT license.\r\n\r\nimport { Attributes, context, metrics, ProxyTracerProvider, SpanKind, SpanOptions, SpanStatusCode, diag, trace } from \"@opentelemetry/api\";\r\nimport { logs } from \"@opentelemetry/api-logs\";\r\nimport { LoggerProvider } from \"@opentelemetry/sdk-logs\";\r\nimport { \r\n SEMATTRS_DB_STATEMENT,\r\n SEMATTRS_DB_SYSTEM,\r\n SEMATTRS_HTTP_METHOD,\r\n SEMATTRS_HTTP_STATUS_CODE,\r\n SEMATTRS_HTTP_URL,\r\n SEMATTRS_PEER_SERVICE,\r\n SEMATTRS_RPC_GRPC_STATUS_CODE,\r\n SEMATTRS_RPC_METHOD,\r\n SEMATTRS_RPC_SYSTEM\r\n} from \"@opentelemetry/semantic-conventions\";\r\nimport * as Contracts from \"../declarations/contracts\";\r\nimport { TelemetryItem as Envelope } from \"../declarations/generated\";\r\nimport { Context } from \"./context\";\r\nimport { Util } from \"../shared/util\";\r\nimport Config = require(\"./shim-config\");\r\nimport { AttributeSpanProcessor } from \"../shared/util/attributeSpanProcessor\";\r\nimport { NodeTracerProvider } from \"@opentelemetry/sdk-trace-node\";\r\nimport { AttributeLogProcessor } from \"../shared/util/attributeLogRecordProcessor\";\r\nimport { LogApi } from \"./logsApi\";\r\nimport { flushAzureMonitor, shutdownAzureMonitor, useAzureMonitor } from \"../main\";\r\nimport { AzureMonitorOpenTelemetryOptions } from \"../types\";\r\nimport { UNSUPPORTED_MSG } from \"./types\";\r\n\r\n/**\r\n * Application Insights telemetry client provides interface to track telemetry items, register telemetry initializers and\r\n * and manually trigger immediate sending (flushing)\r\n */\r\nexport class TelemetryClient {\r\n public context: Context;\r\n public commonProperties: { [key: string]: string };\r\n public config: Config;\r\n private _attributeSpanProcessor: AttributeSpanProcessor;\r\n private _attributeLogProcessor: AttributeLogProcessor;\r\n private _logApi: LogApi;\r\n private _isInitialized: boolean;\r\n private _options: AzureMonitorOpenTelemetryOptions;\r\n private _configWarnings: string[] = [];\r\n\r\n /**\r\n * Constructs a new instance of TelemetryClient\r\n * @param setupString the Connection String or Instrumentation Key to use (read from environment variable if not specified)\r\n */\r\n constructor(input?: string) {\r\n const config = new Config(input, this._configWarnings);\r\n this.config = config;\r\n this.commonProperties = {};\r\n this.context = new Context();\r\n this._isInitialized = false;\r\n }\r\n\r\n public initialize() {\r\n this._isInitialized = true;\r\n // Parse shim config to Azure Monitor options\r\n this._options = this.config.parseConfig();\r\n useAzureMonitor(this._options);\r\n try {\r\n // LoggerProvider would be initialized when client is instantiated\r\n // Get Logger from global provider\r\n this._logApi = new LogApi(logs.getLogger(\"ApplicationInsightsLogger\"));\r\n this._attributeSpanProcessor = new AttributeSpanProcessor({ ...this.context.tags, ...this.commonProperties });\r\n ((trace.getTracerProvider() as ProxyTracerProvider).getDelegate() as NodeTracerProvider).addSpanProcessor(this._attributeSpanProcessor);\r\n\r\n this._attributeLogProcessor = new AttributeLogProcessor({ ...this.context.tags, ...this.commonProperties });\r\n (logs.getLoggerProvider() as LoggerProvider).addLogRecordProcessor(this._attributeLogProcessor);\r\n\r\n // Warn if any config warnings were generated during parsing\r\n for (let i = 0; i < this._configWarnings.length; i++) {\r\n diag.warn(this._configWarnings[i]);\r\n }\r\n } \r\n catch (error) {\r\n diag.error(`Failed to initialize TelemetryClient ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Log information about availability of an application\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n public trackAvailability(telemetry: Contracts.AvailabilityTelemetry): void {\r\n if (!this._isInitialized) {\r\n this.initialize();\r\n }\r\n this._logApi.trackAvailability(telemetry);\r\n }\r\n\r\n /**\r\n * Log a page view\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n public trackPageView(telemetry: Contracts.PageViewTelemetry): void {\r\n if (!this._isInitialized) {\r\n this.initialize();\r\n }\r\n this._logApi.trackPageView(telemetry);\r\n }\r\n\r\n /**\r\n * Log a trace message\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n public trackTrace(telemetry: Contracts.TraceTelemetry): void {\r\n if (!this._isInitialized) {\r\n this.initialize();\r\n }\r\n this._logApi.trackTrace(telemetry);\r\n }\r\n\r\n /**\r\n * Log an exception\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n public trackException(telemetry: Contracts.ExceptionTelemetry): void {\r\n if (!this._isInitialized) {\r\n this.initialize();\r\n }\r\n this._logApi.trackException(telemetry);\r\n }\r\n\r\n /**\r\n * Log a user action or other occurrence.\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n public trackEvent(telemetry: Contracts.EventTelemetry): void {\r\n if (!this._isInitialized) {\r\n this.initialize();\r\n }\r\n this._logApi.trackEvent(telemetry);\r\n }\r\n\r\n /**\r\n * Log a numeric value that is not associated with a specific event. Typically used to send regular reports of performance indicators.\r\n * To send a single measurement, use just the first two parameters. If you take measurements very frequently, you can reduce the\r\n * telemetry bandwidth by aggregating multiple measurements and sending the resulting average at intervals.\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n public trackMetric(telemetry: Contracts.MetricPointTelemetry & Contracts.MetricTelemetry): void {\r\n if (!this._isInitialized) {\r\n this.initialize();\r\n }\r\n // Create custom metric\r\n try {\r\n const meter = metrics.getMeterProvider().getMeter(\"ApplicationInsightsMetrics\");\r\n const histogram = meter.createHistogram(telemetry.name);\r\n histogram.record(telemetry.value, { ...telemetry.properties, ...this.commonProperties, ...this.context.tags });\r\n } catch (error) {\r\n diag.error(`Failed to record metric: ${error}`);\r\n }\r\n }\r\n\r\n /**\r\n * Log a request. Note that the default client will attempt to collect HTTP requests automatically so only use this for requests\r\n * that aren't automatically captured or if you've disabled automatic request collection.\r\n *\r\n * @param telemetry Object encapsulating tracking options\r\n */\r\n public trackRequest(telemetry: Contracts.RequestTelemetry): void {\r\n if (!this._isInitialized) {\r\n this.initialize();\r\n }\r\n const startTime = telemetry.time || new Date();\r\n const endTime = startTime.getTime() + telemetry.duration;\r\n\r\n const ctx = context.active();\r\n const attributes: Attributes = {\r\n ...telemetry.properties,\r\n };\r\n attributes[SEMATTRS_HTTP_METHOD] = \"HTTP\";\r\n attributes[SEMATTRS_HTTP_URL] = telemetry.url;\r\n attributes[SEMATTRS_HTTP_STATUS_CODE] = telemetry.resultCode;\r\n const options: SpanOptions = {\r\n kind: SpanKind.SERVER,\r\n attributes: attributes,\r\n startTime: startTime,\r\n };\r\n const span: any = trace.getTracer(\"ApplicationInsightsTracer\")\r\n .startSpan(telemetry.name, options, ctx);\r\n span.setStatus({\r\n code: telemetry.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\r\n });\r\n span.end(endTime);\r\n }\r\n\r\n /**\r\n * Log a dependency. Note that the default client will attempt to collect dependencies automatically so only use this for dependencies\r\n * that aren't automatically captured or if you've disabled automatic dependency collection.\r\n *\r\n * @param telemetry Object encapsulating tracking option\r\n * */\r\n public trackDependency(telemetry: Contracts.DependencyTelemetry) {\r\n if (!this._isInitialized) {\r\n this.initialize();\r\n }\r\n const startTime = telemetry.time || new Date();\r\n const endTime = startTime.getTime() + telemetry.duration;\r\n if (telemetry && !telemetry.target && telemetry.data) {\r\n // url.parse().host returns null for non-urls,\r\n // making this essentially a no-op in those cases\r\n // If this logic is moved, update jsdoc in DependencyTelemetry.target\r\n // url.parse() is deprecated, update to use WHATWG URL API instead\r\n try {\r\n telemetry.target = new URL(telemetry.data).host;\r\n } catch (error) {\r\n // set target as null to be compliant with previous behavior\r\n telemetry.target = null;\r\n diag.warn(this.constructor.name, \"Failed to create URL.\", error);\r\n }\r\n }\r\n const ctx = context.active();\r\n const attributes: Attributes = {\r\n ...telemetry.properties,\r\n };\r\n if (telemetry.dependencyTypeName) {\r\n if (telemetry.dependencyTypeName.toLowerCase().indexOf(\"http\") > -1) {\r\n attributes[SEMATTRS_HTTP_METHOD] = \"HTTP\";\r\n attributes[SEMATTRS_HTTP_URL] = telemetry.data;\r\n attributes[SEMATTRS_HTTP_STATUS_CODE] = telemetry.resultCode;\r\n } else if (Util.getInstance().isDbDependency(telemetry.dependencyTypeName)) {\r\n attributes[SEMATTRS_DB_SYSTEM] = telemetry.dependencyTypeName;\r\n attributes[SEMATTRS_DB_STATEMENT] = telemetry.data;\r\n } else if (telemetry.dependencyTypeName.toLowerCase().indexOf(\"rpc\") > -1) {\r\n attributes[SEMATTRS_RPC_SYSTEM] = telemetry.dependencyTypeName;\r\n attributes[SEMATTRS_RPC_METHOD] = telemetry.data;\r\n attributes[SEMATTRS_RPC_GRPC_STATUS_CODE] = telemetry.resultCode;\r\n }\r\n }\r\n if (telemetry.target) {\r\n attributes[SEMATTRS_PEER_SERVICE] = telemetry.target;\r\n }\r\n const options: SpanOptions = {\r\n kind: SpanKind.CLIENT,\r\n attributes: attributes,\r\n startTime: startTime,\r\n };\r\n const span: any = trace.getTracer(\"ApplicationInsightsTracer\")\r\n .startSpan(telemetry.name, options, ctx);\r\n span.setStatus({\r\n code: telemetry.success ? SpanStatusCode.OK : SpanStatusCode.ERROR,\r\n });\r\n span.end(endTime);\r\n }\r\n /**\r\n * Generic track method for all telemetry types\r\n * @param data the telemetry to send\r\n * @param telemetryType specify the type of telemetry you are tracking from the list of Contracts.DataTypes\r\n */\r\n public track(telemetry: Contracts.Telemetry, telemetryType: Contracts.TelemetryType) {\r\n throw new Error(`Not implemented. Please use the specific track method for the type of telemetry you are tracking. ${UNSUPPORTED_MSG}`);\r\n }\r\n\r\n /**\r\n * Automatically populate telemetry properties like RoleName when running in Azure\r\n *\r\n * @param value if true properties will be populated\r\n */\r\n public setAutoPopulateAzureProperties() {\r\n // NO-OP\r\n }\r\n\r\n /**\r\n * Get Authorization handler\r\n */\r\n public getAuthorizationHandler(config: Config): void {\r\n diag.warn(`getAuthorizationHandler is not supported in ApplicationInsights any longer. ${UNSUPPORTED_MSG}`);\r\n }\r\n\r\n /*\r\n * Get Statsbeat instance\r\n */\r\n public getStatsbeat(): any {\r\n return null;\r\n }\r\n\r\n public setUseDiskRetryCaching(\r\n value: boolean,\r\n resendInterval?: number,\r\n maxBytesOnDisk?: number\r\n ) {\r\n throw new Error(\"Not implemented\");\r\n }\r\n\r\n /**\r\n * Adds telemetry processor to the collection. Telemetry processors will be called one by one\r\n * before telemetry item is pushed for sending and in the order they were added.\r\n *\r\n * @param telemetryProcessor function, takes Envelope, and optional context object and returns boolean\r\n */\r\n public addTelemetryProcessor(\r\n telemetryProcessor: (\r\n envelope: Envelope,\r\n contextObjects?: { [name: string]: any }\r\n ) => boolean\r\n ) {\r\n diag.warn(`addTelemetryProcessor is not supported in ApplicationInsights any longer. ${UNSUPPORTED_MSG}`);\r\n }\r\n\r\n /*\r\n * Removes all telemetry processors\r\n */\r\n public clearTelemetryProcessors() {\r\n throw new Error(\"Not implemented\");\r\n }\r\n\r\n public trackNodeHttpRequestSync(telemetry: Contracts.NodeHttpRequestTelemetry) {\r\n diag.warn(\"trackNodeHttpRequestSync is not implemented and is a no-op. Please use trackRequest instead.\");\r\n }\r\n\r\n public trackNodeHttpRequest(telemetry: Contracts.NodeHttpRequestTelemetry) {\r\n diag.warn(\"trackNodeHttpRequest is not implemented and is a no-op. Please use trackRequest instead.\");\r\n }\r\n\r\n public trackNodeHttpDependency(telemetry: Contracts.NodeHttpRequestTelemetry) {\r\n diag.warn(\"trackNodeHttpDependency is not implemented and is a no-op. Please use trackDependency instead.\");\r\n }\r\n\r\n /**\r\n * Immediately send all queued telemetry.\r\n */\r\n public async flush(): Promise<void> {\r\n return flushAzureMonitor();\r\n }\r\n\r\n /**\r\n * Shutdown client\r\n */\r\n public async shutdown(): Promise<void> {\r\n return shutdownAzureMonitor();\r\n }\r\n\r\n public pushWarningToLog(warning: string) {\r\n this._configWarnings.push(warning);\r\n }\r\n}\r\n"]}