export function createCorrelationContextHeader()

in src/requestTracing/utils.ts [86:147]


export function createCorrelationContextHeader(requestTracingOptions: RequestTracingOptions): string {
    /*
    RequestType: 'Startup' during application starting up, 'Watch' after startup completed.
    Host: identify with defined envs
    Env: identify by env `NODE_ENV` which is a popular but not standard. Usually, the value can be "development", "production".
    ReplicaCount: identify how many replicas are found
    Features: LB
    Filter: CSTM+TIME+TRGT
    MaxVariants: identify the max number of variants feature flag uses
    FFFeatures: Seed+Telemetry
    UsersKeyVault
    Failover
    */
    const keyValues = new Map<string, string | undefined>();
    const tags: string[] = [];

    keyValues.set(REQUEST_TYPE_KEY, requestTracingOptions.initialLoadCompleted ? RequestType.WATCH : RequestType.STARTUP);
    keyValues.set(HOST_TYPE_KEY, getHostType());
    keyValues.set(ENV_KEY, isDevEnvironment() ? DEV_ENV_VAL : undefined);

    const appConfigOptions = requestTracingOptions.appConfigOptions;
    if (appConfigOptions?.keyVaultOptions) {
        const { credential, secretClients, secretResolver } = appConfigOptions.keyVaultOptions;
        if (credential !== undefined || secretClients?.length || secretResolver !== undefined) {
            tags.push(KEY_VAULT_CONFIGURED_TAG);
        }
    }

    const featureFlagTracing = requestTracingOptions.featureFlagTracing;
    if (featureFlagTracing) {
        keyValues.set(FEATURE_FILTER_TYPE_KEY, featureFlagTracing.usesAnyFeatureFilter() ? featureFlagTracing.createFeatureFiltersString() : undefined);
        keyValues.set(FF_FEATURES_KEY, featureFlagTracing.usesAnyTracingFeature() ? featureFlagTracing.createFeaturesString() : undefined);
        if (featureFlagTracing.maxVariants > 0) {
            keyValues.set(FF_MAX_VARIANTS_KEY, featureFlagTracing.maxVariants.toString());
        }
    }

    if (requestTracingOptions.isFailoverRequest) {
        tags.push(FAILOVER_REQUEST_TAG);
    }
    if (requestTracingOptions.replicaCount > 0) {
        keyValues.set(REPLICA_COUNT_KEY, requestTracingOptions.replicaCount.toString());
    }
    if (requestTracingOptions.fmVersion) {
        keyValues.set(FM_VERSION_KEY, requestTracingOptions.fmVersion);
    }

    // Use compact tags for new tracing features: Features=LB+AI+AICC...
    keyValues.set(FEATURES_KEY, usesAnyTracingFeature(requestTracingOptions) ? createFeaturesString(requestTracingOptions) : undefined);

    const contextParts: string[] = [];
    for (const [key, value] of keyValues) {
        if (value !== undefined) {
            contextParts.push(`${key}=${value}`);
        }
    }
    for (const tag of tags) {
        contextParts.push(tag);
    }

    return contextParts.join(",");
}