diff --git a/geoipapi.go b/geoipapi.go index f1685c4..88aa24a 100644 --- a/geoipapi.go +++ b/geoipapi.go @@ -15,11 +15,13 @@ import ( "time" "github.com/oschwald/geoip2-golang" - "go.ntppool.org/common/logger" - "go.ntppool.org/common/tracing" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/trace" + + "go.ntppool.org/common/logger" + "go.ntppool.org/common/tracing" + "go.ntppool.org/common/version" ) type geoType uint8 @@ -86,12 +88,24 @@ func setupHTTP(ctx context.Context) error { mux.HandleFunc("/api/json", handleJSON) mux.HandleFunc("/healthz", handleHealth) + versionHandler := func(next http.Handler) http.Handler { + vinfo := version.VersionInfo() + v := "geoipapi/" + vinfo.Version + "+" + vinfo.GitRevShort + return http.HandlerFunc( + func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Server", v) + span := trace.SpanFromContext(r.Context()) + w.Header().Set("Traceparent", span.SpanContext().TraceID().String()) + next.ServeHTTP(w, r) + }) + } + srv := &http.Server{ Addr: ":8009", BaseContext: func(_ net.Listener) context.Context { return ctx }, ReadTimeout: time.Second, WriteTimeout: 10 * time.Second, - Handler: otelhttp.NewHandler(mux, "geoipapi"), + Handler: otelhttp.NewHandler(versionHandler(mux), "geoipapi"), } srvErr := make(chan error, 1) go func() {