autotel
Version:
Write Once, Observe Anywhere
53 lines (51 loc) • 1.96 kB
JavaScript
import { enterOrRun } from './chunk-BBBWDIYQ.js';
import { context, propagation, trace } from '@opentelemetry/api';
import { AsyncLocalStorage } from 'async_hooks';
var correlationStorage = new AsyncLocalStorage();
var CORRELATION_ID_BAGGAGE_KEY = "autotel.correlation_id";
function generateCorrelationId() {
const bytes = new Uint8Array(8);
crypto.getRandomValues(bytes);
return [...bytes].map((b) => b.toString(16).padStart(2, "0")).join("");
}
function getCorrelationId() {
const storedId = correlationStorage.getStore()?.value;
if (storedId) {
return storedId;
}
const activeContext = context.active();
const baggage = propagation.getBaggage(activeContext);
const baggageEntry = baggage?.getEntry(CORRELATION_ID_BAGGAGE_KEY);
if (baggageEntry?.value) {
return baggageEntry.value;
}
const span = trace.getActiveSpan();
if (span) {
const spanContext = span.spanContext();
return spanContext.traceId.slice(0, 16);
}
return void 0;
}
function getOrCreateCorrelationId() {
return getCorrelationId() ?? generateCorrelationId();
}
function runWithCorrelationId(correlationId, fn) {
return correlationStorage.run({ value: correlationId }, fn);
}
function setCorrelationId(correlationId) {
enterOrRun(correlationStorage, correlationId);
}
function setCorrelationIdInBaggage(correlationId) {
const activeContext = context.active();
let baggage = propagation.getBaggage(activeContext) ?? propagation.createBaggage();
baggage = baggage.setEntry(CORRELATION_ID_BAGGAGE_KEY, {
value: correlationId
});
return propagation.setBaggage(activeContext, baggage);
}
function getCorrelationStorage() {
return correlationStorage;
}
export { CORRELATION_ID_BAGGAGE_KEY, generateCorrelationId, getCorrelationId, getCorrelationStorage, getOrCreateCorrelationId, runWithCorrelationId, setCorrelationId, setCorrelationIdInBaggage };
//# sourceMappingURL=chunk-S4OFEXLA.js.map
//# sourceMappingURL=chunk-S4OFEXLA.js.map