-
Notifications
You must be signed in to change notification settings - Fork 21
/
router.go
64 lines (50 loc) · 1.74 KB
/
router.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
// Copyright © 2018 by PACE Telematics GmbH. All rights reserved.
// Created at 2018/09/05 by Vincent Landgraf
package http
import (
"net/http"
"net/http/pprof"
"github.com/gorilla/mux"
"github.com/pace/bricks/locale"
"github.com/pace/bricks/maintenance/errors"
"github.com/pace/bricks/maintenance/health"
"github.com/pace/bricks/maintenance/health/servicehealthcheck"
"github.com/pace/bricks/maintenance/log"
"github.com/pace/bricks/maintenance/metric"
"github.com/pace/bricks/maintenance/tracing"
)
// Router returns the default microservice endpoints for
// health, metrics and debugging
func Router() *mux.Router {
r := mux.NewRouter()
r.Use(metricsMiddleware)
// the logging middleware needs to be registered before the
// error middleware to make it possible to send panics to
// sentry. "/health" and "/metrics" are only logged to the
// log.Sink but not to log.output (silent)
r.Use(log.Handler("/health", "/metrics"))
// last resort error handler
r.Use(errors.Handler())
r.Use(tracing.Handler(
// no tracing for these prefixes
"/metrics",
"/health",
"/debug",
))
r.Use(locale.Handler())
// for prometheus
r.Handle("/metrics", metric.Handler())
// health checks
r.Handle("/health/liveness", health.HandlerLiveness())
r.Handle("/health/readiness", health.HandlerReadiness())
r.Handle("/health", servicehealthcheck.HealthHandler())
r.Handle("/health/check", servicehealthcheck.ReadableHealthHandler())
// for debugging purposes (e.g. deadlock, ...)
p := r.PathPrefix("/debug/pprof").Subrouter()
p.HandleFunc("/cmdline", pprof.Cmdline)
p.HandleFunc("/profile", pprof.Profile)
p.HandleFunc("/symbol", pprof.Symbol)
p.HandleFunc("/trace", pprof.Trace)
p.PathPrefix("/").Handler(http.HandlerFunc(pprof.Index))
return r
}