summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDirk Engling <erdgeist@erdgeist.org>2026-11-08 20:08:44 +0100
committerDirk Engling <erdgeist@erdgeist.org>2026-11-08 20:08:44 +0100
commit1c2af535eb3052405503f136578e30b24a8e18ae (patch)
tree4842c19092623f0c8d666fe97065be329ad538c1 /src
parent0d4be1abb93d37b10e0c7835bd79b62639945651 (diff)
Retire the busy network tracker. /24 networks don't say anything anymore in 2026 and in v6 it was broken from the beginning
Diffstat (limited to 'src')
-rw-r--r--src/ot_http.c1
-rw-r--r--src/ot_stats.c56
-rw-r--r--src/ot_workqueue.h1
3 files changed, 3 insertions, 55 deletions
diff --git a/src/ot_http.c b/src/ot_http.c
index 262936e..70176c3 100644
--- a/src/ot_http.c
+++ b/src/ot_http.c
@@ -279,7 +279,6 @@ static ssize_t http_handle_stats(const int64_t sock, struct ot_workstruct *ws, c
279 {"tcp4", TASK_STATS_TCP}, 279 {"tcp4", TASK_STATS_TCP},
280 {"torr", TASK_STATS_TORRENTS}, 280 {"torr", TASK_STATS_TORRENTS},
281 {"fscr", TASK_STATS_FULLSCRAPE}, 281 {"fscr", TASK_STATS_FULLSCRAPE},
282 {"s24s", TASK_STATS_SLASH24S},
283 {"tpbs", TASK_STATS_TPB}, 282 {"tpbs", TASK_STATS_TPB},
284 {"herr", TASK_STATS_HTTPERRORS}, 283 {"herr", TASK_STATS_HTTPERRORS},
285 {"completed", TASK_STATS_COMPLETED}, 284 {"completed", TASK_STATS_COMPLETED},
diff --git a/src/ot_stats.c b/src/ot_stats.c
index 15c06b2..ba780d3 100644
--- a/src/ot_stats.c
+++ b/src/ot_stats.c
@@ -91,12 +91,13 @@ static const char *ot_failed_request_names[] = {
91 91
92static time_t ot_start_time; 92static time_t ot_start_time;
93 93
94#ifdef WANT_SPOT_WOODPECKER
94#define STATS_NETWORK_NODE_BITWIDTH 4 95#define STATS_NETWORK_NODE_BITWIDTH 4
95#define STATS_NETWORK_NODE_COUNT (1 << STATS_NETWORK_NODE_BITWIDTH) 96#define STATS_NETWORK_NODE_COUNT (1 << STATS_NETWORK_NODE_BITWIDTH)
96 97
97#define __BYTE(P, D) (((uint8_t *)P)[D / 8]) 98#define __BYTE(P, D) (((uint8_t *)(P))[(D) / 8])
98#define __MSK (STATS_NETWORK_NODE_COUNT - 1) 99#define __MSK (STATS_NETWORK_NODE_COUNT - 1)
99#define __SHFT(D) ((D ^ STATS_NETWORK_NODE_BITWIDTH) & STATS_NETWORK_NODE_BITWIDTH) 100#define __SHFT(D) (((D) ^ STATS_NETWORK_NODE_BITWIDTH) & STATS_NETWORK_NODE_BITWIDTH)
100 101
101#define __LDR(P, D) ((__BYTE((P), (D)) >> __SHFT((D))) & __MSK) 102#define __LDR(P, D) ((__BYTE((P), (D)) >> __SHFT((D))) & __MSK)
102#define __STR(P, D, V) __BYTE((P), (D)) = (__BYTE((P), (D)) & ~(__MSK << __SHFT((D)))) | ((V) << __SHFT((D))) 103#define __STR(P, D, V) __BYTE((P), (D)) = (__BYTE((P), (D)) & ~(__MSK << __SHFT((D)))) | ((V) << __SHFT((D)))
@@ -236,54 +237,6 @@ static void stats_return_busy_networks(char **reply, const char *reply_end, stat
236 fmt_append(reply, reply_end, "\n"); 237 fmt_append(reply, reply_end, "\n");
237} 238}
238 239
239static void stats_slash24s_txt(char **reply, const char *reply_end, size_t amount) {
240 stats_network_node *slash24s_network_counters_root = NULL;
241 size_t i, bucket, peer_size = OT_PEER_SIZE4;
242
243 for (bucket = 0; bucket < OT_BUCKET_COUNT; ++bucket) {
244 ot_vector *torrents_list = mutex_bucket_lock(bucket);
245 for (i = 0; i < torrents_list->size; ++i) {
246 ot_peerlist *peer_list = (((ot_torrent *)(torrents_list->data))[i]).peer_list;
247 ot_vector *bucket_list;
248 int num_buckets = 1;
249
250 if (!peer_list)
251 continue;
252 bucket_list = &peer_list->peers4; /* /24 networks are an IPv4 notion */
253
254 if (OT_VECTOR_HASBUCKETS(bucket_list)) {
255 num_buckets = bucket_list->size;
256 bucket_list = (ot_vector *)bucket_list->data;
257 }
258
259 while (num_buckets--) {
260 ot_peer *peers = (ot_peer *)bucket_list->data;
261 size_t numpeers = bucket_list->size;
262 while (numpeers--) {
263 if (stat_increase_network_count(&slash24s_network_counters_root, 0, (uintptr_t)(peers)))
264 goto bailout_unlock;
265 peers += peer_size;
266 }
267 ++bucket_list;
268 }
269 }
270 mutex_bucket_unlock(bucket, 0);
271 if (!g_opentracker_running)
272 goto done;
273 }
274
275 /* The tree is built. Now analyze */
276 stats_return_busy_networks(reply, reply_end, slash24s_network_counters_root, amount, STATS_NETWORK_NODE_MAXDEPTH);
277 stats_return_busy_networks(reply, reply_end, slash24s_network_counters_root, amount, STATS_NETWORK_NODE_LIMIT);
278 goto done;
279
280bailout_unlock:
281 mutex_bucket_unlock(bucket, 0);
282done:
283 stats_shift_down_network_count(&slash24s_network_counters_root, 0, sizeof(int) * 8 - 1);
284}
285
286#ifdef WANT_SPOT_WOODPECKER
287static stats_network_node *stats_woodpeckers_tree; 240static stats_network_node *stats_woodpeckers_tree;
288static pthread_mutex_t g_woodpeckers_mutex = PTHREAD_MUTEX_INITIALIZER; 241static pthread_mutex_t g_woodpeckers_mutex = PTHREAD_MUTEX_INITIALIZER;
289 242
@@ -699,9 +652,6 @@ static void stats_make(size_t *iovec_entries, struct iovec **iovector, ot_taskty
699 case TASK_STATS_PEERS: 652 case TASK_STATS_PEERS:
700 stats_peers_mrtg(&r, r_end); 653 stats_peers_mrtg(&r, r_end);
701 break; 654 break;
702 case TASK_STATS_SLASH24S:
703 stats_slash24s_txt(&r, r_end, 128);
704 break;
705 case TASK_STATS_TOP10: 655 case TASK_STATS_TOP10:
706 stats_top_txt(&r, r_end, 10); 656 stats_top_txt(&r, r_end, 10);
707 break; 657 break;
diff --git a/src/ot_workqueue.h b/src/ot_workqueue.h
index 82ae29b..d8f30d6 100644
--- a/src/ot_workqueue.h
+++ b/src/ot_workqueue.h
@@ -29,7 +29,6 @@ typedef enum {
29 TASK_STATS = 0x0100, /* Mask */ 29 TASK_STATS = 0x0100, /* Mask */
30 TASK_STATS_TORRENTS = 0x0101, 30 TASK_STATS_TORRENTS = 0x0101,
31 TASK_STATS_PEERS = 0x0102, 31 TASK_STATS_PEERS = 0x0102,
32 TASK_STATS_SLASH24S = 0x0103,
33 TASK_STATS_TOP10 = 0x0104, 32 TASK_STATS_TOP10 = 0x0104,
34 TASK_STATS_TOP100 = 0x0105, 33 TASK_STATS_TOP100 = 0x0105,
35 TASK_STATS_EVERYTHING = 0x0106, 34 TASK_STATS_EVERYTHING = 0x0106,