Skip to content

Commit f72b091

Browse files
committed
feat: add before func / after func
1 parent e07d65a commit f72b091

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

middleware.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,55 @@ func SetContext(config *Config, w http.ResponseWriter, r *http.Request) (http.Re
147147
return wrw, r
148148
}
149149

150+
type Reserve struct {
151+
before time.Time
152+
config *Config
153+
contextLogger *ContextLogger
154+
request *http.Request
155+
traces string
156+
}
157+
158+
func NewReserve(config *Config, r *http.Request) *Reserve {
159+
before := time.Now()
160+
161+
traceId := getTraceId(r)
162+
if traceId == "" {
163+
// there is no span yet, so create one
164+
var ctx context.Context
165+
traceId, ctx = generateTraceId(r)
166+
r = r.WithContext(ctx)
167+
}
168+
169+
traces := fmt.Sprintf("projects/%s/traces/%s", config.ProjectId, traceId)
170+
171+
contextLogger := &ContextLogger{
172+
out: config.ContextLogOut,
173+
Trace: traces,
174+
Severity: config.Severity,
175+
AdditionalData: config.AdditionalData,
176+
loggedSeverity: make([]Severity, 0, 10),
177+
Skip: config.Skip,
178+
}
179+
ctx := context.WithValue(r.Context(), contextLoggerKey, contextLogger)
180+
181+
return &Reserve{
182+
before: before,
183+
config: config,
184+
contextLogger: contextLogger,
185+
request: r.WithContext(ctx),
186+
traces: traces,
187+
}
188+
}
189+
190+
func (rv *Reserve) LastHandling(wrw *wrappedResponseWriter) {
191+
elapsed := time.Since(rv.before)
192+
maxSeverity := rv.contextLogger.maxSeverity()
193+
err := writeRequestLog(rv.request, rv.config, wrw.status, wrw.responseSize, elapsed, rv.traces, maxSeverity)
194+
if err != nil {
195+
_, _ = fmt.Fprintln(os.Stderr, err.Error())
196+
}
197+
}
198+
150199
func getTraceId(r *http.Request) string {
151200
span := trace.FromContext(r.Context())
152201
if span != nil {

0 commit comments

Comments
 (0)