UNPKG

@uoa/lambda-tracing

Version:

Library for logging & distributed tracing in UoA Lambda projects

48 lines (47 loc) 2.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setTraceInfoHeader = exports.getTraceInfoHeader = exports.initializeTracing = void 0; const sdk_trace_node_1 = require("@opentelemetry/sdk-trace-node"); const instrumentation_aws_lambda_1 = require("@opentelemetry/instrumentation-aws-lambda"); const instrumentation_1 = require("@opentelemetry/instrumentation"); const UoaB3Propagator_1 = require("./UoaB3Propagator"); const api_1 = require("@opentelemetry/api"); const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base"); const provider = new sdk_trace_node_1.NodeTracerProvider({ sampler: new sdk_trace_base_1.AlwaysOnSampler() }); let infoHeader; function initializeTracing() { provider.register({ propagator: new UoaB3Propagator_1.UoaB3Propagator() }); (0, instrumentation_1.registerInstrumentations)({ instrumentations: [ new instrumentation_aws_lambda_1.AwsLambdaInstrumentation({ requestHook: (span, { event, context }) => { span.setAttribute('faas.name', context.functionName); infoHeader = undefined; //reset header value in case lambda execution environment maintained since last invocation }, responseHook: (span, { err, res }) => { if (err instanceof Error) span.setAttribute('faas.error', err.message); if (res) span.setAttribute('faas.res', res); }, disableAwsContextPropagation: true }) ] }); } exports.initializeTracing = initializeTracing; function getTraceInfoHeader() { if (infoHeader) { return infoHeader; } else { return api_1.context.active().getValue(UoaB3Propagator_1.B3_INFO_KEY); } } exports.getTraceInfoHeader = getTraceInfoHeader; function setTraceInfoHeader(info) { infoHeader = info; } exports.setTraceInfoHeader = setTraceInfoHeader;