From c1c1bb2c4c1baf37dbcce96f144966d4ada65ac5 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Mon, 23 Jan 2023 22:30:30 +0100 Subject: Implement cache and logger middlewares for gemini --- src/gmi/gmi.go | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'src/gmi/gmi.go') diff --git a/src/gmi/gmi.go b/src/gmi/gmi.go index 6835ea0..c2a32aa 100644 --- a/src/gmi/gmi.go +++ b/src/gmi/gmi.go @@ -13,6 +13,7 @@ import ( "git.sr.ht/~adnano/go-gemini" "git.sr.ht/~adnano/go-gemini/certificate" + "github.com/mediocregopher/blog.mediocregopher.com/srv/cache" "github.com/mediocregopher/blog.mediocregopher.com/srv/cfg" "github.com/mediocregopher/blog.mediocregopher.com/srv/post" "github.com/mediocregopher/mediocre-go-lib/v2/mctx" @@ -23,6 +24,7 @@ import ( // unless otherwise noted. type Params struct { Logger *mlog.Logger + Cache cache.Cache PostStore post.Store PostAssetStore post.AssetStore @@ -108,10 +110,11 @@ func New(params Params) (API, error) { go func() { - ctx := mctx.WithAnnotator(context.Background(), &a.params) + err := a.srv.ListenAndServe(context.Background()) - err := a.srv.ListenAndServe(ctx) if err != nil && !errors.Is(err, context.Canceled) { + + ctx := mctx.WithAnnotator(context.Background(), &a.params) a.params.Logger.Fatal(ctx, "serving gemini server", err) } }() @@ -123,6 +126,26 @@ func (a *api) Shutdown(ctx context.Context) error { return a.srv.Shutdown(ctx) } +func (a *api) logReqMiddleware(h gemini.Handler) gemini.Handler { + + type logCtxKey string + + return gemini.HandlerFunc(func( + ctx context.Context, + rw gemini.ResponseWriter, + r *gemini.Request, + ) { + + ctx = mctx.Annotate(ctx, + logCtxKey("url"), r.URL.String(), + ) + + h.ServeGemini(ctx, rw, r) + + a.params.Logger.Info(ctx, "handled gemini request") + }) +} + func indexMiddleware(h gemini.Handler) gemini.Handler { return gemini.HandlerFunc(func( @@ -212,8 +235,8 @@ func (a *api) handler() (gemini.Handler, error) { h = mux h = indexMiddleware(h) - // TODO logging - // TODO caching + h = a.logReqMiddleware(h) + h = cacheMiddleware(a.params.Cache)(h) return h, nil } -- cgit v1.2.3