generated from bool64/go-template
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdebug.go
84 lines (66 loc) · 2.3 KB
/
debug.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package brick
import (
"net/http"
"strings"
"github.com/bool64/brick/debug"
"github.com/bool64/brick/debug/zpages"
"github.com/bool64/dev/version"
"github.com/bool64/logz/ctxz"
"github.com/bool64/logz/logzpage"
"github.com/bool64/prom-stats"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
"github.com/prometheus/client_golang/prometheus/promhttp"
v3 "github.com/swaggest/swgui/v3"
)
// MountDevPortal mounts debug handlers to router.
func MountDevPortal(r chi.Router, l *BaseLocator) {
cfg := l.BaseConfig
prefix := cfg.Debug.URL
r.Route(prefix, func(r chi.Router) {
if cfg.Debug.DevPassword != "" {
r.Use(middleware.BasicAuth("Developer Access", map[string]string{"dev": cfg.Debug.DevPassword}))
}
r.Use(cfg.Debug.Middlewares...)
l.SetupDebugRouter()
r.Mount("/", l.DebugRouter)
})
}
// SetupDebugRouter initializes a router with debug tools.
func (l *BaseLocator) SetupDebugRouter() {
if l.DebugRouter != nil {
return
}
cfg := l.BaseConfig
prefix := cfg.Debug.URL
dr := debug.NewMux(prefix)
dr.AddLink("version", "Version")
dr.Get("/version", version.Handler)
dr.AddLink("zpages/tracez", "Trace Spans")
if cfg.Debug.TraceURL != "" {
dr.Mount("/zpages", zpages.Mux(prefix+"/zpages", func(traceID string) string {
return strings.ReplaceAll(cfg.Debug.TraceURL, "{trace_id}", traceID)
}))
} else {
dr.Mount("/zpages", zpages.Mux(prefix+"/zpages", nil))
}
if pt, ok := l.StatsTracker().(*prom.Tracker); ok {
dr.AddLink("metrics", "Metrics")
dr.Method(http.MethodGet, "/metrics", promhttp.HandlerFor(pt.PrometheusRegistry(), promhttp.HandlerOpts{}))
}
if lz, ok := l.CtxdLogger().(ctxz.Observer); ok {
dr.AddLink("logz", "Logs Overview")
dr.Mount("/logz", logzpage.Handler(lz.LevelObservers()...))
}
if l.cacheTransfer != nil && l.cacheTransfer.CachesCount() > 0 {
dr.AddLink("export-cache", "Export Cache As JSONL")
dr.AddLink("transfer-cache", "Transfer Cache")
dr.Method(http.MethodGet, "/export-cache", l.cacheTransfer.ExportJSONL())
dr.Method(http.MethodGet, "/transfer-cache", l.cacheTransfer.Export())
}
dr.AddLink("docs", "API Docs")
dr.Method(http.MethodGet, "/docs/openapi.json", l.OpenAPI)
dr.Mount("/docs", v3.NewHandler(l.OpenAPI.Reflector().SpecEns().Info.Title,
prefix+"/docs/openapi.json", prefix+"/docs"))
l.DebugRouter = dr
}