MCPcopy
hub / github.com/grafana/tempo / ServeHTTP

Method ServeHTTP

modules/frontend/handler.go:55–136  ·  view source on GitHub ↗

ServeHTTP implements http.Handler

(w http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

53
54// ServeHTTP implements http.Handler
55func (f *handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
56 defer func() {
57 _ = r.Body.Close()
58 }()
59
60 ctx := r.Context()
61 start := time.Now()
62 orgID, _ := user.ExtractOrgID(ctx)
63 traceID, _ := tracing.ExtractTraceID(ctx)
64
65 // add orgid to existing spans
66 span := trace.SpanFromContext(r.Context())
67 if span != nil {
68 span.SetAttributes(attribute.String("orgID", orgID))
69 }
70
71 resp, err := f.roundTripper.RoundTrip(r)
72 elapsed := time.Since(start)
73
74 logMessage := []interface{}{
75 "msg", "query stats",
76 "tenant", orgID,
77 "method", r.Method,
78 "traceID", traceID,
79 "url", r.URL.RequestURI(),
80 "duration", elapsed.String(),
81 }
82 if len(f.logQueryRequestHeaders) != 0 {
83 logMessage = append(logMessage, formatRequestHeaders(&r.Header, f.logQueryRequestHeaders)...)
84 }
85
86 if err != nil {
87 statusCode := http.StatusInternalServerError
88 err = writeError(w, err)
89 logMessage = append(
90 logMessage,
91 "status", statusCode,
92 "error", err.Error(),
93 "response_size", 0,
94 )
95 level.Info(f.logger).Log(logMessage...)
96 return
97 }
98
99 if resp == nil {
100 statusCode := http.StatusInternalServerError
101 err = writeError(w, errors.New(NilResponseError))
102 logMessage = append(
103 logMessage,
104 "status", statusCode,
105 "err", err.Error(),
106 "response_size", 0,
107 )
108 level.Info(f.logger).Log(logMessage...)
109 return
110 }
111
112 // write headers, status code and body

Callers

nothing calls this directly

Calls 13

ExtractTraceIDFunction · 0.92
formatRequestHeadersFunction · 0.85
copyHeaderFunction · 0.85
writeErrorFunction · 0.70
CloseMethod · 0.65
ContextMethod · 0.65
NowMethod · 0.65
RoundTripMethod · 0.65
ErrorMethod · 0.65
LogMethod · 0.65
StringMethod · 0.45
HeaderMethod · 0.45

Tested by

no test coverage detected