Skip to content

Commit c145d4f

Browse files
joelanfordgrokspawn
authored andcommitted
another round of refactoring improvement
Signed-off-by: Joe Lanford <joe.lanford@gmail.com>
1 parent ffaa05d commit c145d4f

File tree

4 files changed

+323
-207
lines changed

4 files changed

+323
-207
lines changed

catalogd/internal/serverutil/serverutil.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"net/http"
99
"time"
1010

11+
"github.com/go-logr/logr"
12+
"github.com/klauspost/compress/gzhttp"
1113
ctrl "sigs.k8s.io/controller-runtime"
1214
"sigs.k8s.io/controller-runtime/pkg/certwatcher"
1315
"sigs.k8s.io/controller-runtime/pkg/log"
@@ -40,13 +42,17 @@ func AddCatalogServerToManager(mgr ctrl.Manager, cfg CatalogServerConfig, tlsFil
4042
}
4143

4244
shutdownTimeout := 30 * time.Second
45+
handler := cfg.LocalStorage.StorageServerHandler()
46+
handler = gzhttp.GzipHandler(handler)
47+
handler = catalogdmetrics.AddMetricsToHandler(handler)
48+
handler = newLoggingMiddleware(handler)
4349

4450
catalogServer := manager.Server{
4551
Name: "catalogs",
4652
OnlyServeWhenLeader: true,
4753
Server: &http.Server{
4854
Addr: cfg.CatalogAddr,
49-
Handler: catalogdmetrics.AddMetricsToHandler(cfg.LocalStorage.StorageServerHandler()),
55+
Handler: handler,
5056
BaseContext: func(_ net.Listener) context.Context {
5157
return log.IntoContext(context.Background(), mgr.GetLogger().WithName("http.catalogs"))
5258
},
@@ -66,3 +72,31 @@ func AddCatalogServerToManager(mgr ctrl.Manager, cfg CatalogServerConfig, tlsFil
6672

6773
return nil
6874
}
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+
}

catalogd/internal/storage/index.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,20 @@ func (i index) Size() int64 {
5151
return int64(size)
5252
}
5353

54-
func (i index) Get(r io.ReaderAt, schema, packageName, name string) (io.Reader, bool) {
54+
func (i index) Get(r io.ReaderAt, schema, packageName, name string) (io.ReadSeeker, bool) {
5555
sectionSet := i.getSectionSet(schema, packageName, name)
5656

5757
sections := sectionSet.UnsortedList()
5858
slices.SortFunc(sections, func(a, b section) int {
5959
return cmp.Compare(a.offset, b.offset)
6060
})
6161

62-
srs := make([]io.Reader, 0, len(sections))
62+
srs := make([]io.ReadSeeker, 0, len(sections))
6363
for _, s := range sections {
6464
sr := io.NewSectionReader(r, s.offset, s.length)
6565
srs = append(srs, sr)
6666
}
67-
return io.MultiReader(srs...), true
67+
return newMultiReadSeeker(srs...), true
6868
}
6969

7070
func (i *index) getSectionSet(schema, packageName, name string) sets.Set[section] {

0 commit comments

Comments
 (0)