internal/loader/request_tracing.go (61 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
package loader
import (
acpv1 "azappconfig/provider/api/v1"
"context"
"fmt"
"net/http"
"os"
"strings"
)
type TracingKey string
type RequestTracing struct {
IsStartUp bool
}
const (
RequestTracingKey TracingKey = TracingKey("tracing")
AzureExtensionContext string = "AZURE_EXTENSION_CONTEXT"
)
func createCorrelationContextHeader(ctx context.Context, provider acpv1.AzureAppConfigurationProvider, clientManager ClientManager, isFailoverRequest bool) http.Header {
header := http.Header{}
output := make([]string, 0)
output = append(output, "Host=Kubernetes")
if tracing := ctx.Value(RequestTracingKey); tracing != nil {
if tracing.(RequestTracing).IsStartUp {
output = append(output, "RequestType=StartUp")
} else {
output = append(output, "RequestType=Watch")
}
}
if provider.Spec.Secret != nil {
output = append(output, "UsesKeyVault")
if provider.Spec.Secret.Refresh != nil &&
provider.Spec.Secret.Refresh.Enabled {
output = append(output, "RefreshesKeyVault")
}
}
if provider.Spec.FeatureFlag != nil {
output = append(output, "UsesFeatureFlag")
}
if provider.Spec.ReplicaDiscoveryEnabled {
if manager, ok := clientManager.(*ConfigurationClientManager); ok {
replicaCount := 0
if manager.DynamicClientWrappers != nil {
replicaCount = len(manager.DynamicClientWrappers)
}
output = append(output, fmt.Sprintf("ReplicaCount=%d", replicaCount))
}
if isFailoverRequest {
output = append(output, "FailoverRequest")
}
}
if provider.Spec.LoadBalancingEnabled {
output = append(output, "Features=LB")
}
if _, ok := os.LookupEnv(AzureExtensionContext); ok {
output = append(output, "InstalledBy=Extension")
} else {
output = append(output, "InstalledBy=Helm")
}
header.Add("Correlation-Context", strings.Join(output, ","))
return header
}