UNPKG

applicationinsights

Version:

Microsoft Application Insights module for Node.js

1 lines 14.2 kB
{"version":3,"file":"logsApi.js","sourceRoot":"","sources":["../../../src/shim/logsApi.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\r\n// Licensed under the MIT license.\r\n\r\nimport { Logger as OtelLogger, LogRecord } from \"@opentelemetry/api-logs\";\r\nimport { LogRecord as SDKLogRecord } from \"@opentelemetry/sdk-logs\";\r\nimport { Attributes, diag } from \"@opentelemetry/api\";\r\nimport { IdGenerator, RandomIdGenerator } from \"@opentelemetry/sdk-trace-base\";\r\n\r\nimport * as Contracts from \"../declarations/contracts\";\r\nimport {\r\n AvailabilityData,\r\n KnownSeverityLevel,\r\n MessageData,\r\n MonitorDomain,\r\n PageViewData,\r\n TelemetryEventData,\r\n TelemetryExceptionData,\r\n TelemetryExceptionDetails\r\n} from \"../declarations/generated\";\r\nimport { Util } from \"../shared/util\";\r\nimport { parseStack } from \"../logs/exceptions\";\r\n\r\n/**\r\n * Log manual API to generate Application Insights telemetry\r\n */\r\nexport class LogApi {\r\n private _idGenerator: IdGenerator;\r\n private _logger: OtelLogger;\r\n\r\n /**\r\n * Constructs a new client of LogApi\r\n */\r\n constructor(logger: OtelLogger) {\r\n this._idGenerator = new RandomIdGenerator();\r\n this._logger = logger;\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 try {\r\n const logRecord = this._availabilityToLogRecord(\r\n telemetry\r\n );\r\n this._logger.emit(logRecord);\r\n } catch (err) {\r\n diag.error(\"Failed to send telemetry.\", err);\r\n }\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 try {\r\n const logRecord = this._pageViewToLogRecord(\r\n telemetry\r\n );\r\n this._logger.emit(logRecord);\r\n } catch (err) {\r\n diag.error(\"Failed to send telemetry.\", err);\r\n }\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 try {\r\n const logRecord = this._traceToLogRecord(telemetry) as SDKLogRecord;\r\n this._logger.emit(logRecord);\r\n } catch (err) {\r\n diag.error(\"Failed to send telemetry.\", err);\r\n }\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 (telemetry && telemetry.exception && !Util.getInstance().isError(telemetry.exception)) {\r\n telemetry.exception = new Error(telemetry.exception.toString());\r\n }\r\n try {\r\n const logRecord = this._exceptionToLogRecord(\r\n telemetry\r\n ) as SDKLogRecord;\r\n this._logger.emit(logRecord);\r\n } catch (err) {\r\n diag.error(\"Failed to send telemetry.\", err);\r\n }\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 try {\r\n const logRecord = this._eventToLogRecord(telemetry);\r\n this._logger.emit(logRecord);\r\n } catch (err) {\r\n diag.error(\"Failed to send telemetry.\", err);\r\n }\r\n }\r\n\r\n private _telemetryToLogRecord(\r\n telemetry: Contracts.Telemetry,\r\n baseType: string,\r\n baseData: MonitorDomain\r\n ): LogRecord {\r\n try {\r\n const attributes: Attributes = {};\r\n if (telemetry.properties) {\r\n for (const [key, value] of Object.entries(telemetry.properties)) {\r\n // Serialize Error objects as strings to avoid serialization errors\r\n if (value?.constructor.name === \"Error\") {\r\n attributes[key] = Util.getInstance().stringify(\r\n {\r\n name: value.name,\r\n message: value.message,\r\n stack: value.stack,\r\n cause: value.cause,\r\n }\r\n );\r\n } else {\r\n attributes[key] = typeof value === 'object'\r\n ? Util.getInstance().stringify(value)\r\n : value;\r\n }\r\n }\r\n }\r\n\r\n const record: LogRecord = { attributes: attributes, body: baseData };\r\n record.attributes[\"_MS.baseType\"] = baseType;\r\n return record;\r\n }\r\n catch (err) {\r\n diag.warn(\"Failed to convert telemetry event to Log Record.\", err);\r\n }\r\n }\r\n\r\n /**\r\n * Availability Log to LogRecord parsing.\r\n * @internal\r\n */\r\n private _availabilityToLogRecord(\r\n telemetry: Contracts.AvailabilityTelemetry\r\n ): LogRecord {\r\n const baseType = \"AvailabilityData\";\r\n const baseData: AvailabilityData = {\r\n id: telemetry.id || this._idGenerator.generateSpanId(),\r\n name: telemetry.name,\r\n duration: Util.getInstance().msToTimeSpan(telemetry.duration),\r\n success: telemetry.success,\r\n runLocation: telemetry.runLocation,\r\n message: telemetry.message,\r\n measurements: telemetry.measurements,\r\n version: 2,\r\n };\r\n const record = this._telemetryToLogRecord(telemetry, baseType, baseData);\r\n return record;\r\n }\r\n\r\n /**\r\n * Exception to LogRecord parsing.\r\n * @internal\r\n */\r\n private _exceptionToLogRecord(\r\n telemetry: Contracts.ExceptionTelemetry\r\n ): LogRecord {\r\n const baseType = \"ExceptionData\";\r\n const stack = telemetry.exception[\"stack\"];\r\n const parsedStack = parseStack(stack);\r\n const exceptionDetails: TelemetryExceptionDetails = {\r\n message: telemetry.exception.message,\r\n typeName: telemetry.exception.name,\r\n parsedStack: parsedStack,\r\n hasFullStack: Util.getInstance().isArray(parsedStack) && parsedStack.length > 0,\r\n };\r\n\r\n const baseData: TelemetryExceptionData = {\r\n severityLevel: telemetry.severity || KnownSeverityLevel.Error,\r\n exceptions: [exceptionDetails],\r\n measurements: telemetry.measurements,\r\n version: 2,\r\n };\r\n const record = this._telemetryToLogRecord(telemetry, baseType, baseData);\r\n return record;\r\n }\r\n\r\n /**\r\n * Trace to LogRecord parsing.\r\n * @internal\r\n */\r\n private _traceToLogRecord(telemetry: Contracts.TraceTelemetry): LogRecord {\r\n const baseType = \"MessageData\";\r\n const baseData: MessageData = {\r\n message: telemetry.message,\r\n severityLevel: telemetry.severity || KnownSeverityLevel.Information,\r\n measurements: telemetry.measurements,\r\n version: 2,\r\n };\r\n const record = this._telemetryToLogRecord(telemetry, baseType, baseData);\r\n return record;\r\n }\r\n\r\n /**\r\n * PageView to LogRecord parsing.\r\n * @internal\r\n */\r\n private _pageViewToLogRecord(\r\n telemetry: Contracts.PageViewTelemetry\r\n ): LogRecord {\r\n const baseType = \"PageViewData\";\r\n const baseData: PageViewData = {\r\n id: telemetry.id || this._idGenerator.generateSpanId(),\r\n name: telemetry.name,\r\n duration: Util.getInstance().msToTimeSpan(telemetry.duration),\r\n url: telemetry.url,\r\n referredUri: telemetry.referredUri,\r\n measurements: telemetry.measurements,\r\n version: 2,\r\n };\r\n\r\n const record = this._telemetryToLogRecord(telemetry, baseType, baseData);\r\n return record;\r\n }\r\n\r\n /**\r\n * Event to LogRecord parsing.\r\n * @internal\r\n */\r\n private _eventToLogRecord(telemetry: Contracts.EventTelemetry): LogRecord {\r\n const baseType = \"EventData\";\r\n const baseData: TelemetryEventData = {\r\n name: telemetry.name,\r\n measurements: telemetry.measurements,\r\n version: 2,\r\n };\r\n const record = this._telemetryToLogRecord(telemetry, baseType, baseData);\r\n return record;\r\n }\r\n}\r\n"]}