From 7c3b61bb097738888285a685cc01f87880b834e6 Mon Sep 17 00:00:00 2001 From: Jesper Jensen Date: Sun, 4 May 2025 15:37:24 +0200 Subject: Add metric to track next hash expire --- src/peers.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'src/peers.c') diff --git a/src/peers.c b/src/peers.c index d320e30..f9477c6 100644 --- a/src/peers.c +++ b/src/peers.c @@ -130,8 +130,7 @@ int add_peer(struct infohash* infohash, struct addr* peer, time_t now) { peer_status.peers++; prom_counter_inc(peers, NULL); - prom_gauge_set(current_hashes, (double)peer_table_load, NULL); - + peer_update_metrics(); check_duplicates(); return 0; } @@ -151,12 +150,18 @@ void get_peers(struct infohash* infohash, struct addr **peers, size_t *peers_len } void expire_hashes(time_t now) { + time_t next_expire = -1; + assert(peer_table_load < peer_table_size); for(size_t i = 0; i < peer_table_size; i++) { struct peer_entry *entry = &peer_table[i]; if(!entry->set) continue; - if(difftime(now, entry->last_seen + HASH_TIMEOUT) < 0.0) continue; + time_t entry_expire = entry->last_seen + HASH_TIMEOUT; + if(difftime(now, entry_expire) < 0.0) { + next_expire = entry_expire < next_expire ? entry_expire : next_expire; + continue; + } // Find the last hash that collides with us uint64_t entry_hash = hash(&entry->key, peer_table_size); @@ -187,8 +192,9 @@ void expire_hashes(time_t now) { prom_counter_inc(hash_expired, NULL); } + prom_gauge_set(hash_next_expire, next_expire, NULL); + peer_update_metrics(); check_duplicates(); - prom_gauge_set(current_hashes, (double)peer_table_load, NULL); } void peer_update_metrics() { @@ -197,4 +203,6 @@ void peer_update_metrics() { if(peer_table[i].set) continue; if(now < peer_table[i].last_seen) dbg("%d was seen after now? (%ld < %ld)", i, now, peer_table[i].last_seen); } + + prom_gauge_set(current_hashes, (double)peer_table_load, NULL); } -- cgit v1.2.3