@marcel91200 / caddy Mirror · read-only / commits / 904a0fa3
Fork 0

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 }