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(",");
}