8
8
"net/http"
9
9
"time"
10
10
11
+ "github.com/go-logr/logr"
12
+ "github.com/klauspost/compress/gzhttp"
11
13
ctrl "sigs.k8s.io/controller-runtime"
12
14
"sigs.k8s.io/controller-runtime/pkg/certwatcher"
13
15
"sigs.k8s.io/controller-runtime/pkg/log"
@@ -40,13 +42,17 @@ func AddCatalogServerToManager(mgr ctrl.Manager, cfg CatalogServerConfig, tlsFil
40
42
}
41
43
42
44
shutdownTimeout := 30 * time .Second
45
+ handler := cfg .LocalStorage .StorageServerHandler ()
46
+ handler = gzhttp .GzipHandler (handler )
47
+ handler = catalogdmetrics .AddMetricsToHandler (handler )
48
+ handler = newLoggingMiddleware (handler )
43
49
44
50
catalogServer := manager.Server {
45
51
Name : "catalogs" ,
46
52
OnlyServeWhenLeader : true ,
47
53
Server : & http.Server {
48
54
Addr : cfg .CatalogAddr ,
49
- Handler : catalogdmetrics . AddMetricsToHandler ( cfg . LocalStorage . StorageServerHandler ()) ,
55
+ Handler : handler ,
50
56
BaseContext : func (_ net.Listener ) context.Context {
51
57
return log .IntoContext (context .Background (), mgr .GetLogger ().WithName ("http.catalogs" ))
52
58
},
@@ -66,3 +72,31 @@ func AddCatalogServerToManager(mgr ctrl.Manager, cfg CatalogServerConfig, tlsFil
66
72
67
73
return nil
68
74
}
75
+
76
+ func newLoggingMiddleware (next http.Handler ) http.Handler {
77
+ return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
78
+ logger := logr .FromContextOrDiscard (r .Context ())
79
+
80
+ start := time .Now ()
81
+ lrw := & loggingResponseWriter {ResponseWriter : w , statusCode : http .StatusOK }
82
+ next .ServeHTTP (lrw , r )
83
+
84
+ logger .WithValues (
85
+ "method" , r .Method ,
86
+ "url" , r .URL .String (),
87
+ "status" , lrw .statusCode ,
88
+ "duration" , time .Since (start ),
89
+ "remoteAddr" , r .RemoteAddr ,
90
+ ).Info ("HTTP request processed" )
91
+ })
92
+ }
93
+
94
+ type loggingResponseWriter struct {
95
+ http.ResponseWriter
96
+ statusCode int
97
+ }
98
+
99
+ func (w * loggingResponseWriter ) WriteHeader (code int ) {
100
+ w .statusCode = code
101
+ w .ResponseWriter .WriteHeader (code )
102
+ }
0 commit comments