grpc/common/helpers.go (31 lines of code) (raw):
package common
import (
"context"
httpcommon "github.com/Azure/aks-middleware/http/common"
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging"
"google.golang.org/grpc/metadata"
)
// GetFields returns a logging.Fields object with the request ID and headers
func GetFields(ctx context.Context) logging.Fields {
headers := getMetadata(ctx)
return logging.Fields{
"headers", headers,
}
}
func getMetadata(ctx context.Context) map[string]string {
headersFromMD := make(map[string]string)
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
return headersFromMD
}
for _, key := range []string{
httpcommon.RequestIDMetadataHeader,
httpcommon.CorrelationIDKey,
httpcommon.OperationIDKey,
httpcommon.ARMClientRequestIDKey,
} {
if vals := md.Get(key); len(vals) > 0 {
headersFromMD[key] = vals[0]
}
}
return headersFromMD
}