github.com/vseinstrumentiru/lego@v1.0.2/internal/lego/build/handler.go (about) 1 package build 2 3 import ( 4 "encoding/json" 5 "go.opencensus.io/trace" 6 "net/http" 7 8 "emperror.dev/errors" 9 ) 10 11 // Handler returns an HTTP handler for version information. 12 func Handler(buildInfo Info) http.Handler { 13 var body []byte 14 15 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 16 if body == nil { 17 var err error 18 19 body, err = json.Marshal(buildInfo) 20 if err != nil { 21 panic(errors.Wrap(err, "failed to render version information")) 22 } 23 } 24 25 _, _ = w.Write(body) 26 }) 27 } 28 29 func TraceMiddleware(buildInfo Info) func(http.Handler) http.Handler { 30 return func(next http.Handler) http.Handler { 31 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 32 span := trace.FromContext(r.Context()) 33 34 if span == nil { 35 next.ServeHTTP(w, r) 36 return 37 } 38 39 span.AddAttributes( 40 trace.StringAttribute("build.version", buildInfo.Version), 41 trace.StringAttribute("build.commit", buildInfo.CommitHash), 42 trace.StringAttribute("build.date", buildInfo.BuildDate), 43 ) 44 next.ServeHTTP(w, r) 45 }) 46 } 47 }