From 34fbc8f266095ef33be3044d2cefed6633c7a74c Mon Sep 17 00:00:00 2001 From: Jesper Jensen Date: Tue, 6 May 2025 21:02:43 +0200 Subject: Add metric for wakeup time --- src/metrics.c | 11 +++++++++++ src/metrics.h | 2 ++ src/proto.c | 16 +++++++++++++--- 3 files changed, 26 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/metrics.c b/src/metrics.c index c1113a7..c16beb0 100644 --- a/src/metrics.c +++ b/src/metrics.c @@ -7,6 +7,8 @@ prom_counter_t *bytesRecv = NULL; prom_counter_t *bytesSent = NULL; prom_counter_t *meta = NULL; +prom_gauge_t *wakeup_time = NULL; + prom_counter_t *peers = NULL; prom_gauge_t *current_hashes = NULL; prom_counter_t *hashes = NULL; @@ -106,6 +108,15 @@ void metric_init() { ) ); + wakeup_time = prom_collector_registry_must_register_metric( + prom_gauge_new( + "dht_wakeup_time", + "Time for next wakeup", + 1, + (const char *[]){ "component" } + ) + ); + peers = prom_collector_registry_must_register_metric( prom_counter_new( "dht_peers_total", diff --git a/src/metrics.h b/src/metrics.h index befd3aa..d0b444f 100644 --- a/src/metrics.h +++ b/src/metrics.h @@ -9,6 +9,8 @@ extern prom_counter_t *bytesSent; extern prom_counter_t *meta; +extern prom_gauge_t *wakeup_time; + extern prom_counter_t *peers; extern prom_gauge_t *current_hashes; extern prom_counter_t *hashes; diff --git a/src/proto.c b/src/proto.c index 51eb71b..cd66ead 100644 --- a/src/proto.c +++ b/src/proto.c @@ -825,19 +825,29 @@ static void recalulate_waketime(struct dht *dht) { if(!dht->pause){ struct entry* oldest; routing_oldest(&oldest); - if(oldest != NULL) + if(oldest != NULL) { dht->wake = oldest->expire; + prom_gauge_set(wakeup_time, oldest->expire, (const char *[]){"routing"}); + } } + time_t req_timeout = 0; for(int i = 0; i < MAX_INFLIGHT; i++) { if(!dht->reqalloc[i]) continue; time_t timeout = dht->requestdata[i].timeout; - if(dht->wake == 0 || (timeout != 0 && difftime(timeout, dht->wake) < 0)) - dht->wake = timeout; + if(req_timeout == 0 || (timeout != 0 && difftime(timeout, req_timeout) < 0)) { + req_timeout = timeout; + } + } + + prom_gauge_set(wakeup_time, req_timeout, (const char *[]){"requests"}); + if(dht->wake == 0 || (req_timeout != 0 && difftime(req_timeout, dht->wake) < 0)) { + dht->wake = req_timeout; } + prom_gauge_set(wakeup_time, dht->lookup.timeout, (const char *[]){"lookup"}); if(dht->wake == 0 || difftime(dht->lookup.timeout, dht->wake) < 0) { dht->wake = dht->lookup.timeout; } -- cgit v1.2.3