feat: add profiling recipes
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
|||||||
"mal/internal/config"
|
"mal/internal/config"
|
||||||
"mal/internal/observability"
|
"mal/internal/observability"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
_ "net/http/pprof" // register pprof handlers on http.DefaultServeMux
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@@ -31,6 +32,8 @@ func ProvideRouter(cfg config.Config, htmlRender render.HTMLRender, metrics *obs
|
|||||||
r.Static("/static", "./static")
|
r.Static("/static", "./static")
|
||||||
r.Static("/dist", "./dist")
|
r.Static("/dist", "./dist")
|
||||||
r.GET("/metrics", gin.WrapH(metrics.Handler()))
|
r.GET("/metrics", gin.WrapH(metrics.Handler()))
|
||||||
|
r.GET("/debug/pprof", gin.WrapH(http.DefaultServeMux))
|
||||||
|
r.GET("/debug/pprof/*action", gin.WrapH(http.DefaultServeMux))
|
||||||
r.HTMLRender = htmlRender
|
r.HTMLRender = htmlRender
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
|
"mal/internal/config"
|
||||||
"mal/internal/observability"
|
"mal/internal/observability"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/httptest"
|
"net/http/httptest"
|
||||||
@@ -35,6 +36,23 @@ func TestNewHTTPServer_TimeoutsAndAddr(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProvideRouterRegistersPprof(t *testing.T) {
|
||||||
|
gin.SetMode(gin.TestMode)
|
||||||
|
|
||||||
|
router := ProvideRouter(config.Config{GinMode: gin.TestMode}, nil, observability.NewMetrics())
|
||||||
|
req := httptest.NewRequestWithContext(context.Background(), http.MethodGet, "/debug/pprof/", nil)
|
||||||
|
rec := httptest.NewRecorder()
|
||||||
|
|
||||||
|
router.ServeHTTP(rec, req)
|
||||||
|
|
||||||
|
if rec.Code != http.StatusOK {
|
||||||
|
t.Fatalf("pprof status = %d, want %d", rec.Code, http.StatusOK)
|
||||||
|
}
|
||||||
|
if !strings.Contains(rec.Body.String(), "Types of profiles available") {
|
||||||
|
t.Fatalf("pprof index missing profile list: %s", rec.Body.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestRequestLoggerUsesMatchedRoute(t *testing.T) {
|
func TestRequestLoggerUsesMatchedRoute(t *testing.T) {
|
||||||
gin.SetMode(gin.TestMode)
|
gin.SetMode(gin.TestMode)
|
||||||
|
|
||||||
|
|||||||
6
justfile
6
justfile
@@ -16,6 +16,12 @@ lint-go:
|
|||||||
test:
|
test:
|
||||||
go test ./...
|
go test ./...
|
||||||
|
|
||||||
|
bench:
|
||||||
|
go test -bench=. -benchmem -count=5 ./internal/anime/... ./integrations/jikan/... ./internal/playback/...
|
||||||
|
|
||||||
|
bench-all:
|
||||||
|
go test -bench=. -benchmem ./...
|
||||||
|
|
||||||
build-go:
|
build-go:
|
||||||
@go build -o server ./cmd/server
|
@go build -o server ./cmd/server
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user