in AutoCollection/CorrelationContextManager.ts [181:256]
public static startOperation(
input: azureFunctionsTypes.Context | (http.IncomingMessage | azureFunctionsTypes.HttpRequest) | SpanContext | Span,
request?: azureFunctionsTypes.HttpRequest | string)
: CorrelationContext | null {
const traceContext = input && (input as azureFunctionsTypes.Context).traceContext || null;
const span = input && (input as Span).spanContext ? input as Span : null;
const spanContext = input && (input as SpanContext).traceId ? input as SpanContext : null;
const headers = input && (input as http.IncomingMessage | azureFunctionsTypes.HttpRequest).headers;
// OpenTelemetry Span
if (span) {
return this.spanToContextObject(span.spanContext(), span.parentSpanId, span.name);
}
// OpenTelemetry SpanContext
if (spanContext) {
return this.spanToContextObject(spanContext, `|${spanContext.traceId}.${spanContext.spanId}.`, typeof request === "string" ? request : "");
}
// AzFunction TraceContext
if (traceContext) {
let traceparent = null;
let tracestate = null;
if ((request as azureFunctionsTypes.HttpRequest).headers) {
if ((request as azureFunctionsTypes.HttpRequest).headers.traceparent) {
traceparent = new Traceparent((request as azureFunctionsTypes.HttpRequest).headers.traceparent);
} else if ((request as azureFunctionsTypes.HttpRequest).headers["request-id"]) {
traceparent = new Traceparent(null, (request as azureFunctionsTypes.HttpRequest).headers["request-id"]);
}
if ((request as azureFunctionsTypes.HttpRequest).headers.tracestate) {
tracestate = new Tracestate((request as azureFunctionsTypes.HttpRequest).headers.tracestate);
}
}
if (!traceparent) {
traceparent = new Traceparent(traceContext.traceparent);
}
if (!tracestate) {
tracestate = new Tracestate(traceContext.tracestate);
}
const parser = typeof request === "object"
? new HttpRequestParser(request)
: null;
const correlationContext = CorrelationContextManager.generateContextObject(
traceparent.traceId,
traceparent.parentId,
typeof request === "string"
? request
: parser.getOperationName({}),
parser && parser.getCorrelationContextHeader() || undefined,
traceparent,
tracestate,
);
return correlationContext;
}
// No TraceContext available, parse as http.IncomingMessage
if (headers) {
const traceparent = new Traceparent(headers.traceparent ? headers.traceparent.toString() : null);
const tracestate = new Tracestate(headers.tracestate ? headers.tracestate.toString() : null);
const parser = new HttpRequestParser(input as http.IncomingMessage | azureFunctionsTypes.HttpRequest);
const correlationContext = CorrelationContextManager.generateContextObject(
traceparent.traceId,
traceparent.parentId,
parser.getOperationName({}),
parser.getCorrelationContextHeader(),
traceparent,
tracestate,
);
return correlationContext;
}
Logging.warn("startOperation was called with invalid arguments", arguments);
return null;
}