Skip to content

Commit 1fea46d

Browse files
Soha-Albaghdadymaxmoehl
authored andcommitted
feat: add RouteAdded and RouteDeleted metrics
1 parent 1668d8b commit 1fea46d

File tree

8 files changed

+116
-1
lines changed

8 files changed

+116
-1
lines changed

src/code.cloudfoundry.org/gorouter/metrics/compositereporter.go

+14
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ type MetricReporter interface {
3939
CaptureRoutesPruned(prunedRoutes uint64)
4040
CaptureLookupTime(t time.Duration)
4141
CaptureRegistryMessage(msg ComponentTagged, action string)
42+
CaptureRouteAdded()
43+
CaptureRouteDeleted()
4244
CaptureRouteRegistrationLatency(t time.Duration)
4345
CaptureUnregistryMessage(msg ComponentTagged)
4446
CaptureFoundFileDescriptors(files int)
@@ -198,6 +200,18 @@ func (m MultiMetricReporter) CaptureUnregistryMessage(msg ComponentTagged) {
198200
}
199201
}
200202

203+
func (m MultiMetricReporter) CaptureRouteAdded() {
204+
for _, r := range m {
205+
r.CaptureRouteAdded()
206+
}
207+
}
208+
209+
func (m MultiMetricReporter) CaptureRouteDeleted() {
210+
for _, r := range m {
211+
r.CaptureRouteAdded()
212+
}
213+
}
214+
201215
func (m MultiMetricReporter) CaptureFoundFileDescriptors(files int) {
202216
for _, r := range m {
203217
r.CaptureFoundFileDescriptors(files)

src/code.cloudfoundry.org/gorouter/metrics/fakes/fake_metricreporter.go

+60
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/code.cloudfoundry.org/gorouter/metrics/fakes/fake_varzreporter.go

-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/code.cloudfoundry.org/gorouter/metrics/metricsreporter.go

+8
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,14 @@ func (m *Metrics) CaptureUnregistryMessage(msg ComponentTagged) {
168168
}
169169
}
170170

171+
func (m *Metrics) CaptureRouteAdded() {
172+
m.Batcher.BatchIncrementCounter("routes_added")
173+
}
174+
175+
func (m *Metrics) CaptureRouteDeleted() {
176+
m.Batcher.BatchIncrementCounter("routes_deleted")
177+
}
178+
171179
func (m *Metrics) CaptureWebSocketUpdate() {
172180
m.Batcher.BatchIncrementCounter("websocket_upgrades")
173181
}

src/code.cloudfoundry.org/gorouter/metrics/metricsreporter_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,18 @@ var _ = Describe("MetricsReporter", func() {
524524
Expect(count).To(Equal(uint64(5)))
525525
})
526526

527+
It("increments the bad_requests metric", func() {
528+
metricReporter.CaptureRouteAdded()
529+
Expect(batcher.BatchIncrementCounterCallCount()).To(Equal(1))
530+
Expect(batcher.BatchIncrementCounterArgsForCall(0)).To(Equal("routes_added"))
531+
})
532+
533+
It("increments the bad_requests metric", func() {
534+
metricReporter.CaptureRouteDeleted()
535+
Expect(batcher.BatchIncrementCounterCallCount()).To(Equal(1))
536+
Expect(batcher.BatchIncrementCounterArgsForCall(0)).To(Equal("routes_deleted"))
537+
})
538+
527539
It("increments the backend_tls_handshake_failed metric", func() {
528540
metricReporter.CaptureBackendTLSHandshakeFailed()
529541
Expect(batcher.BatchIncrementCounterCallCount()).To(Equal(1))

src/code.cloudfoundry.org/gorouter/metrics_prometheus/metrics.go

+11
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ type Metrics struct {
1818
RouteRegistration mr.CounterVec
1919
RouteUnregistration mr.CounterVec
2020
RoutesPruned mr.Counter
21+
RoutesAdded mr.Counter
22+
RoutesDeleted mr.Counter
2123
TotalRoutes mr.Gauge
2224
TimeSinceLastRegistryUpdate mr.Gauge
2325
RouteLookupTime mr.Histogram
@@ -64,6 +66,8 @@ func NewMetrics(registry *mr.Registry, perRequestMetricsReporting bool, meterCon
6466
RouteRegistration: registry.NewCounterVec("registry_message", "number of route registration messages", []string{"component", "action"}),
6567
RouteUnregistration: registry.NewCounterVec("unregistry_message", "number of unregister messages", []string{"component"}),
6668
RoutesPruned: registry.NewCounter("routes_pruned", "number of pruned routes"),
69+
RoutesAdded: registry.NewCounter("routes_added", "number of added routes"),
70+
RoutesDeleted: registry.NewCounter("routes_deleted", "number of deleted routes"),
6771
TotalRoutes: registry.NewGauge("total_routes", "number of total routes"),
6872
TimeSinceLastRegistryUpdate: registry.NewGauge("ms_since_last_registry_update", "time since last registry update in ms"),
6973
RouteLookupTime: registry.NewHistogram("route_lookup_time", "route lookup time per request in ns", meterConfig.RouteLookupTimeHistogramBuckets),
@@ -107,6 +111,13 @@ func (metrics *Metrics) CaptureRoutesPruned(routesPruned uint64) {
107111
metrics.RoutesPruned.Add(float64(routesPruned))
108112
}
109113

114+
func (metrics *Metrics) CaptureRouteAdded() {
115+
metrics.RoutesAdded.Add(1)
116+
}
117+
118+
func (metrics *Metrics) CaptureRouteDeleted() {
119+
metrics.RoutesDeleted.Add(1)
120+
}
110121
func (metrics *Metrics) CaptureTotalRoutes(totalRoutes int) {
111122
metrics.TotalRoutes.Set(float64(totalRoutes))
112123
}

src/code.cloudfoundry.org/gorouter/metrics_prometheus/metrics_test.go

+9
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,15 @@ var _ = Describe("Metrics", func() {
9999
Expect(getMetrics(r.Port())).To(ContainSubstring(`routes_pruned 50`))
100100
})
101101

102+
It("increments the routes added metric", func() {
103+
m.CaptureRouteAdded()
104+
Expect(getMetrics(r.Port())).To(ContainSubstring(`routes_added 1`))
105+
})
106+
It("increments the routes deleted metric", func() {
107+
m.CaptureRouteDeleted()
108+
Expect(getMetrics(r.Port())).To(ContainSubstring(`routes_deleted 1`))
109+
})
110+
102111
Describe("captures route registration latency", func() {
103112
It("properly splits the latencies apart", func() {
104113
m.CaptureRouteRegistrationLatency(1234 * time.Microsecond)

src/code.cloudfoundry.org/gorouter/registry/registry.go

+2
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ func (r *RouteRegistry) Register(uri route.Uri, endpoint *route.Endpoint) {
100100
r.logger.Info("route-registered", slog.Any("uri", uri))
101101
// for backward compatibility:
102102
r.logger.Debug("uri-added", slog.Any("uri", uri))
103+
r.reporter.CaptureRouteAdded()
103104
}
104105

105106
switch poolPutResult {
@@ -197,6 +198,7 @@ func (r *RouteRegistry) Unregister(uri route.Uri, endpoint *route.Endpoint) {
197198

198199
if routeRemoved {
199200
r.logger.Info("route-unregistered", slog.Any("uri", uri))
201+
r.reporter.CaptureRouteDeleted()
200202
} else {
201203
r.logger.Info("route-not-unregistered", slog.Any("uri", uri))
202204
}

0 commit comments

Comments
 (0)