63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
// telemetryHeaders demonstrates a provider-neutral compatibility boundary for
|
|
// gateways that carry trace IDs in configurable HTTP headers.
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
|
|
omni "git.yuntuo.hk/k2safe/go-omni"
|
|
"git.yuntuo.hk/k2safe/go-omni/logx"
|
|
"git.yuntuo.hk/k2safe/go-omni/telemetry"
|
|
)
|
|
|
|
func main() {
|
|
if err := run(); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
func run() error {
|
|
propagator, err := telemetry.NewHeaderPropagator(telemetry.HeaderPropagationConfig{
|
|
TraceIDHeader: "X-Trace-Id", SpanIDHeader: "X-Span-Id", RequestIDHeader: "X-Request-Id",
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
runtime, err := telemetry.New(telemetry.Config{Service: "header-example", SampleRatio: 1, Propagator: propagator})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer runtime.Close()
|
|
app := omni.New(omni.WithLogger(false), omni.WithRequestIDHeader("X-Request-Id"))
|
|
defer app.Close()
|
|
app.Use(runtime.Middleware())
|
|
app.GET("/", func(c *omni.Context) error {
|
|
fmt.Printf("traceId=%s requestId=%s\n", logx.TraceID(c.Context()), logx.RequestID(c.Context()))
|
|
return c.OK(map[string]string{"traceId": logx.TraceID(c.Context()), "requestId": logx.RequestID(c.Context())})
|
|
})
|
|
server := httptest.NewServer(app)
|
|
defer server.Close()
|
|
req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, server.URL, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
req.Header.Set("X-Trace-Id", "11111111111111111111111111111111")
|
|
req.Header.Set("X-Span-Id", "2222222222222222")
|
|
req.Header.Set("X-Request-Id", "example-request")
|
|
resp, err := http.DefaultClient.Do(req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer resp.Body.Close()
|
|
body, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("status=%d response=%s", resp.StatusCode, body)
|
|
return nil
|
|
}
|