Skip to content

Commit afb97f6

Browse files
authored
[B2B-6248] Fix non-health requests tracking (#89)
1 parent 2dd9ef2 commit afb97f6

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

multiserver.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,13 @@ func (ms *Multiserver) AddHealthcheck(name, path string, check Healthchecker) er
123123

124124
func WithHealthcheck(path string) serverOption {
125125
return func(s *server) {
126+
hc := newHealthcheckHandler(s.log, noopHealthcheck)
127+
126128
mux := http.NewServeMux()
127-
mux.HandleFunc(path, newHealthcheckHandler(s.log, noopHealthcheck))
129+
mux.Handle(path, withServerHealthcheckSummary(s.name, hc))
128130
mux.Handle("/", s.handler)
129131

130-
s.handler = withServerHealthcheckSummary(s.name, mux)
132+
s.handler = mux
131133
}
132134
}
133135

multiserver_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package narada
33
import (
44
"context"
55
"errors"
6+
"io"
67
"net/http"
78
"testing"
89
"time"
@@ -111,6 +112,10 @@ func TestNewMultiServers(t *testing.T) {
111112
assert.NoError(t, err)
112113

113114
cfg.Set("bind.test", ":12346")
115+
cfg.Set("bind.metrics", ":9002")
116+
117+
err = NewMetricsInvoke(ms)
118+
assert.NoError(t, err)
114119

115120
err = ms.Add(
116121
"test",
@@ -142,6 +147,18 @@ func TestNewMultiServers(t *testing.T) {
142147
assert.Equal(t, http.StatusOK, res.StatusCode)
143148
}
144149

150+
// Check metrics
151+
{
152+
res, err := http.Get("http://localhost:9002")
153+
assert.NoError(t, err)
154+
155+
body, err := io.ReadAll(res.Body)
156+
assert.NoError(t, err)
157+
158+
assert.Contains(t, string(body), `server_healthcheck_duration_seconds_count{code="200",method="get",server="test"} 1`)
159+
assert.NotContains(t, string(body), `server_healthcheck_duration_seconds_count{code="418",method="get",server="test"}`)
160+
}
161+
145162
err = lc.Stop(context.Background())
146163
assert.NoError(t, err)
147164
})
@@ -156,6 +173,10 @@ func TestNewMultiServers(t *testing.T) {
156173

157174
cfg.Set("bind.test_success", ":12346")
158175
cfg.Set("bind.test_failure", ":12347")
176+
cfg.Set("bind.metrics", ":9002")
177+
178+
err = NewMetricsInvoke(ms)
179+
assert.NoError(t, err)
159180

160181
err = ms.AddHealthcheck("test_success", "/healthz", func() error { return nil })
161182
assert.NoError(t, err)
@@ -184,12 +205,32 @@ func TestNewMultiServers(t *testing.T) {
184205
assert.Equal(t, http.StatusOK, res.StatusCode)
185206
}
186207

208+
{
209+
res, err := http.Get("http://localhost:12347")
210+
assert.NoError(t, err)
211+
assert.Equal(t, http.StatusNotFound, res.StatusCode)
212+
}
213+
187214
{
188215
res, err := http.Get("http://localhost:12347/healthz")
189216
assert.NoError(t, err)
190217
assert.Equal(t, http.StatusInternalServerError, res.StatusCode)
191218
}
192219

220+
// Check metrics
221+
{
222+
res, err := http.Get("http://localhost:9002")
223+
assert.NoError(t, err)
224+
225+
body, err := io.ReadAll(res.Body)
226+
assert.NoError(t, err)
227+
228+
assert.Contains(t, string(body), `server_healthcheck_duration_seconds_count{code="404",method="get",server="test_success"} 2`)
229+
assert.Contains(t, string(body), `server_healthcheck_duration_seconds_count{code="200",method="get",server="test_success"} 1`)
230+
assert.Contains(t, string(body), `server_healthcheck_duration_seconds_count{code="404",method="get",server="test_failure"} 1`)
231+
assert.Contains(t, string(body), `server_healthcheck_duration_seconds_count{code="500",method="get",server="test_failure"} 1`)
232+
}
233+
193234
err = lc.Stop(context.Background())
194235
assert.NoError(t, err)
195236
})

0 commit comments

Comments
 (0)