From e2150e8437dc24537cf91c9a8fb5c85cb2cf4896 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Sun, 3 May 2026 09:17:34 +0100 Subject: [PATCH] knotserver: log memory usage in repo.compare Signed-off-by: oppiliappan --- knotserver/xrpc/repo_compare.go | 35 +++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/knotserver/xrpc/repo_compare.go b/knotserver/xrpc/repo_compare.go index 3b03417f..f896fc75 100644 --- a/knotserver/xrpc/repo_compare.go +++ b/knotserver/xrpc/repo_compare.go @@ -2,15 +2,50 @@ package xrpc import ( "fmt" + "log/slog" "net/http" + "runtime" "github.com/bluekeyes/go-gitdiff/gitdiff" + "github.com/dustin/go-humanize" "tangled.org/core/knotserver/git" "tangled.org/core/types" xrpcerr "tangled.org/core/xrpc/errors" ) func (x *Xrpc) RepoCompare(w http.ResponseWriter, r *http.Request) { + var memBefore runtime.MemStats + runtime.ReadMemStats(&memBefore) + defer func() { + var memAfter runtime.MemStats + runtime.ReadMemStats(&memAfter) + + x.Logger.Info("repo.compare memory", + slog.Group("request", + slog.String("repo", r.URL.Query().Get("repo")), + slog.String("rev1", r.URL.Query().Get("rev1")), + slog.String("rev2", r.URL.Query().Get("rev2")), + ), + slog.Group("mem_before", + slog.String("heap_alloc", humanize.IBytes(memBefore.HeapAlloc)), + slog.String("heap_inuse", humanize.IBytes(memBefore.HeapInuse)), + slog.String("total_alloc", humanize.IBytes(memBefore.TotalAlloc)), + slog.String("sys", humanize.IBytes(memBefore.Sys)), + ), + slog.Group("mem_after", + slog.String("heap_alloc", humanize.IBytes(memAfter.HeapAlloc)), + slog.String("heap_inuse", humanize.IBytes(memAfter.HeapInuse)), + slog.String("total_alloc", humanize.IBytes(memAfter.TotalAlloc)), + slog.String("sys", humanize.IBytes(memAfter.Sys)), + ), + slog.Group("mem_delta", + slog.String("total_alloc", humanize.IBytes(memAfter.TotalAlloc-memBefore.TotalAlloc)), + slog.Uint64("mallocs", memAfter.Mallocs-memBefore.Mallocs), + slog.Uint64("num_gc", uint64(memAfter.NumGC-memBefore.NumGC)), + ), + ) + }() + repo := r.URL.Query().Get("repo") repoPath, err := x.parseRepoParam(repo) if err != nil { -- 2.51.2