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 {