/
routes.go
63 lines (47 loc) · 1.61 KB
/
routes.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
package main
import (
"context"
"net/http"
"net/http/pprof"
"github.com/mateuszdyminski/go-template/api"
"github.com/mateuszdyminski/go-template/app"
"github.com/gorilla/mux"
"github.com/prometheus/client_golang/prometheus/promhttp"
httpSwagger "github.com/swaggo/http-swagger"
"go.uber.org/zap"
)
func newRouter(ctx context.Context, l *zap.Logger, repo app.Repository) *mux.Router {
r := mux.NewRouter()
// register Prometheus/Metrics middleware
prom := api.NewMetricsMiddleware()
r.Use(prom.Handler)
// register request ID middleware
r.Use(api.RequestIDMiddleware)
// register logging middleware
httpLogger := api.NewLoggingMiddleware(l)
r.Use(httpLogger.Handler)
// register version middleware
r.Use(api.VersionMiddleware)
apiHandler := api.NewAPIHandler(ctx, l, repo)
r.HandleFunc("/api/version", apiHandler.Versionz).Methods(http.MethodGet)
r.HandleFunc("/api/health", apiHandler.Healthz).Methods(http.MethodGet)
r.HandleFunc("/api/ready", apiHandler.Readyz).Methods(http.MethodGet)
// Swagger configuration
r.PathPrefix("/swagger/").Handler(httpSwagger.Handler(
httpSwagger.URL("/swagger/doc.json"),
))
r.HandleFunc("/swagger.json", api.SwaggerHandler(l.Sugar()))
// Prometheus configuration
r.Handle("/metrics", promhttp.Handler())
return r
}
func newPprofRouter() *mux.Router {
r := mux.NewRouter()
// pprof endpoints configuration
r.HandleFunc("/debug/pprof/", pprof.Index)
r.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
r.HandleFunc("/debug/pprof/profile", pprof.Profile)
r.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
r.HandleFunc("/debug/pprof/trace", pprof.Trace)
return r
}