adds basic traces using open traces

This commit is contained in:
bergquist
2017-09-10 14:13:57 +02:00
parent 2ac6e23fc5
commit 2e350bbb8e
132 changed files with 21977 additions and 1 deletions

View File

@@ -0,0 +1,42 @@
package middleware
import (
"net/http"
"time"
opentracing "github.com/opentracing/opentracing-go"
tlog "github.com/opentracing/opentracing-go/log"
"gopkg.in/macaron.v1"
)
func RequestTracing() macaron.Handler {
return func(res http.ResponseWriter, req *http.Request, c *macaron.Context) {
rw := res.(macaron.ResponseWriter)
var span opentracing.Span
opName := req.URL.Path
carrier := opentracing.HTTPHeadersCarrier(req.Header)
wireContext, err := opentracing.GlobalTracer().Extract(
opentracing.HTTPHeaders, carrier)
if err != nil {
span = opentracing.StartSpan(opName)
} else {
span = opentracing.StartSpan(opName, opentracing.ChildOf(wireContext))
}
defer span.Finish()
ctx := opentracing.ContextWithSpan(req.Context(), span)
req = req.WithContext(ctx)
start := time.Now()
c.Next()
status := rw.Status()
span.LogFields(
tlog.Int("http.status_code", status),
tlog.Float64("waited.millis", float64(time.Since(start)/time.Millisecond)))
}
}