public static startOperation()

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;
    }