Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS
Mirrored from https://github.com/Slazee/caddy.git
Synced Nov 12, 03:15 UTC
reverse_proxy: re-add healthy upstreams metric (#6806)
* reverse_proxy: re-add healthy upstreams metric Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com> * lint Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com> --------- Signed-off-by: Mohammed Al Sahaf <msaa1990@gmail.com>
Mohammed Al Sahaf committed
Jan 28, 2025 at 00:30 UTC
904a0fa368b7eacac3c7156ce4a1f6ced8f61f34
2 files changed
+13
-11
modules/caddyhttp/reverseproxy/metrics.go
+11
-9
@@ -2,26 +2,26 @@ package reverseproxy
2
3
import (
4
"runtime/debug"
5
- "sync"
5
"time"
6
7
"github.com/prometheus/client_golang/prometheus"
8
"github.com/prometheus/client_golang/prometheus/promauto"
9
"go.uber.org/zap"
10
"go.uber.org/zap/zapcore"
11
+
12
+ "github.com/caddyserver/caddy/v2"
13
)
14
15
var reverseProxyMetrics = struct {
15
- init sync.Once
16
upstreamsHealthy *prometheus.GaugeVec
17
logger *zap.Logger
18
}{}
19
20
-func initReverseProxyMetrics(handler *Handler) {
20
+func initReverseProxyMetrics(handler *Handler, registry *prometheus.Registry) {
21
const ns, sub = "caddy", "reverse_proxy"
22
23
upstreamsLabels := []string{"upstream"}
24
- reverseProxyMetrics.upstreamsHealthy = promauto.NewGaugeVec(prometheus.GaugeOpts{
24
+ reverseProxyMetrics.upstreamsHealthy = promauto.With(registry).NewGaugeVec(prometheus.GaugeOpts{
25
Namespace: ns,
26
Subsystem: sub,
27
Name: "upstreams_healthy",
@@ -35,17 +35,19 @@ type metricsUpstreamsHealthyUpdater struct {
35
handler *Handler
36
}
37
38
-func newMetricsUpstreamsHealthyUpdater(handler *Handler) *metricsUpstreamsHealthyUpdater {
39
- reverseProxyMetrics.init.Do(func() {
40
- initReverseProxyMetrics(handler)
41
- })
38
+const upstreamsHealthyMetrics caddy.CtxKey = "reverse_proxy_upstreams_healthy"
39
40
+func newMetricsUpstreamsHealthyUpdater(handler *Handler, ctx caddy.Context) *metricsUpstreamsHealthyUpdater {
41
+ if set := ctx.Value(upstreamsHealthyMetrics); set == nil {
42
+ initReverseProxyMetrics(handler, ctx.GetMetricsRegistry())
43
+ ctx = ctx.WithValue(upstreamsHealthyMetrics, true)
44
+ }
45
reverseProxyMetrics.upstreamsHealthy.Reset()
46
47
return &metricsUpstreamsHealthyUpdater{handler}
48
}
49
48
-func (m *metricsUpstreamsHealthyUpdater) Init() {
50
+func (m *metricsUpstreamsHealthyUpdater) init() {
51
go func() {
52
defer func() {
53
if err := recover(); err != nil {
modules/caddyhttp/reverseproxy/reverseproxy.go
+2
-2
@@ -382,8 +382,8 @@ func (h *Handler) Provision(ctx caddy.Context) error {
382
}
383
}
384
385
- upstreamHealthyUpdater := newMetricsUpstreamsHealthyUpdater(h)
386
- upstreamHealthyUpdater.Init()
385
+ upstreamHealthyUpdater := newMetricsUpstreamsHealthyUpdater(h, ctx)
386
+ upstreamHealthyUpdater.init()
387
388
return nil
389
}