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  }