From 2340bdca111dc0518a5147bc627b426df757d2e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20P=C3=A9rez?= Date: Fri, 22 Nov 2024 14:36:44 +0100 Subject: [PATCH] add request ID middleware --- ron.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ron.go b/ron.go index 1b057ed..6ba23fb 100644 --- a/ron.go +++ b/ron.go @@ -111,6 +111,7 @@ func (e *Engine) ServeHTTP(w http.ResponseWriter, r *http.Request) { } e.middleware = append(e.middleware, e.timeOutMiddleware()) + e.middleware = append(e.middleware, e.requestIdMiddleware()) handler = createStack(e.middleware...)(handler) rw := &responseWriterWrapper{ResponseWriter: w} handler.ServeHTTP(rw, r) @@ -157,6 +158,20 @@ func (e *Engine) timeOutMiddleware() Middleware { } } +func (e *Engine) requestIdMiddleware() Middleware { + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ctx := r.Context() + id := r.Header.Get("X-Request-ID") + if id == "" { + id = fmt.Sprintf("%d", time.Now().UnixNano()) + } + ctx = context.WithValue(ctx, "requestId", id) + next.ServeHTTP(w, r.WithContext(ctx)) + }) + } +} + func (e *Engine) USE(middleware Middleware) { e.middleware = append(e.middleware, middleware) }