From 2c85a72737ae4ff70d91b7d08038d73a3fbe899b Mon Sep 17 00:00:00 2001 From: Rajat Vig Date: Thu, 16 Dec 2021 14:12:32 +0000 Subject: [PATCH] Add back copyTraceHeaders() as OpenTelemetry does not default propagate --- cmd/podinfo/main.go | 2 +- pkg/api/echo.go | 22 +++++++++++++++++ pkg/api/mock.go | 48 ++++++++++++++++++------------------- pkg/signals/signal_posix.go | 1 + 4 files changed, 48 insertions(+), 25 deletions(-) diff --git a/cmd/podinfo/main.go b/cmd/podinfo/main.go index 987d54f..b7af51f 100644 --- a/cmd/podinfo/main.go +++ b/cmd/podinfo/main.go @@ -53,7 +53,7 @@ func main() { fs.Int("stress-cpu", 0, "number of CPU cores with 100 load") fs.Int("stress-memory", 0, "MB of data to load into memory") fs.String("cache-server", "", "Redis address in the format :") - fs.String("otel-service-name", "podinfo", "Redis address in the format :") + fs.String("otel-service-name", "podinfo", "service name for reporting to open telemetry address") versionFlag := fs.BoolP("version", "v", false, "get version number") diff --git a/pkg/api/echo.go b/pkg/api/echo.go index 8b82444..3f2ad05 100644 --- a/pkg/api/echo.go +++ b/pkg/api/echo.go @@ -55,6 +55,9 @@ func (s *Server) echoHandler(w http.ResponseWriter, r *http.Request) { return } + // forward headers + copyTracingHeaders(r, backendReq) + backendReq.Header.Set("X-API-Version", version.VERSION) backendReq.Header.Set("X-API-Revision", version.REVISION) @@ -104,3 +107,22 @@ func (s *Server) echoHandler(w http.ResponseWriter, r *http.Request) { w.Write(body) } } + +func copyTracingHeaders(from *http.Request, to *http.Request) { + headers := []string{ + "x-request-id", + "x-b3-traceid", + "x-b3-spanid", + "x-b3-parentspanid", + "x-b3-sampled", + "x-b3-flags", + "x-ot-span-context", + } + + for i := range headers { + headerValue := from.Header.Get(headers[i]) + if len(headerValue) > 0 { + to.Header.Set(headers[i], headerValue) + } + } +} diff --git a/pkg/api/mock.go b/pkg/api/mock.go index 79752fa..20f9d2d 100644 --- a/pkg/api/mock.go +++ b/pkg/api/mock.go @@ -1,34 +1,34 @@ package api import ( - "go.opentelemetry.io/otel/trace" - "time" + "go.opentelemetry.io/otel/trace" + "time" - "github.com/gorilla/mux" - "go.uber.org/zap" + "github.com/gorilla/mux" + "go.uber.org/zap" ) func NewMockServer() *Server { - config := &Config{ - Port: "9898", - HttpServerShutdownTimeout: 5 * time.Second, - HttpServerTimeout: 30 * time.Second, - BackendURL: []string{}, - ConfigPath: "/config", - DataPath: "/data", - HttpClientTimeout: 30 * time.Second, - UIColor: "blue", - UIPath: ".ui", - UIMessage: "Greetings", - Hostname: "localhost", - } + config := &Config{ + Port: "9898", + HttpServerShutdownTimeout: 5 * time.Second, + HttpServerTimeout: 30 * time.Second, + BackendURL: []string{}, + ConfigPath: "/config", + DataPath: "/data", + HttpClientTimeout: 30 * time.Second, + UIColor: "blue", + UIPath: ".ui", + UIMessage: "Greetings", + Hostname: "localhost", + } - logger, _ := zap.NewDevelopment() + logger, _ := zap.NewDevelopment() - return &Server{ - router: mux.NewRouter(), - logger: logger, - config: config, - tracer: trace.NewNoopTracerProvider().Tracer("mock"), - } + return &Server{ + router: mux.NewRouter(), + logger: logger, + config: config, + tracer: trace.NewNoopTracerProvider().Tracer("mock"), + } } diff --git a/pkg/signals/signal_posix.go b/pkg/signals/signal_posix.go index 808c448..56184b9 100644 --- a/pkg/signals/signal_posix.go +++ b/pkg/signals/signal_posix.go @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package signals