Files
chatgpt-creator/internal/util/trace.go
2026-03-10 23:25:12 +07:00

38 lines
1.1 KiB
Go

package util
import (
"crypto/rand"
"encoding/hex"
"fmt"
"math/big"
)
// MakeTraceHeaders generates Datadog-compatible trace headers.
func MakeTraceHeaders() map[string]string {
traceID := make([]byte, 16)
rand.Read(traceID)
spanID := make([]byte, 8)
rand.Read(spanID)
traceIDHex := hex.EncodeToString(traceID)
spanIDHex := hex.EncodeToString(spanID)
// traceparent: 00-{traceID}-{spanID}-01
traceparent := fmt.Sprintf("00-%s-%s-01", traceIDHex, spanIDHex)
// tracestate: dd=t.dm:-1;t.tid:{first16ofTraceID};s:-1
tracestate := fmt.Sprintf("dd=t.dm:-1;t.tid:%s;s:-1", traceIDHex[:16])
// x-datadog-trace-id: decimal conversion of last 16 hex chars (last 8 bytes)
traceIDInt := new(big.Int).SetBytes(traceID[8:])
// x-datadog-parent-id: decimal conversion of spanID
spanIDInt := new(big.Int).SetBytes(spanID)
return map[string]string{
"traceparent": traceparent,
"tracestate": tracestate,
"x-datadog-trace-id": traceIDInt.String(),
"x-datadog-parent-id": spanIDInt.String(),
"x-datadog-sampling-priority": "-1",
}
}