Skip to content

Commit 54f02da

Browse files
rybitsgirones
authored andcommitted
refactor to have object that could be used
1 parent ea986b3 commit 54f02da

File tree

3 files changed

+75
-24
lines changed

3 files changed

+75
-24
lines changed

tracing/req_tracer.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package tracing
2+
3+
import (
4+
"net/http"
5+
"time"
6+
7+
opentracing "github.com/opentracing/opentracing-go"
8+
"github.com/sirupsen/logrus"
9+
)
10+
11+
type RequestTracer struct {
12+
*trackingWriter
13+
RequestID string
14+
15+
request *http.Request
16+
span opentracing.Span
17+
start time.Time
18+
}
19+
20+
func NewTracer(w http.ResponseWriter, r *http.Request, log logrus.FieldLogger, service string) (http.ResponseWriter, *http.Request, *RequestTracer) {
21+
reqID := RequestID(r)
22+
23+
r, log = WrapWithLogger(r, reqID, log)
24+
r, span := WrapWithSpan(r, reqID, service)
25+
trackWriter := &trackingWriter{
26+
writer: w,
27+
log: log,
28+
}
29+
30+
rt := &RequestTracer{
31+
RequestID: reqID,
32+
span: span,
33+
trackingWriter: trackWriter,
34+
request: r,
35+
}
36+
37+
return rt, r, rt
38+
}
39+
40+
func (rt *RequestTracer) Start() {
41+
rt.start = time.Now()
42+
rt.Log().WithField("url", rt.request.URL.String()).Info("Starting Request")
43+
}
44+
45+
func (rt *RequestTracer) Finish() {
46+
dur := time.Since(rt.start)
47+
fields := logrus.Fields{
48+
"status_code": rt.trackingWriter.status,
49+
"rsp_bytes": rt.trackingWriter.rspBytes,
50+
"dur": dur.String(),
51+
"dur_ns": dur.Nanoseconds(),
52+
}
53+
rt.span.Finish()
54+
rt.Log().WithFields(fields).Info("Completed Request")
55+
}
56+
57+
func (rt *RequestTracer) Log() logrus.FieldLogger {
58+
return GetLogger(rt.request)
59+
}
60+
61+
func (rt *RequestTracer) SetLogField(key string, value interface{}) logrus.FieldLogger {
62+
return SetLogField(rt.request, key, value)
63+
}
64+
65+
func (rt *RequestTracer) SetLogFields(fields logrus.Fields) logrus.FieldLogger {
66+
return SetLogFields(rt.request, fields)
67+
}

tracing/tracer.go

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"net/http"
66
"strconv"
7-
"time"
87

98
opentracing "github.com/opentracing/opentracing-go"
109
ext "github.com/opentracing/opentracing-go/ext"
@@ -21,29 +20,10 @@ const (
2120
)
2221

2322
func TrackRequest(w http.ResponseWriter, r *http.Request, log logrus.FieldLogger, service string, next http.Handler) {
24-
reqID := RequestID(r)
25-
r, log = WrapWithLogger(r, reqID, log)
26-
log.WithField("url", r.URL.String()).Info("Starting Request")
27-
28-
r, span := WrapWithSpan(r, reqID, service)
29-
30-
trackWriter := &trackingWriter{
31-
writer: w,
32-
log: log,
33-
}
34-
35-
start := time.Now()
36-
next.ServeHTTP(trackWriter, r)
37-
dur := time.Since(start)
38-
39-
log = GetLogger(r) // in case people have added fields
40-
log.WithFields(logrus.Fields{
41-
"status_code": trackWriter.status,
42-
"rsp_bytes": trackWriter.rspBytes,
43-
"dur": dur.String(),
44-
"dur_ns": dur.Nanoseconds(),
45-
}).Info("Completed Request")
46-
span.Finish()
23+
w, r, rt := NewTracer(w, r, log, service)
24+
rt.Start()
25+
next.ServeHTTP(w, r)
26+
rt.Finish()
4727
}
4828

4929
func RequestID(r *http.Request) string {

tracing/writer.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ type trackingWriter struct {
1717
log logrus.FieldLogger
1818
}
1919

20+
func (w *trackingWriter) OriginalWriter() http.ResponseWriter {
21+
return w.writer
22+
}
23+
2024
func (w *trackingWriter) Write(in []byte) (int, error) {
2125
w.rspBytes += len(in)
2226
return w.writer.Write(in)

0 commit comments

Comments
 (0)