@uoa/lambda-tracing
Version:
Library for logging & distributed tracing in UoA Lambda projects
48 lines (47 loc) • 2.06 kB
JavaScript
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;
;