diff --git a/internal/templates/status.html b/internal/templates/status.html
index ae1d4d4..11262f3 100644
--- a/internal/templates/status.html
+++ b/internal/templates/status.html
@@ -49,6 +49,16 @@
font-family: 'SF Mono', Monaco, 'Cascadia Mono', 'Roboto Mono', Consolas, 'Courier New', monospace;
color: #333;
}
+ .metric-value.metric-link {
+ text-decoration: underline;
+ text-decoration-style: dashed;
+ text-underline-offset: 2px;
+ cursor: pointer;
+ }
+ .metric-value.metric-link:hover {
+ color: #0066cc;
+ text-decoration-style: solid;
+ }
.connected {
color: #22c55e;
}
@@ -231,7 +241,7 @@
metric.className = 'metric';
metric.innerHTML = `
/${item.mask_length}
- ${formatNumber(item.count)}
+ ${formatNumber(item.count)}
`;
container.appendChild(metric);
});
diff --git a/log.txt b/log.txt
index 46ce4a1..8ba423d 100644
--- a/log.txt
+++ b/log.txt
@@ -1745,3 +1745,3604 @@
{"time":"2025-07-28T19:04:18.790626+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
2025/07/28 19:04:18 [akrotiri/bcbAMY2J2l-000337] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56478 - 408 17B in 1.001120666s
{"time":"2025-07-28T19:04:18.85916+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:19 [akrotiri/bcbAMY2J2l-000338] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3771B in 808.433583ms
+{"time":"2025-07-28T19:04:19.528571+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1186}
+{"time":"2025-07-28T19:04:19.528612+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:19.528618+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+2025/07/28 19:04:19 [akrotiri/bcbAMY2J2l-000339] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56504 - 200 3771B in 769.520375ms
+2025/07/28 19:04:19 [akrotiri/bcbAMY2J2l-000340] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3771B in 768.949042ms
+{"time":"2025-07-28T19:04:19.569295+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:19.569314+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":40}
+{"time":"2025-07-28T19:04:19.569338+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":4095,"success":4095,"duration_ms":1300}
+{"time":"2025-07-28T19:04:19.573491+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:19.643707+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:19.643707+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":74}
+{"time":"2025-07-28T19:04:19.644702+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:19.646493+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:19.646495+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":2}
+{"time":"2025-07-28T19:04:19.680217+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:7f8:1::a503:1042:1","peer_asn":"31042"}
+2025/07/28 19:04:19 [akrotiri/bcbAMY2J2l-000341] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3767B in 661.094583ms
+2025/07/28 19:04:20 [akrotiri/bcbAMY2J2l-000342] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56504 - 200 3768B in 624.664292ms
+{"time":"2025-07-28T19:04:20.509174+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":862}
+{"time":"2025-07-28T19:04:20.509195+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:20.509228+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:20.538639+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":29}
+{"time":"2025-07-28T19:04:20.538664+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:20.539704+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:20.543786+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":5}
+{"time":"2025-07-28T19:04:20.543798+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:20.543801+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":3877,"success":3877,"duration_ms":973}
+{"time":"2025-07-28T19:04:20.548015+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:20.559908+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":16}
+{"time":"2025-07-28T19:04:20.559924+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:20.561056+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:20.58689+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:20 [akrotiri/bcbAMY2J2l-000343] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3770B in 626.530209ms
+{"time":"2025-07-28T19:04:21.360256+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":800}
+{"time":"2025-07-28T19:04:21.360274+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:21.36028+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:21.424763+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:21.424763+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":64}
+{"time":"2025-07-28T19:04:21.424841+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20142,"unique_prefixes":3861,"success":3861,"duration_ms":880}
+2025/07/28 19:04:21 [akrotiri/bcbAMY2J2l-000344] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3770B in 629.45525ms
+{"time":"2025-07-28T19:04:21.429085+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:21.68877+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:21.68877+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":264}
+{"time":"2025-07-28T19:04:21.690272+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:21.692708+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:21.692712+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+2025/07/28 19:04:22 [akrotiri/bcbAMY2J2l-000345] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56504 - 200 3768B in 627.203709ms
+{"time":"2025-07-28T19:04:22.384055+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:22.406528+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:22.406576+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":713}
+{"time":"2025-07-28T19:04:22.406598+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:22.473718+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:22.473725+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":67}
+{"time":"2025-07-28T19:04:22.475103+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:22.477702+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:22.47771+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+2025/07/28 19:04:22 [akrotiri/bcbAMY2J2l-000346] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3770B in 624.782125ms
+{"time":"2025-07-28T19:04:22.491797+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:22.491802+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":14}
+{"time":"2025-07-28T19:04:22.491814+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20159,"unique_prefixes":3659,"success":3659,"duration_ms":1066}
+{"time":"2025-07-28T19:04:22.495843+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:22.512898+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":21}
+{"time":"2025-07-28T19:04:22.512912+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:22.514147+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:22 [akrotiri/bcbAMY2J2l-000347] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3770B in 630.096875ms
+{"time":"2025-07-28T19:04:23.198815+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":685}
+{"time":"2025-07-28T19:04:23.198834+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:23.198837+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:23.299669+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":100}
+{"time":"2025-07-28T19:04:23.299688+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20038,"unique_prefixes":3385,"success":3385,"duration_ms":806}
+{"time":"2025-07-28T19:04:23.299673+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:23.307283+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:23.322751+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":23}
+{"time":"2025-07-28T19:04:23.322814+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:23.324427+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:23.395673+02:00","level":"DEBUG","msg":"System stats","source":"cli.go:40","func":"routewatch.logDebugStats","goroutines":38,"alloc_mb":326,"total_alloc_mb":3964,"sys_mb":355,"num_gc":75,"heap_alloc_mb":326,"heap_sys_mb":337,"heap_idle_mb":4,"heap_inuse_mb":333,"heap_released_mb":3,"stack_inuse_mb":2}
+2025/07/28 19:04:23 [akrotiri/bcbAMY2J2l-000348] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56504 - 200 3768B in 707.649333ms
+{"time":"2025-07-28T19:04:23.676489+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:23.75757+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:04:24 [akrotiri/bcbAMY2J2l-000349] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3772B in 721.520083ms
+2025/07/28 19:04:24 [akrotiri/bcbAMY2J2l-000350] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3772B in 657.475209ms
+{"time":"2025-07-28T19:04:24.750125+02:00","level":"INFO","msg":"Stream statistics","source":"streamer.go:271","func":"streamer.(*Streamer).logMetrics","uptime":120001373334,"total_messages":766976,"total_bytes":572125857,"total_mb":"545.62","messages_per_sec":"5992.12","bits_per_sec":"35581230","mbps":"35.58","total_dropped":43741}
+{"time":"2025-07-28T19:04:24.750149+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.ASHandler","index":0,"queue_len":55402,"queue_cap":100000,"processed":705815,"dropped":0,"avg_time":114275,"min_time":0,"max_time":2021237791}
+{"time":"2025-07-28T19:04:24.750155+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeerHandler","index":1,"queue_len":7137,"queue_cap":100000,"processed":754080,"dropped":0,"avg_time":57015,"min_time":0,"max_time":1674970041}
+{"time":"2025-07-28T19:04:24.750159+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PrefixHandler","index":2,"queue_len":100000,"queue_cap":100000,"processed":617476,"dropped":43741,"avg_time":159448,"min_time":0,"max_time":2069192083}
+{"time":"2025-07-28T19:04:24.750162+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeeringHandler","index":3,"queue_len":0,"queue_cap":100000,"processed":761218,"dropped":0,"avg_time":1548,"min_time":0,"max_time":16413542}
+{"time":"2025-07-28T19:04:24.770711+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:24.770703+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1447}
+{"time":"2025-07-28T19:04:24.77077+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:24.793515+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"217.29.66.232","peer_asn":"54104"}
+{"time":"2025-07-28T19:04:24.796625+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":25}
+{"time":"2025-07-28T19:04:24.796634+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:24.797506+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:24.798942+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":2}
+{"time":"2025-07-28T19:04:24.798951+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:24.799949+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:24.799957+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:24.79996+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:24.800834+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:24.800836+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:24.800843+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:24.809644+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":8}
+{"time":"2025-07-28T19:04:24.809663+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20056,"unique_prefixes":7527,"success":7527,"duration_ms":1508}
+{"time":"2025-07-28T19:04:24.80967+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:24.812772+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:24.885069+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:24.907674+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:24.90768+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":98}
+{"time":"2025-07-28T19:04:24.908817+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:24.90984+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:24.909844+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":2}
+{"time":"2025-07-28T19:04:24.909852+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:04:24 [akrotiri/bcbAMY2J2l-000351] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3770B in 637.104583ms
+{"time":"2025-07-28T19:04:24.977762+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"195.208.208.187","peer_asn":"9002"}
+2025/07/28 19:04:25 [akrotiri/bcbAMY2J2l-000352] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3771B in 642.562334ms
+{"time":"2025-07-28T19:04:25.562209+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:25.562209+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":652}
+{"time":"2025-07-28T19:04:25.562236+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:25.572354+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:25.572355+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":10}
+{"time":"2025-07-28T19:04:25.592575+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:25.592579+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":20}
+{"time":"2025-07-28T19:04:25.593257+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:25.593265+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:25.593272+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:25.593519+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:25.60323+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":9}
+{"time":"2025-07-28T19:04:25.603241+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20003,"unique_prefixes":3306,"success":3306,"duration_ms":792}
+{"time":"2025-07-28T19:04:25.603254+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:25.603776+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:25.603783+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:25.603785+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:25.604433+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:25.604435+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:25.60445+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:25.608359+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:25.626018+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":21}
+{"time":"2025-07-28T19:04:25.626028+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:25.626205+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:25.626211+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:25.626214+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:25.626648+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:25.62665+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:25.626656+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:25.627061+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:25 [akrotiri/bcbAMY2J2l-000353] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3766B in 641.098375ms
+{"time":"2025-07-28T19:04:26.14222+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:26 [akrotiri/bcbAMY2J2l-000354] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3769B in 650.62025ms
+{"time":"2025-07-28T19:04:26.577058+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":950}
+{"time":"2025-07-28T19:04:26.577071+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:26.577077+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:26.577651+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:26.577658+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:26.577662+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:26.578424+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:26.578434+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:26.578442+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:26.602114+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:26.60212+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":23}
+{"time":"2025-07-28T19:04:26.60335+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:26.604934+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:26.604937+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":2}
+{"time":"2025-07-28T19:04:26.611421+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:26.611421+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":6}
+{"time":"2025-07-28T19:04:26.611449+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20002,"unique_prefixes":4553,"success":4553,"duration_ms":1007}
+{"time":"2025-07-28T19:04:26.611916+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:26.611918+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:26.611924+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:26.617466+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:26.640127+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":28}
+{"time":"2025-07-28T19:04:26.640135+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:26.640783+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:26.640791+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:26.640794+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:26.641261+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:26 [akrotiri/bcbAMY2J2l-000355] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3767B in 638.074208ms
+2025/07/28 19:04:27 [akrotiri/bcbAMY2J2l-000356] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3768B in 622.919584ms
+{"time":"2025-07-28T19:04:27.682761+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:27.68276+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1041}
+{"time":"2025-07-28T19:04:27.682795+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:27.689203+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:27.734826+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:27.734825+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":52}
+{"time":"2025-07-28T19:04:27.734849+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:27.780879+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":46}
+{"time":"2025-07-28T19:04:27.780886+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:27.782119+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:27.788198+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":7}
+{"time":"2025-07-28T19:04:27.788212+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":6437,"success":6437,"duration_ms":1175}
+{"time":"2025-07-28T19:04:27.788206+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:27.791635+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+{"time":"2025-07-28T19:04:27.791646+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:27.79225+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:27.79226+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:27.792263+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:27.792615+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:27.792622+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:27.792627+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:27.793416+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:27.843391+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":50}
+{"time":"2025-07-28T19:04:27.843482+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:27.844756+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:27.85104+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":7}
+{"time":"2025-07-28T19:04:27.851052+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:27.851055+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+2025/07/28 19:04:27 [akrotiri/bcbAMY2J2l-000357] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3767B in 637.977917ms
+2025/07/28 19:04:28 [akrotiri/bcbAMY2J2l-000358] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3767B in 662.654792ms
+{"time":"2025-07-28T19:04:28.851629+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1000}
+{"time":"2025-07-28T19:04:28.851654+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:28.851634+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:28.94179+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"196.60.8.170","peer_asn":"327781"}
+{"time":"2025-07-28T19:04:28.959922+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":108}
+{"time":"2025-07-28T19:04:28.959932+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:28.960949+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:28.962395+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":2}
+{"time":"2025-07-28T19:04:28.962406+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:28.962409+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:28.963197+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:28.963219+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:28.963251+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:28.972082+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":8}
+{"time":"2025-07-28T19:04:28.972095+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":5264,"success":5264,"duration_ms":1182}
+{"time":"2025-07-28T19:04:28.972082+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:28.977478+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+2025/07/28 19:04:28 [akrotiri/bcbAMY2J2l-000359] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3767B in 635.925666ms
+{"time":"2025-07-28T19:04:28.995124+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:28.995124+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":23}
+{"time":"2025-07-28T19:04:28.995669+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:28.995673+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:28.995681+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:28.996178+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:29.03842+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"80.81.192.113","peer_asn":"35320"}
+{"time":"2025-07-28T19:04:29.311625+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:29 [akrotiri/bcbAMY2J2l-000360] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3769B in 641.688167ms
+{"time":"2025-07-28T19:04:29.958109+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:29.958105+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":962}
+{"time":"2025-07-28T19:04:29.958186+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:29.96583+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":7}
+{"time":"2025-07-28T19:04:29.96584+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:29.965842+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:04:30 [akrotiri/bcbAMY2J2l-000361] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3770B in 664.08975ms
+{"time":"2025-07-28T19:04:30.089795+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":123}
+{"time":"2025-07-28T19:04:30.089805+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:30.090954+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:30.093472+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+{"time":"2025-07-28T19:04:30.093501+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:30.106121+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":12}
+{"time":"2025-07-28T19:04:30.106133+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:30.106136+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":5984,"success":5984,"duration_ms":1133}
+{"time":"2025-07-28T19:04:30.106684+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:30.106694+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:30.106697+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:30.107073+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:30.107093+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:30.107114+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:30.110508+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:30.144824+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":37}
+{"time":"2025-07-28T19:04:30.144838+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:30.145171+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:30.145179+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:30.145182+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:30.145479+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:30.145482+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:30.145488+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:30.145932+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:30 [akrotiri/bcbAMY2J2l-000362] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3767B in 642.691ms
+2025/07/28 19:04:30 [akrotiri/bcbAMY2J2l-000363] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3767B in 615.148625ms
+{"time":"2025-07-28T19:04:30.985175+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":839}
+{"time":"2025-07-28T19:04:30.985195+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:30.985183+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:31.03981+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":54}
+{"time":"2025-07-28T19:04:31.039829+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:31.039834+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:31.040937+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:31.040943+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:04:31.040951+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:31.069889+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:31.069907+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":28}
+{"time":"2025-07-28T19:04:31.071249+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:31.075084+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:31.075086+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":5}
+{"time":"2025-07-28T19:04:31.075172+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20001,"unique_prefixes":3935,"success":3935,"duration_ms":968}
+{"time":"2025-07-28T19:04:31.075579+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:31.075613+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:31.075633+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:31.085932+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:31.125226+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:31.125233+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":49}
+{"time":"2025-07-28T19:04:31.125844+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:31.125854+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:31.125857+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:31.126233+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:31.126234+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:31.126244+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:31.126363+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:31.228805+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:31 [akrotiri/bcbAMY2J2l-000364] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3770B in 647.375333ms
+2025/07/28 19:04:31 [akrotiri/bcbAMY2J2l-000365] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3771B in 626.473958ms
+{"time":"2025-07-28T19:04:32.33968+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1213}
+{"time":"2025-07-28T19:04:32.339692+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:32.339699+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:32.342186+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":2}
+{"time":"2025-07-28T19:04:32.342195+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:32.342197+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:32.500217+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:32.500214+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":157}
+{"time":"2025-07-28T19:04:32.503086+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:32.507257+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":7}
+{"time":"2025-07-28T19:04:32.507324+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+2025/07/28 19:04:32 [akrotiri/bcbAMY2J2l-000366] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3768B in 648.011833ms
+{"time":"2025-07-28T19:04:32.516911+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":9}
+{"time":"2025-07-28T19:04:32.516927+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":7454,"success":7454,"duration_ms":1440}
+{"time":"2025-07-28T19:04:32.516968+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:32.517545+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:32.517555+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:32.517559+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:32.518368+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:32.518616+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:32.518637+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:32.525359+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:32.570419+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":52}
+{"time":"2025-07-28T19:04:32.570427+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:32.570954+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:32.570962+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:32.570963+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:32.571569+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:33 [akrotiri/bcbAMY2J2l-000367] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3767B in 640.2715ms
+{"time":"2025-07-28T19:04:33.049114+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:33 [akrotiri/bcbAMY2J2l-000368] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3772B in 647.94025ms
+{"time":"2025-07-28T19:04:33.541297+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:33.541297+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":970}
+{"time":"2025-07-28T19:04:33.541329+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:33.544349+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":3}
+{"time":"2025-07-28T19:04:33.544358+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:33.544359+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:33.664424+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:33.66443+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":120}
+{"time":"2025-07-28T19:04:33.66603+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:33.668585+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":4}
+{"time":"2025-07-28T19:04:33.668612+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:33.677265+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":8}
+{"time":"2025-07-28T19:04:33.677278+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20021,"unique_prefixes":4451,"success":4451,"duration_ms":1158}
+{"time":"2025-07-28T19:04:33.677285+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:33.677933+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:33.677943+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:33.677946+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:33.678821+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:33.678903+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:33.67892+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:33.683806+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:33.800981+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:33.80098+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":122}
+{"time":"2025-07-28T19:04:33.802157+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:33.802202+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:04:33.802209+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:33.802211+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:04:34 [akrotiri/bcbAMY2J2l-000369] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3768B in 652.733625ms
+2025/07/28 19:04:34 [akrotiri/bcbAMY2J2l-000370] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3769B in 620.550333ms
+{"time":"2025-07-28T19:04:34.739477+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:34.739474+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":937}
+{"time":"2025-07-28T19:04:34.739505+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:34.748904+02:00","level":"INFO","msg":"Stream statistics","source":"streamer.go:271","func":"streamer.(*Streamer).logMetrics","uptime":130000143709,"total_messages":828416,"total_bytes":622574328,"total_mb":"593.73","messages_per_sec":"6087.49","bits_per_sec":"37088086","mbps":"37.09","total_dropped":59849}
+{"time":"2025-07-28T19:04:34.748919+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.ASHandler","index":0,"queue_len":29652,"queue_cap":100000,"processed":792568,"dropped":0,"avg_time":114979,"min_time":0,"max_time":2021237791}
+{"time":"2025-07-28T19:04:34.748924+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeerHandler","index":1,"queue_len":0,"queue_cap":100000,"processed":822221,"dropped":0,"avg_time":58459,"min_time":0,"max_time":1674970041}
+{"time":"2025-07-28T19:04:34.748928+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PrefixHandler","index":2,"queue_len":100000,"queue_cap":100000,"processed":662371,"dropped":59849,"avg_time":164303,"min_time":0,"max_time":2069192083}
+{"time":"2025-07-28T19:04:34.748931+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeeringHandler","index":3,"queue_len":0,"queue_cap":100000,"processed":822221,"dropped":0,"avg_time":1528,"min_time":0,"max_time":16413542}
+{"time":"2025-07-28T19:04:34.836302+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":96}
+{"time":"2025-07-28T19:04:34.83631+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:34.837404+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:04:34.837413+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:34.837416+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:34.837614+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:34.837856+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:34.837863+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:34.837879+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:34.844942+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:34.844942+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":7}
+{"time":"2025-07-28T19:04:34.844961+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20002,"unique_prefixes":4152,"success":4152,"duration_ms":1166}
+{"time":"2025-07-28T19:04:34.848944+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:34.890073+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:34.890073+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":45}
+{"time":"2025-07-28T19:04:34.890602+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:34.890648+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:34.890673+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:34.891283+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:34 [akrotiri/bcbAMY2J2l-000371] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3769B in 607.912333ms
+{"time":"2025-07-28T19:04:35.086906+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:35 [akrotiri/bcbAMY2J2l-000372] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3772B in 646.855625ms
+{"time":"2025-07-28T19:04:35.699392+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":808}
+{"time":"2025-07-28T19:04:35.699412+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:35.699401+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:35.757006+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":57}
+{"time":"2025-07-28T19:04:35.757032+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:35.757017+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:35.795946+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":38}
+{"time":"2025-07-28T19:04:35.795972+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:35.797045+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:35.799153+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+{"time":"2025-07-28T19:04:35.799172+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:35.803084+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":3}
+{"time":"2025-07-28T19:04:35.803092+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:35.803102+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":3317,"success":3317,"duration_ms":957}
+{"time":"2025-07-28T19:04:35.803646+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:35.803653+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:35.803656+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:35.803936+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:35.803938+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:35.803943+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:35.810993+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:35.832221+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":28}
+{"time":"2025-07-28T19:04:35.83223+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:35.833134+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:35.833142+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:35.833143+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:35.833426+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:36 [akrotiri/bcbAMY2J2l-000373] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3769B in 632.920208ms
+{"time":"2025-07-28T19:04:36.442596+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"195.208.209.174","peer_asn":"25227"}
+{"time":"2025-07-28T19:04:36.505651+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"193.239.118.249","peer_asn":"41255"}
+2025/07/28 19:04:36 [akrotiri/bcbAMY2J2l-000374] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3769B in 692.002334ms
+{"time":"2025-07-28T19:04:36.789307+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:37 [akrotiri/bcbAMY2J2l-000375] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3773B in 649.966375ms
+2025/07/28 19:04:37 [akrotiri/bcbAMY2J2l-000376] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3772B in 631.404375ms
+{"time":"2025-07-28T19:04:37.670526+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1837}
+{"time":"2025-07-28T19:04:37.670547+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:37.670534+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:37.676598+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":6}
+{"time":"2025-07-28T19:04:37.676607+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:37.676608+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:37.795679+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":119}
+{"time":"2025-07-28T19:04:37.795692+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:37.796828+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:37.799561+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+{"time":"2025-07-28T19:04:37.799586+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:37.812944+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":13}
+{"time":"2025-07-28T19:04:37.812958+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20021,"unique_prefixes":10078,"success":10078,"duration_ms":2009}
+{"time":"2025-07-28T19:04:37.812958+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:37.813282+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:37.813291+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:37.813294+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:37.813857+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:37.813861+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:37.813867+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:37.819655+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:37.851065+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":37}
+{"time":"2025-07-28T19:04:37.851074+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:37.851634+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:37.851643+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:37.851644+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:37.852178+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:38 [akrotiri/bcbAMY2J2l-000377] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3768B in 628.832ms
+{"time":"2025-07-28T19:04:38.046898+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:38 [akrotiri/bcbAMY2J2l-000378] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3770B in 649.403875ms
+{"time":"2025-07-28T19:04:38.995942+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"80.81.194.190","peer_asn":"31042"}
+2025/07/28 19:04:39 [akrotiri/bcbAMY2J2l-000379] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3771B in 659.702125ms
+{"time":"2025-07-28T19:04:39.324545+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1472}
+{"time":"2025-07-28T19:04:39.324564+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:39.324551+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:39.330058+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":5}
+{"time":"2025-07-28T19:04:39.330065+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:39.330067+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:39.521581+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":191}
+{"time":"2025-07-28T19:04:39.521592+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:39.523414+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:39.525236+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+{"time":"2025-07-28T19:04:39.525274+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:39.694925+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":169}
+{"time":"2025-07-28T19:04:39.694944+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20039,"unique_prefixes":7730,"success":7730,"duration_ms":1881}
+{"time":"2025-07-28T19:04:39.694943+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:39.699628+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:39.701036+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":6}
+{"time":"2025-07-28T19:04:39.701045+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:39.701047+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:39 [akrotiri/bcbAMY2J2l-000380] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3766B in 775.081042ms
+{"time":"2025-07-28T19:04:39.741561+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":40}
+{"time":"2025-07-28T19:04:39.741577+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:39.74274+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:39.958471+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:40 [akrotiri/bcbAMY2J2l-000381] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3768B in 682.349709ms
+2025/07/28 19:04:40 [akrotiri/bcbAMY2J2l-000382] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3769B in 655.447042ms
+{"time":"2025-07-28T19:04:40.652913+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:7f8::8b0e:0:1","peer_asn":"35598"}
+{"time":"2025-07-28T19:04:40.659092+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"2001:7f8::8b0e:0:1","peer_asn":"35598"}
+{"time":"2025-07-28T19:04:40.81003+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1068}
+{"time":"2025-07-28T19:04:40.810041+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:40.810046+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:40.8806+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":70}
+{"time":"2025-07-28T19:04:40.880617+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:40.880621+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:40.882215+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:40.882219+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:04:40.882225+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:40.920051+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:40.920051+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":37}
+{"time":"2025-07-28T19:04:40.921443+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:40.923525+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:40.923531+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+{"time":"2025-07-28T19:04:41.011768+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":88}
+{"time":"2025-07-28T19:04:41.011789+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20006,"unique_prefixes":5057,"success":5057,"duration_ms":1316}
+{"time":"2025-07-28T19:04:41.011774+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.015043+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:41.016225+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:41.016258+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":4}
+{"time":"2025-07-28T19:04:41.016267+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.068186+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:41.068189+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":51}
+{"time":"2025-07-28T19:04:41.06941+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:41 [akrotiri/bcbAMY2J2l-000383] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3766B in 663.223042ms
+{"time":"2025-07-28T19:04:41.401597+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:7f8:4::73ab:1","peer_asn":"29611"}
+{"time":"2025-07-28T19:04:41.401681+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"2001:7f8:1::a503:5598:1","peer_asn":"35598"}
+{"time":"2025-07-28T19:04:41.404797+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:7f8:1::a503:5598:1","peer_asn":"35598"}
+2025/07/28 19:04:41 [akrotiri/bcbAMY2J2l-000384] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3766B in 628.340417ms
+{"time":"2025-07-28T19:04:41.746395+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.746395+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":678}
+{"time":"2025-07-28T19:04:41.746429+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:41.803415+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:41.803416+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":57}
+{"time":"2025-07-28T19:04:41.803487+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.865252+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:41.865254+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":61}
+{"time":"2025-07-28T19:04:41.866248+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.86626+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":1}
+{"time":"2025-07-28T19:04:41.866282+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20018,"unique_prefixes":2333,"success":2333,"duration_ms":853}
+{"time":"2025-07-28T19:04:41.86657+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:41.866607+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:41.866616+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.86662+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.867077+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:41.867086+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.86709+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.867734+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:41.867741+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.867744+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.86852+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:41.868536+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:41.868555+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.871811+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:41.895762+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:41.916312+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":47}
+{"time":"2025-07-28T19:04:41.917604+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.918063+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:41.918259+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:41.918272+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:41.918329+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+2025/07/28 19:04:42 [akrotiri/bcbAMY2J2l-000385] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3769B in 697.100375ms
+2025/07/28 19:04:42 [akrotiri/bcbAMY2J2l-000386] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3770B in 705.386167ms
+2025/07/28 19:04:42 [akrotiri/bcbAMY2J2l-000387] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56504 - 200 3770B in 707.104041ms
+{"time":"2025-07-28T19:04:42.956653+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:42.956651+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1038}
+{"time":"2025-07-28T19:04:42.95674+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:42.967017+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":10}
+{"time":"2025-07-28T19:04:42.967051+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:43.132106+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":165}
+{"time":"2025-07-28T19:04:43.132372+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:43.133383+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:04:43.133395+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:43.133399+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:43.134023+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:43.13421+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:43.134218+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:43.134222+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:43.140126+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":6}
+{"time":"2025-07-28T19:04:43.140142+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20003,"unique_prefixes":3156,"success":3156,"duration_ms":1271}
+{"time":"2025-07-28T19:04:43.14015+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:43.148549+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:43.210121+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":69}
+{"time":"2025-07-28T19:04:43.210179+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:43.21087+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:43.210889+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:43.2109+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:43.211348+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:43.211748+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:43.211777+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:43.211892+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:43.231921+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"80.81.194.92","peer_asn":"57111"}
+2025/07/28 19:04:43 [akrotiri/bcbAMY2J2l-000388] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3766B in 815.192667ms
+2025/07/28 19:04:43 [akrotiri/bcbAMY2J2l-000389] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3766B in 818.742041ms
+{"time":"2025-07-28T19:04:43.514478+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:43 [akrotiri/bcbAMY2J2l-000390] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3768B in 825.370041ms
+2025/07/28 19:04:43 [akrotiri/bcbAMY2J2l-000391] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56504 - 200 3768B in 828.225417ms
+{"time":"2025-07-28T19:04:44.310049+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1098}
+{"time":"2025-07-28T19:04:44.310073+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:44.310078+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:44.328606+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:44.32877+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":18}
+{"time":"2025-07-28T19:04:44.328781+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20001,"unique_prefixes":4609,"success":4609,"duration_ms":1187}
+{"time":"2025-07-28T19:04:44.32914+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:44.331167+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:44.331191+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:44.339006+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:44.498995+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:44.499004+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":169}
+{"time":"2025-07-28T19:04:44.502553+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:44.503607+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:44.504044+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":4}
+{"time":"2025-07-28T19:04:44.504289+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:44.5048+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:44.504811+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:44.584554+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:44 [akrotiri/bcbAMY2J2l-000393] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3768B in 880.943416ms
+2025/07/28 19:04:44 [akrotiri/bcbAMY2J2l-000392] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3768B in 917.594792ms
+{"time":"2025-07-28T19:04:44.749583+02:00","level":"INFO","msg":"Stream statistics","source":"streamer.go:271","func":"streamer.(*Streamer).logMetrics","uptime":140000737750,"total_messages":891904,"total_bytes":668545596,"total_mb":"637.57","messages_per_sec":"6049.58","bits_per_sec":"36633330","mbps":"36.63","total_dropped":85662}
+{"time":"2025-07-28T19:04:44.749662+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.ASHandler","index":0,"queue_len":20191,"queue_cap":100000,"processed":865016,"dropped":0,"avg_time":117713,"min_time":0,"max_time":2021237791}
+{"time":"2025-07-28T19:04:44.749695+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeerHandler","index":1,"queue_len":1127,"queue_cap":100000,"processed":884080,"dropped":0,"avg_time":61427,"min_time":0,"max_time":1674970041}
+{"time":"2025-07-28T19:04:44.749708+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PrefixHandler","index":2,"queue_len":97786,"queue_cap":100000,"processed":701759,"dropped":85662,"avg_time":170258,"min_time":0,"max_time":2069192083}
+{"time":"2025-07-28T19:04:44.749714+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeeringHandler","index":3,"queue_len":0,"queue_cap":100000,"processed":885208,"dropped":0,"avg_time":1521,"min_time":0,"max_time":16413542}
+2025/07/28 19:04:44 [akrotiri/bcbAMY2J2l-000395] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56504 - 200 3769B in 884.6215ms
+2025/07/28 19:04:44 [akrotiri/bcbAMY2J2l-000394] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3769B in 891.64025ms
+2025/07/28 19:04:45 [akrotiri/bcbAMY2J2l-000396] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3769B in 813.049291ms
+2025/07/28 19:04:45 [akrotiri/bcbAMY2J2l-000397] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57342 - 200 3770B in 897.790042ms
+{"time":"2025-07-28T19:04:45.456184+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"80.249.210.89","peer_asn":"31042"}
+{"time":"2025-07-28T19:04:45.639759+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:45.639759+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1135}
+{"time":"2025-07-28T19:04:45.63986+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:45.724307+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:45.72433+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":84}
+{"time":"2025-07-28T19:04:45.724866+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:45.724879+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:45.724931+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:45.725969+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:45 [akrotiri/bcbAMY2J2l-000399] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3770B in 779.246208ms
+2025/07/28 19:04:45 [akrotiri/bcbAMY2J2l-000398] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3770B in 782.8565ms
+{"time":"2025-07-28T19:04:45.728166+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:45.728169+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+{"time":"2025-07-28T19:04:45.728989+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:45.729052+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":0}
+{"time":"2025-07-28T19:04:45.72906+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20001,"unique_prefixes":3720,"success":3720,"duration_ms":1397}
+{"time":"2025-07-28T19:04:45.72963+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:45.730209+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:45.730231+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:45.736631+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:45.78714+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":57}
+{"time":"2025-07-28T19:04:45.787152+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:45.787716+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:45.787726+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:45.78773+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:45.788378+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:45.788381+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:45.788429+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:45.788447+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:04:46 [akrotiri/bcbAMY2J2l-000400] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56504 - 200 3766B in 766.848625ms
+2025/07/28 19:04:46 [akrotiri/bcbAMY2J2l-000401] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57342 - 200 3766B in 775.485375ms
+{"time":"2025-07-28T19:04:46.350112+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:46 [akrotiri/bcbAMY2J2l-000403] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 200 3770B in 759.662458ms
+2025/07/28 19:04:46 [akrotiri/bcbAMY2J2l-000402] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3770B in 770.475417ms
+2025/07/28 19:04:47 [akrotiri/bcbAMY2J2l-000405] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57342 - 200 3770B in 710.444792ms
+2025/07/28 19:04:47 [akrotiri/bcbAMY2J2l-000404] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56504 - 200 3770B in 765.782083ms
+{"time":"2025-07-28T19:04:47.447359+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1658}
+{"time":"2025-07-28T19:04:47.447378+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:47.447383+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:47.978861+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:04:47 [akrotiri/bcbAMY2J2l-000407] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56696 - 408 17B in 1.000899875s
+{"time":"2025-07-28T19:04:47.988407+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:47.988411+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":541}
+{"time":"2025-07-28T19:04:47.988485+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":7085,"success":7085,"duration_ms":2258}
+{"time":"2025-07-28T19:04:48.005743+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:48.099427+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:48.09955+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":111}
+{"time":"2025-07-28T19:04:48.099975+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:48.10086+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:48.100871+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:48.101756+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:48.105459+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:48.105472+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":5}
+{"time":"2025-07-28T19:04:48.109593+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:48 [akrotiri/bcbAMY2J2l-000406] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3774B in 1.257888333s
+{"time":"2025-07-28T19:04:48.455011+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:04:48 [akrotiri/bcbAMY2J2l-000408] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56504 - 408 17B in 1.000308667s
+{"time":"2025-07-28T19:04:48.457657+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:04:48 [akrotiri/bcbAMY2J2l-000409] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57342 - 408 17B in 1.000825917s
+2025/07/28 19:04:49 [akrotiri/bcbAMY2J2l-000411] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3777B in 1.12936175s
+2025/07/28 19:04:49 [akrotiri/bcbAMY2J2l-000412] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3777B in 1.127526375s
+2025/07/28 19:04:49 [akrotiri/bcbAMY2J2l-000410] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3777B in 1.157667541s
+{"time":"2025-07-28T19:04:49.164784+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"2602:fa91:0:cccc::20","peer_asn":"53427"}
+{"time":"2025-07-28T19:04:49.291035+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:7f8::7942:0:1","peer_asn":"31042"}
+2025/07/28 19:04:49 [akrotiri/bcbAMY2J2l-000414] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3777B in 1.107310083s
+2025/07/28 19:04:49 [akrotiri/bcbAMY2J2l-000415] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3777B in 1.11275425s
+2025/07/28 19:04:49 [akrotiri/bcbAMY2J2l-000413] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3777B in 1.131553625s
+{"time":"2025-07-28T19:04:49.719976+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:49.719993+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1614}
+{"time":"2025-07-28T19:04:49.720014+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:49.830385+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:49.830403+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":110}
+{"time":"2025-07-28T19:04:49.830739+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:49.916429+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:49.916658+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":86}
+{"time":"2025-07-28T19:04:49.919401+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:49.91952+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:49.919481+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":2}
+{"time":"2025-07-28T19:04:49.92205+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:49.928991+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:49.929021+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":9}
+{"time":"2025-07-28T19:04:49.929045+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20027,"unique_prefixes":5593,"success":5593,"duration_ms":1937}
+{"time":"2025-07-28T19:04:49.929384+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:49.929899+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:49.930046+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:49.936498+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:50.025521+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:50.025528+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":96}
+{"time":"2025-07-28T19:04:50.028143+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:50.03006+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:50.030128+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":4}
+{"time":"2025-07-28T19:04:50.030681+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:50.030733+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:50.030791+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:04:50 [akrotiri/bcbAMY2J2l-000416] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3771B in 1.080419833s
+2025/07/28 19:04:50 [akrotiri/bcbAMY2J2l-000418] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3771B in 1.055472833s
+2025/07/28 19:04:50 [akrotiri/bcbAMY2J2l-000417] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3771B in 1.092993s
+{"time":"2025-07-28T19:04:50.388369+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:50.544246+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"186.211.128.34","peer_asn":"14840"}
+{"time":"2025-07-28T19:04:50.547096+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"186.211.128.34","peer_asn":"14840"}
+2025/07/28 19:04:50 [akrotiri/bcbAMY2J2l-000419] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3777B in 1.069298s
+2025/07/28 19:04:50 [akrotiri/bcbAMY2J2l-000420] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3775B in 1.071911667s
+2025/07/28 19:04:50 [akrotiri/bcbAMY2J2l-000421] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3774B in 910.012667ms
+{"time":"2025-07-28T19:04:50.912606+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":881}
+{"time":"2025-07-28T19:04:50.912626+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:50.912648+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:51 [akrotiri/bcbAMY2J2l-000422] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3775B in 854.852417ms
+{"time":"2025-07-28T19:04:51.112119+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:51.112131+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":199}
+{"time":"2025-07-28T19:04:51.113422+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:51.118009+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:51.118141+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":5}
+{"time":"2025-07-28T19:04:51.118166+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:51.12436+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:51.124422+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":6}
+{"time":"2025-07-28T19:04:51.138843+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:51.138854+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":14}
+{"time":"2025-07-28T19:04:51.138883+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20152,"unique_prefixes":3772,"success":3772,"duration_ms":1208}
+{"time":"2025-07-28T19:04:51.147551+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:51.23146+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:51.231479+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":92}
+{"time":"2025-07-28T19:04:51.232847+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:51.236493+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:51.236554+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":5}
+{"time":"2025-07-28T19:04:51.236587+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:04:51 [akrotiri/bcbAMY2J2l-000424] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3770B in 877.002791ms
+2025/07/28 19:04:51 [akrotiri/bcbAMY2J2l-000423] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3771B in 920.284417ms
+2025/07/28 19:04:51 [akrotiri/bcbAMY2J2l-000426] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3771B in 836.527167ms
+2025/07/28 19:04:51 [akrotiri/bcbAMY2J2l-000425] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3771B in 842.314458ms
+{"time":"2025-07-28T19:04:52.193588+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:52.439696+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:52.441066+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1203}
+{"time":"2025-07-28T19:04:52.441078+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+2025/07/28 19:04:52 [akrotiri/bcbAMY2J2l-000427] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3774B in 786.372958ms
+2025/07/28 19:04:52 [akrotiri/bcbAMY2J2l-000428] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3774B in 790.854208ms
+{"time":"2025-07-28T19:04:52.650383+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":210}
+{"time":"2025-07-28T19:04:52.65172+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:52.650313+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:52.653059+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:52.653101+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":2}
+{"time":"2025-07-28T19:04:52.653135+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:52.659902+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:52.659918+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":6}
+{"time":"2025-07-28T19:04:52.666349+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:52.666365+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":6}
+{"time":"2025-07-28T19:04:52.66647+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20009,"unique_prefixes":4303,"success":4303,"duration_ms":1525}
+{"time":"2025-07-28T19:04:52.671113+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:52.76942+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:52.769605+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":103}
+{"time":"2025-07-28T19:04:52.771837+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:52.773669+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:52.773677+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":4}
+{"time":"2025-07-28T19:04:52.773685+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:04:52 [akrotiri/bcbAMY2J2l-000429] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3772B in 834.0155ms
+2025/07/28 19:04:52 [akrotiri/bcbAMY2J2l-000430] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3772B in 856.826334ms
+2025/07/28 19:04:53 [akrotiri/bcbAMY2J2l-000432] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3771B in 799.733792ms
+2025/07/28 19:04:53 [akrotiri/bcbAMY2J2l-000431] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3771B in 801.2685ms
+{"time":"2025-07-28T19:04:53.689969+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:53.689986+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":916}
+{"time":"2025-07-28T19:04:53.690007+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+2025/07/28 19:04:53 [akrotiri/bcbAMY2J2l-000434] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3771B in 771.571ms
+2025/07/28 19:04:53 [akrotiri/bcbAMY2J2l-000433] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3771B in 779.733709ms
+{"time":"2025-07-28T19:04:53.791685+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:53.79169+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":101}
+{"time":"2025-07-28T19:04:53.791968+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:53.792024+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:53.792049+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:53.792976+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:53.80164+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":9}
+{"time":"2025-07-28T19:04:53.801649+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:53.801657+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20011,"unique_prefixes":3507,"success":3507,"duration_ms":1134}
+{"time":"2025-07-28T19:04:53.802023+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:53.802033+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:53.802048+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:53.802168+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:53.802179+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:53.802184+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:53.809242+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:53.861016+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":58}
+{"time":"2025-07-28T19:04:53.861031+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:53.861418+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:53.861427+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:53.861431+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:53.861987+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:53.862015+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:53.862034+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:53.862238+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:53.913884+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:54.142323+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"102.67.56.1","peer_asn":"328474"}
+2025/07/28 19:04:54 [akrotiri/bcbAMY2J2l-000435] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3773B in 803.994333ms
+2025/07/28 19:04:54 [akrotiri/bcbAMY2J2l-000436] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3773B in 797.963458ms
+{"time":"2025-07-28T19:04:54.749153+02:00","level":"INFO","msg":"Stream statistics","source":"streamer.go:271","func":"streamer.(*Streamer).logMetrics","uptime":150000204750,"total_messages":954539,"total_bytes":715423088,"total_mb":"682.28","messages_per_sec":"6150.52","bits_per_sec":"37173721","mbps":"37.17","total_dropped":123924}
+{"time":"2025-07-28T19:04:54.74919+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.ASHandler","index":0,"queue_len":29037,"queue_cap":100000,"processed":918329,"dropped":0,"avg_time":121066,"min_time":0,"max_time":2311683250}
+{"time":"2025-07-28T19:04:54.749326+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeerHandler","index":1,"queue_len":3286,"queue_cap":100000,"processed":944080,"dropped":0,"avg_time":63917,"min_time":0,"max_time":1811217458}
+{"time":"2025-07-28T19:04:54.749343+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PrefixHandler","index":2,"queue_len":99137,"queue_cap":100000,"processed":724305,"dropped":123924,"avg_time":178031,"min_time":0,"max_time":2258306666}
+{"time":"2025-07-28T19:04:54.749452+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeeringHandler","index":3,"queue_len":0,"queue_cap":100000,"processed":947367,"dropped":0,"avg_time":1541,"min_time":0,"max_time":16413542}
+2025/07/28 19:04:54 [akrotiri/bcbAMY2J2l-000437] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3773B in 793.444583ms
+2025/07/28 19:04:54 [akrotiri/bcbAMY2J2l-000438] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3773B in 799.480292ms
+2025/07/28 19:04:55 [akrotiri/bcbAMY2J2l-000439] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3774B in 799.997375ms
+2025/07/28 19:04:55 [akrotiri/bcbAMY2J2l-000440] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3774B in 797.722292ms
+{"time":"2025-07-28T19:04:55.520297+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1658}
+{"time":"2025-07-28T19:04:55.520306+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:55.520331+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:55.601914+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:55.601963+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":81}
+{"time":"2025-07-28T19:04:55.601988+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:55.65725+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":55}
+{"time":"2025-07-28T19:04:55.657291+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:55.658517+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:55.664486+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":7}
+{"time":"2025-07-28T19:04:55.664523+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:55.67661+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":12}
+{"time":"2025-07-28T19:04:55.676628+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20008,"unique_prefixes":7638,"success":7638,"duration_ms":1874}
+{"time":"2025-07-28T19:04:55.676644+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:55.677184+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:55.677211+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:55.677214+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:55.681534+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:55.72503+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":47}
+{"time":"2025-07-28T19:04:55.725054+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:55.725724+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:55.725734+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:55.725738+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:55.725967+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:55.725985+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:55.726002+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:55.726775+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:55 [akrotiri/bcbAMY2J2l-000441] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3770B in 781.342625ms
+{"time":"2025-07-28T19:04:55.766554+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:12f8::221:238","peer_asn":"262317"}
+2025/07/28 19:04:55 [akrotiri/bcbAMY2J2l-000442] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3770B in 769.627834ms
+2025/07/28 19:04:56 [akrotiri/bcbAMY2J2l-000443] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3770B in 765.716042ms
+2025/07/28 19:04:56 [akrotiri/bcbAMY2J2l-000444] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3770B in 802.845417ms
+{"time":"2025-07-28T19:04:56.55576+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:56 [akrotiri/bcbAMY2J2l-000445] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3773B in 763.641792ms
+2025/07/28 19:04:56 [akrotiri/bcbAMY2J2l-000446] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3773B in 773.407208ms
+{"time":"2025-07-28T19:04:56.887217+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:56.887212+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1161}
+{"time":"2025-07-28T19:04:56.887282+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:56.894192+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":6}
+{"time":"2025-07-28T19:04:56.894205+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:56.894226+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:57.010951+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":116}
+{"time":"2025-07-28T19:04:57.011571+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:57.012498+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:57.024222+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":12}
+{"time":"2025-07-28T19:04:57.024255+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:57.085675+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":61}
+{"time":"2025-07-28T19:04:57.08569+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20009,"unique_prefixes":4624,"success":4624,"duration_ms":1408}
+{"time":"2025-07-28T19:04:57.085734+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:57.090227+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":4}
+{"time":"2025-07-28T19:04:57.09024+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:57.090263+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:57.098424+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:57.148964+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":58}
+{"time":"2025-07-28T19:04:57.148996+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:57.150862+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:57.15262+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":3}
+{"time":"2025-07-28T19:04:57.152631+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:57.152654+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+2025/07/28 19:04:57 [akrotiri/bcbAMY2J2l-000447] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3769B in 746.378583ms
+2025/07/28 19:04:57 [akrotiri/bcbAMY2J2l-000448] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3769B in 749.734083ms
+2025/07/28 19:04:57 [akrotiri/bcbAMY2J2l-000449] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3767B in 751.793333ms
+2025/07/28 19:04:57 [akrotiri/bcbAMY2J2l-000450] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3767B in 767.75075ms
+2025/07/28 19:04:58 [akrotiri/bcbAMY2J2l-000451] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3767B in 747.345667ms
+2025/07/28 19:04:58 [akrotiri/bcbAMY2J2l-000452] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3767B in 738.283208ms
+{"time":"2025-07-28T19:04:58.680488+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1527}
+{"time":"2025-07-28T19:04:58.680508+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:58.680551+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:58.731606+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":51}
+{"time":"2025-07-28T19:04:58.731676+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:58.733337+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:58.736518+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":4}
+{"time":"2025-07-28T19:04:58.736531+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:58.736536+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:58.737198+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:58.737212+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:58.737231+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:04:58 [akrotiri/bcbAMY2J2l-000453] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3768B in 752.557708ms
+{"time":"2025-07-28T19:04:58.74782+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:b18:10::3","peer_asn":"47787"}
+{"time":"2025-07-28T19:04:58.752809+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:58.752826+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":15}
+{"time":"2025-07-28T19:04:58.752853+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":8482,"success":8482,"duration_ms":1665}
+{"time":"2025-07-28T19:04:58.759786+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+2025/07/28 19:04:58 [akrotiri/bcbAMY2J2l-000454] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3767B in 751.993917ms
+{"time":"2025-07-28T19:04:58.796519+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:58.796944+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:58.797091+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:58.797141+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:58.797259+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":43}
+{"time":"2025-07-28T19:04:58.799352+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:59.114424+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:04:59 [akrotiri/bcbAMY2J2l-000455] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3769B in 779.897334ms
+2025/07/28 19:04:59 [akrotiri/bcbAMY2J2l-000456] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3769B in 804.527584ms
+{"time":"2025-07-28T19:04:59.420457+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"103.200.113.1","peer_asn":"131477"}
+{"time":"2025-07-28T19:04:59.562948+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"2400:c3e0::2","peer_asn":"142271"}
+{"time":"2025-07-28T19:04:59.786648+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":989}
+{"time":"2025-07-28T19:04:59.786669+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:59.786678+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:59.792086+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":5}
+{"time":"2025-07-28T19:04:59.792101+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:59.792127+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:04:59 [akrotiri/bcbAMY2J2l-000457] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3770B in 795.985583ms
+2025/07/28 19:04:59 [akrotiri/bcbAMY2J2l-000458] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3770B in 789.535958ms
+{"time":"2025-07-28T19:04:59.820157+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:04:59.820157+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":28}
+{"time":"2025-07-28T19:04:59.821586+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:59.824007+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+{"time":"2025-07-28T19:04:59.824036+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:04:59.829879+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":5}
+{"time":"2025-07-28T19:04:59.829891+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:59.829892+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20056,"unique_prefixes":6202,"success":6202,"duration_ms":1075}
+{"time":"2025-07-28T19:04:59.830566+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:59.830574+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:59.830577+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:59.830817+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:04:59.830842+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:59.830865+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:59.839822+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:59.859979+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":29}
+{"time":"2025-07-28T19:04:59.859992+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:59.860131+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:59.860138+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:59.860142+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:59.860586+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:04:59.860609+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:04:59.860631+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:04:59.861364+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:00 [akrotiri/bcbAMY2J2l-000460] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3767B in 798.814625ms
+2025/07/28 19:05:00 [akrotiri/bcbAMY2J2l-000459] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3767B in 814.31375ms
+2025/07/28 19:05:00 [akrotiri/bcbAMY2J2l-000461] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3767B in 827.383125ms
+2025/07/28 19:05:00 [akrotiri/bcbAMY2J2l-000462] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3767B in 832.110541ms
+{"time":"2025-07-28T19:05:01.258888+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1398}
+{"time":"2025-07-28T19:05:01.258908+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:01.258934+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:01.267013+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":8}
+{"time":"2025-07-28T19:05:01.267028+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:01.26704+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:01.348406+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":81}
+{"time":"2025-07-28T19:05:01.348443+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:01.349815+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:01.362251+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":13}
+{"time":"2025-07-28T19:05:01.36227+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20512,"unique_prefixes":9772,"success":9772,"duration_ms":1531}
+{"time":"2025-07-28T19:05:01.362273+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:01.362984+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:01.362995+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:01.363+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:01.363685+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:01.363698+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:01.363736+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:05:01 [akrotiri/bcbAMY2J2l-000463] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3768B in 863.342041ms
+{"time":"2025-07-28T19:05:01.370526+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+2025/07/28 19:05:01 [akrotiri/bcbAMY2J2l-000464] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3768B in 856.822625ms
+{"time":"2025-07-28T19:05:01.391641+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":27}
+{"time":"2025-07-28T19:05:01.391655+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:01.392172+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:01.392182+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:01.392186+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:01.392752+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:01.392818+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:01.392841+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:01.392959+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:01.420226+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:05:01 [akrotiri/bcbAMY2J2l-000465] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3770B in 807.067625ms
+2025/07/28 19:05:01 [akrotiri/bcbAMY2J2l-000466] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3770B in 813.306ms
+2025/07/28 19:05:02 [akrotiri/bcbAMY2J2l-000467] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3770B in 876.206917ms
+2025/07/28 19:05:02 [akrotiri/bcbAMY2J2l-000468] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3770B in 867.692375ms
+{"time":"2025-07-28T19:05:02.534307+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1141}
+{"time":"2025-07-28T19:05:02.534326+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:02.534343+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:02.631842+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:02.631851+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":97}
+{"time":"2025-07-28T19:05:02.631947+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:02.680898+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":49}
+{"time":"2025-07-28T19:05:02.680914+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:02.682211+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:02.687929+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":7}
+{"time":"2025-07-28T19:05:02.687942+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:02.693631+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":5}
+{"time":"2025-07-28T19:05:02.693646+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20063,"unique_prefixes":6588,"success":6588,"duration_ms":1329}
+{"time":"2025-07-28T19:05:02.693654+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:02.697141+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":3}
+{"time":"2025-07-28T19:05:02.697154+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:02.697163+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:02.69987+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:02.743833+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":46}
+{"time":"2025-07-28T19:05:02.743855+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:02.745177+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:02.748712+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":4}
+{"time":"2025-07-28T19:05:02.748726+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:02.74875+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+2025/07/28 19:05:02 [akrotiri/bcbAMY2J2l-000469] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3768B in 839.455459ms
+2025/07/28 19:05:02 [akrotiri/bcbAMY2J2l-000470] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3768B in 825.521291ms
+2025/07/28 19:05:03 [akrotiri/bcbAMY2J2l-000472] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3769B in 795.552208ms
+2025/07/28 19:05:03 [akrotiri/bcbAMY2J2l-000471] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3769B in 810.442958ms
+{"time":"2025-07-28T19:05:03.742578+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":993}
+{"time":"2025-07-28T19:05:03.7426+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:03.742598+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:03.787358+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"198.32.160.113","peer_asn":"15547"}
+{"time":"2025-07-28T19:05:03.789092+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":46}
+{"time":"2025-07-28T19:05:03.789121+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.794304+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":5}
+{"time":"2025-07-28T19:05:03.794323+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.794322+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:03.819589+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":25}
+{"time":"2025-07-28T19:05:03.819608+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20026,"unique_prefixes":5520,"success":5520,"duration_ms":1124}
+{"time":"2025-07-28T19:05:03.819626+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.822247+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":2}
+{"time":"2025-07-28T19:05:03.822261+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.822273+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.822986+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:03.822993+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.822996+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.823256+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:03.823263+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.823267+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.823532+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:03.823537+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.82354+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.823601+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:03.823606+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.823609+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.824125+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:03.824131+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.824134+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:03.828564+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:03.829186+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":5}
+{"time":"2025-07-28T19:05:03.8292+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:03.829208+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:05:03 [akrotiri/bcbAMY2J2l-000474] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3766B in 870.247625ms
+2025/07/28 19:05:03 [akrotiri/bcbAMY2J2l-000473] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3766B in 882.467791ms
+{"time":"2025-07-28T19:05:04.118696+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:04 [akrotiri/bcbAMY2J2l-000475] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3768B in 812.269917ms
+2025/07/28 19:05:04 [akrotiri/bcbAMY2J2l-000476] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3768B in 801.896083ms
+{"time":"2025-07-28T19:05:04.422036+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:04.750235+02:00","level":"INFO","msg":"Stream statistics","source":"streamer.go:271","func":"streamer.(*Streamer).logMetrics","uptime":160001230500,"total_messages":996764,"total_bytes":745969411,"total_mb":"711.41","messages_per_sec":"5839.24","bits_per_sec":"35091787","mbps":"35.09","total_dropped":128275}
+{"time":"2025-07-28T19:05:04.750265+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.ASHandler","index":0,"queue_len":7527,"queue_cap":100000,"processed":981604,"dropped":0,"avg_time":123373,"min_time":0,"max_time":2311683250}
+{"time":"2025-07-28T19:05:04.750272+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeerHandler","index":1,"queue_len":5051,"queue_cap":100000,"processed":984080,"dropped":0,"avg_time":65596,"min_time":0,"max_time":1811217458}
+{"time":"2025-07-28T19:05:04.750276+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PrefixHandler","index":2,"queue_len":94571,"queue_cap":100000,"processed":766285,"dropped":128275,"avg_time":181348,"min_time":0,"max_time":2258306666}
+{"time":"2025-07-28T19:05:04.75028+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeeringHandler","index":3,"queue_len":3,"queue_cap":100000,"processed":989128,"dropped":0,"avg_time":1553,"min_time":0,"max_time":16413542}
+2025/07/28 19:05:04 [akrotiri/bcbAMY2J2l-000478] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3772B in 829.906167ms
+2025/07/28 19:05:04 [akrotiri/bcbAMY2J2l-000477] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3772B in 851.271292ms
+{"time":"2025-07-28T19:05:05.085508+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1256}
+{"time":"2025-07-28T19:05:05.085532+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:05.085534+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:05.183753+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:05.183757+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":98}
+{"time":"2025-07-28T19:05:05.183781+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:05.223694+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":39}
+{"time":"2025-07-28T19:05:05.223866+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:05.227862+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":3}
+{"time":"2025-07-28T19:05:05.228835+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:05.228845+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:05.293673+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:05.293691+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":64}
+{"time":"2025-07-28T19:05:05.294951+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:05.310608+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:05.310619+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":16}
+{"time":"2025-07-28T19:05:05.310642+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20003,"unique_prefixes":7353,"success":7353,"duration_ms":1489}
+{"time":"2025-07-28T19:05:05.310776+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:05.310792+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:05.310802+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:05.318313+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:05.331737+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:05.331734+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":20}
+{"time":"2025-07-28T19:05:05.332098+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:05.33211+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:05.332115+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:05:05 [akrotiri/bcbAMY2J2l-000479] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3766B in 838.740292ms
+2025/07/28 19:05:05 [akrotiri/bcbAMY2J2l-000480] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3766B in 837.840334ms
+{"time":"2025-07-28T19:05:05.553645+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:05:05 [akrotiri/bcbAMY2J2l-000482] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3769B in 833.506625ms
+2025/07/28 19:05:05 [akrotiri/bcbAMY2J2l-000481] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3769B in 862.047167ms
+{"time":"2025-07-28T19:05:06.00495+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:06.326763+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":994}
+{"time":"2025-07-28T19:05:06.326782+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:06.326787+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:06.354878+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:06.354894+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":28}
+{"time":"2025-07-28T19:05:06.354916+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20021,"unique_prefixes":5871,"success":5871,"duration_ms":1042}
+{"time":"2025-07-28T19:05:06.355499+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:06.355512+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:06.35553+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:06.360477+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:06.360486+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":4}
+{"time":"2025-07-28T19:05:06.373563+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+2025/07/28 19:05:06 [akrotiri/bcbAMY2J2l-000483] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3770B in 871.968333ms
+{"time":"2025-07-28T19:05:06.405612+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:06.406065+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":45}
+{"time":"2025-07-28T19:05:06.406195+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:06.408022+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:06.408236+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:05:06 [akrotiri/bcbAMY2J2l-000484] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3767B in 880.531459ms
+{"time":"2025-07-28T19:05:06.557652+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:06.64027+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:de8:4::1:8403:1","peer_asn":"18403"}
+{"time":"2025-07-28T19:05:06.723965+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:05:07 [akrotiri/bcbAMY2J2l-000485] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3776B in 978.3245ms
+2025/07/28 19:05:07 [akrotiri/bcbAMY2J2l-000486] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3776B in 964.24975ms
+{"time":"2025-07-28T19:05:07.751071+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:07.751071+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1344}
+{"time":"2025-07-28T19:05:07.75141+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:07.751838+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:07.751853+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:07.751862+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:07.816817+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":64}
+{"time":"2025-07-28T19:05:07.817029+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:07.818197+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:07.821304+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":4}
+{"time":"2025-07-28T19:05:07.821342+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:07.828076+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":6}
+{"time":"2025-07-28T19:05:07.828099+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":8990,"success":8990,"duration_ms":1470}
+{"time":"2025-07-28T19:05:07.828111+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:07.828399+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:07.828413+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:07.828419+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:07.828596+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:07.828613+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:07.828624+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:07.841082+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+2025/07/28 19:05:07 [akrotiri/bcbAMY2J2l-000487] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3773B in 991.765125ms
+2025/07/28 19:05:07 [akrotiri/bcbAMY2J2l-000488] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3773B in 982.675833ms
+{"time":"2025-07-28T19:05:07.977573+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":148}
+{"time":"2025-07-28T19:05:07.977584+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:07.978879+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:05:07.978892+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:07.978999+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:07.979542+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:08 [akrotiri/bcbAMY2J2l-000490] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3773B in 975.683041ms
+2025/07/28 19:05:08 [akrotiri/bcbAMY2J2l-000489] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3774B in 1.040663416s
+{"time":"2025-07-28T19:05:08.43137+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:05:08 [akrotiri/bcbAMY2J2l-000491] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3776B in 1.04019375s
+2025/07/28 19:05:08 [akrotiri/bcbAMY2J2l-000492] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3776B in 1.031590042s
+2025/07/28 19:05:09 [akrotiri/bcbAMY2J2l-000493] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3775B in 968.653666ms
+2025/07/28 19:05:09 [akrotiri/bcbAMY2J2l-000494] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3775B in 969.98025ms
+{"time":"2025-07-28T19:05:09.406139+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1427}
+{"time":"2025-07-28T19:05:09.406159+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:09.40618+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:09.407363+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:05:09.407377+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:09.407383+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:09 [akrotiri/bcbAMY2J2l-000495] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3777B in 879.011916ms
+2025/07/28 19:05:09 [akrotiri/bcbAMY2J2l-000496] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3777B in 872.03225ms
+{"time":"2025-07-28T19:05:09.464213+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":56}
+{"time":"2025-07-28T19:05:09.46425+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:09.466286+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:09.469255+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":5}
+{"time":"2025-07-28T19:05:09.469277+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:09.479186+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":9}
+{"time":"2025-07-28T19:05:09.479202+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20003,"unique_prefixes":9733,"success":9733,"duration_ms":1649}
+{"time":"2025-07-28T19:05:09.479228+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:09.479698+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:09.479709+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:09.479727+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:09.490406+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:09.501998+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":22}
+{"time":"2025-07-28T19:05:09.502013+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:09.502557+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:09.502566+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:09.502571+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:09.502972+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:09.502998+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:09.503022+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:09.503436+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:09.532093+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:05:09 [akrotiri/bcbAMY2J2l-000497] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3776B in 901.920958ms
+2025/07/28 19:05:09 [akrotiri/bcbAMY2J2l-000498] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3776B in 875.256209ms
+{"time":"2025-07-28T19:05:10.382255+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:43f8:6d0::60","peer_asn":"37468"}
+2025/07/28 19:05:10 [akrotiri/bcbAMY2J2l-000499] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3776B in 891.226667ms
+2025/07/28 19:05:10 [akrotiri/bcbAMY2J2l-000500] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3776B in 891.901083ms
+{"time":"2025-07-28T19:05:10.954514+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1451}
+{"time":"2025-07-28T19:05:10.954533+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:10.954555+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:10.955215+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:10.955231+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:10.955237+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:05:10 [akrotiri/bcbAMY2J2l-000502] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3777B in 908.284625ms
+2025/07/28 19:05:10 [akrotiri/bcbAMY2J2l-000501] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3777B in 932.042041ms
+{"time":"2025-07-28T19:05:11.023048+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":67}
+{"time":"2025-07-28T19:05:11.023059+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:11.024411+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:11.025927+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":2}
+{"time":"2025-07-28T19:05:11.025984+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:11.144693+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":118}
+{"time":"2025-07-28T19:05:11.144712+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20001,"unique_prefixes":9355,"success":9355,"duration_ms":1663}
+{"time":"2025-07-28T19:05:11.144727+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:11.145578+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:11.145591+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:11.145595+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:11.145707+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:11.145845+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:11.145893+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:11.158941+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:11.253517+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":107}
+{"time":"2025-07-28T19:05:11.254859+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:11.254865+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:11.345297+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:11.345344+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":90}
+{"time":"2025-07-28T19:05:11.346778+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:11.346794+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:05:11.346812+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:11.351534+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:05:11 [akrotiri/bcbAMY2J2l-000503] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3772B in 906.031875ms
+2025/07/28 19:05:11 [akrotiri/bcbAMY2J2l-000504] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3773B in 922.998625ms
+{"time":"2025-07-28T19:05:11.492972+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:11.803416+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"193.107.13.3","peer_asn":"47787"}
+2025/07/28 19:05:12 [akrotiri/bcbAMY2J2l-000505] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3776B in 971.944208ms
+2025/07/28 19:05:12 [akrotiri/bcbAMY2J2l-000506] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3776B in 947.740042ms
+2025/07/28 19:05:12 [akrotiri/bcbAMY2J2l-000507] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3775B in 921.753958ms
+2025/07/28 19:05:12 [akrotiri/bcbAMY2J2l-000508] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3775B in 914.019958ms
+{"time":"2025-07-28T19:05:12.984183+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"196.60.8.60","peer_asn":"37468"}
+{"time":"2025-07-28T19:05:13.258056+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1911}
+{"time":"2025-07-28T19:05:13.258075+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:13.258089+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:13.259464+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:05:13.259477+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:13.259481+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:13.261212+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:13.261238+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:05:13.261262+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:13.266374+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:13.26812+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":5}
+{"time":"2025-07-28T19:05:13.2728+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:13.326821+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:13.326851+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":60}
+{"time":"2025-07-28T19:05:13.328918+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:13.336242+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:13.336605+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:13.339156+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":9}
+{"time":"2025-07-28T19:05:13.339167+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20061,"unique_prefixes":7696,"success":7696,"duration_ms":2190}
+{"time":"2025-07-28T19:05:13.339284+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:13.340186+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:13.340206+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:13.340366+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":2}
+{"time":"2025-07-28T19:05:13.355458+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:13.418829+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":79}
+{"time":"2025-07-28T19:05:13.418853+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:13.419424+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:13.419436+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:13.419441+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:13.420056+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:13.420082+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:13.4201+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:13.421091+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:13 [akrotiri/bcbAMY2J2l-000509] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3773B in 1.093928042s
+2025/07/28 19:05:13 [akrotiri/bcbAMY2J2l-000511] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3773B in 1.086461958s
+2025/07/28 19:05:13 [akrotiri/bcbAMY2J2l-000510] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3773B in 1.08876425s
+2025/07/28 19:05:13 [akrotiri/bcbAMY2J2l-000512] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3773B in 1.114243375s
+2025/07/28 19:05:14 [akrotiri/bcbAMY2J2l-000513] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3773B in 1.108768333s
+2025/07/28 19:05:14 [akrotiri/bcbAMY2J2l-000514] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3773B in 1.115006125s
+{"time":"2025-07-28T19:05:14.633859+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:05:14 [akrotiri/bcbAMY2J2l-000515] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3774B in 996.544416ms
+2025/07/28 19:05:14 [akrotiri/bcbAMY2J2l-000516] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3775B in 1.002078709s
+{"time":"2025-07-28T19:05:14.74909+02:00","level":"INFO","msg":"Stream statistics","source":"streamer.go:271","func":"streamer.(*Streamer).logMetrics","uptime":170000012834,"total_messages":1062502,"total_bytes":794795839,"total_mb":"757.98","messages_per_sec":"5943.31","bits_per_sec":"35498841","mbps":"35.50","total_dropped":138693}
+{"time":"2025-07-28T19:05:14.749111+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.ASHandler","index":0,"queue_len":9066,"queue_cap":100000,"processed":1045303,"dropped":0,"avg_time":123824,"min_time":0,"max_time":2311683250}
+{"time":"2025-07-28T19:05:14.749117+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeerHandler","index":1,"queue_len":290,"queue_cap":100000,"processed":1054080,"dropped":0,"avg_time":68115,"min_time":0,"max_time":1917211625}
+{"time":"2025-07-28T19:05:14.749121+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PrefixHandler","index":2,"queue_len":97199,"queue_cap":100000,"processed":818479,"dropped":138693,"avg_time":181410,"min_time":0,"max_time":2258306666}
+{"time":"2025-07-28T19:05:14.749125+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeeringHandler","index":3,"queue_len":0,"queue_cap":100000,"processed":1054372,"dropped":0,"avg_time":1560,"min_time":0,"max_time":16413542}
+{"time":"2025-07-28T19:05:14.779609+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1359}
+{"time":"2025-07-28T19:05:14.779628+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:14.779633+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:14.784424+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":4}
+{"time":"2025-07-28T19:05:14.784436+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:14.784441+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:14.784737+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:14.784752+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:14.784771+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:14.818674+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":33}
+{"time":"2025-07-28T19:05:14.818708+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:14.82115+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:14.924399+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":105}
+{"time":"2025-07-28T19:05:14.924429+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:14.927819+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:14.927866+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":3}
+{"time":"2025-07-28T19:05:14.927893+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":7087,"success":7087,"duration_ms":1585}
+{"time":"2025-07-28T19:05:14.928488+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:14.928513+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:14.928529+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:14.942862+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:14.973394+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":44}
+{"time":"2025-07-28T19:05:14.973405+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:14.974006+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:14.974027+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:14.974056+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:14.975617+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:15 [akrotiri/bcbAMY2J2l-000517] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3772B in 978.858834ms
+2025/07/28 19:05:15 [akrotiri/bcbAMY2J2l-000518] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3772B in 948.800041ms
+2025/07/28 19:05:15 [akrotiri/bcbAMY2J2l-000520] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3772B in 957.832542ms
+2025/07/28 19:05:15 [akrotiri/bcbAMY2J2l-000519] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3772B in 992.629ms
+2025/07/28 19:05:16 [akrotiri/bcbAMY2J2l-000522] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3772B in 983.227833ms
+2025/07/28 19:05:16 [akrotiri/bcbAMY2J2l-000521] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3773B in 1.008682625s
+{"time":"2025-07-28T19:05:16.189446+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1215}
+{"time":"2025-07-28T19:05:16.189468+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:16.189467+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:16.26526+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":75}
+{"time":"2025-07-28T19:05:16.265313+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:16.265277+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:16.318891+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":53}
+{"time":"2025-07-28T19:05:16.318949+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:16.320287+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:16.325782+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":6}
+{"time":"2025-07-28T19:05:16.325792+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:16.325804+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":7531,"success":7531,"duration_ms":1395}
+{"time":"2025-07-28T19:05:16.326287+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:16.326297+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:16.326301+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:16.326577+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:16.326597+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:16.32661+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:16.334592+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:16.355932+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":29}
+{"time":"2025-07-28T19:05:16.355954+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:16.356535+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:16.356547+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:16.356551+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:16.356653+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:16.35667+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:16.356678+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:16.671381+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:16 [akrotiri/bcbAMY2J2l-000524] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3771B in 1.094025625s
+2025/07/28 19:05:16 [akrotiri/bcbAMY2J2l-000523] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3771B in 1.131702416s
+{"time":"2025-07-28T19:05:16.728854+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:16.864368+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"80.81.194.204","peer_asn":"48166"}
+{"time":"2025-07-28T19:05:16.894565+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:12f8::121","peer_asn":"42473"}
+{"time":"2025-07-28T19:05:16.90058+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"2001:12f8::121","peer_asn":"42473"}
+2025/07/28 19:05:17 [akrotiri/bcbAMY2J2l-000525] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3775B in 1.066853583s
+2025/07/28 19:05:17 [akrotiri/bcbAMY2J2l-000526] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3775B in 1.046148792s
+{"time":"2025-07-28T19:05:17.437389+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1080}
+{"time":"2025-07-28T19:05:17.437415+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:17.437421+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:17.442928+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:17.44296+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":5}
+{"time":"2025-07-28T19:05:17.443042+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":5492,"success":5492,"duration_ms":1114}
+{"time":"2025-07-28T19:05:17.443077+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:17.445103+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:17.445114+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:17.481356+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:17.515569+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:17.515586+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":72}
+{"time":"2025-07-28T19:05:17.521401+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:17.521606+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":5}
+{"time":"2025-07-28T19:05:17.526848+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:17.526889+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":5}
+{"time":"2025-07-28T19:05:17.526898+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:05:17 [akrotiri/bcbAMY2J2l-000527] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3770B in 1.078901125s
+2025/07/28 19:05:17 [akrotiri/bcbAMY2J2l-000528] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3770B in 1.075309917s
+{"time":"2025-07-28T19:05:17.802056+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:18 [akrotiri/bcbAMY2J2l-000530] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3773B in 1.040894208s
+2025/07/28 19:05:18 [akrotiri/bcbAMY2J2l-000529] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3773B in 1.086979209s
+2025/07/28 19:05:18 [akrotiri/bcbAMY2J2l-000531] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3772B in 1.060909209s
+2025/07/28 19:05:18 [akrotiri/bcbAMY2J2l-000532] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3772B in 1.049015s
+{"time":"2025-07-28T19:05:18.800815+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1273}
+{"time":"2025-07-28T19:05:18.800834+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:18.800839+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:18.806027+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:18.806053+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":5}
+{"time":"2025-07-28T19:05:18.806085+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":6184,"success":6184,"duration_ms":1341}
+{"time":"2025-07-28T19:05:18.806414+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:18.806426+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:18.806442+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:18.816373+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:18.84312+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":36}
+{"time":"2025-07-28T19:05:18.843151+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:18.843614+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:18.843626+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:18.843631+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:18.844567+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:18.844581+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:18.844594+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:18.844678+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:19.0144+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:05:19 [akrotiri/bcbAMY2J2l-000533] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3774B in 1.004313875s
+2025/07/28 19:05:19 [akrotiri/bcbAMY2J2l-000534] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3774B in 1.03149s
+2025/07/28 19:05:19 [akrotiri/bcbAMY2J2l-000536] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3774B in 981.936042ms
+2025/07/28 19:05:19 [akrotiri/bcbAMY2J2l-000535] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3775B in 1.002930917s
+{"time":"2025-07-28T19:05:19.794488+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":949}
+{"time":"2025-07-28T19:05:19.794509+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:19.794494+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.801973+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":7}
+{"time":"2025-07-28T19:05:19.801993+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.801998+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.805058+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:19.805077+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":3}
+{"time":"2025-07-28T19:05:19.805135+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.84758+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:19.847595+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":42}
+{"time":"2025-07-28T19:05:19.853531+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:19.853636+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":5}
+{"time":"2025-07-28T19:05:19.948759+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.948828+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":95}
+{"time":"2025-07-28T19:05:19.948852+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20303,"unique_prefixes":3923,"success":3923,"duration_ms":1138}
+{"time":"2025-07-28T19:05:19.94898+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.948991+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.948995+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.949136+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.949147+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.949207+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.94967+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.94968+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.949684+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.950672+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.950679+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.950683+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.95121+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.951221+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.951225+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.951783+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.951791+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.951795+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.953604+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.953684+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.953694+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.954389+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.954399+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.954403+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.954689+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.954698+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.954701+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.955232+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.955237+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.955241+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.9556+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.955609+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.955613+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.955946+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.955953+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.955957+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.956251+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.956258+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.956262+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.956661+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.956668+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.956672+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.95698+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.956987+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.95699+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.957529+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.957535+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.957539+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.957838+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.957845+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.95785+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.957975+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.95798+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.957983+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.958536+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.958543+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.958546+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.958889+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.958895+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.958898+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.959848+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.959856+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.959859+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.95994+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.959945+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.959949+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.960407+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.960414+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.960418+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.960945+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.960951+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.960955+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.96126+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.961266+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.961269+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.961337+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.961342+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.961345+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.961466+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:19.961859+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.961866+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.96187+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.962138+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:19.962144+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:19.962163+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:20.028668+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:20 [akrotiri/bcbAMY2J2l-000538] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3770B in 977.01175ms
+2025/07/28 19:05:20 [akrotiri/bcbAMY2J2l-000537] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3771B in 1.00354575s
+2025/07/28 19:05:20 [akrotiri/bcbAMY2J2l-000540] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3772B in 1.030501625s
+2025/07/28 19:05:20 [akrotiri/bcbAMY2J2l-000539] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3772B in 1.079879833s
+{"time":"2025-07-28T19:05:21.032161+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1069}
+{"time":"2025-07-28T19:05:21.032197+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:21.032178+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.052338+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":20}
+{"time":"2025-07-28T19:05:21.052442+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:21.052491+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.085942+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:05:21 [akrotiri/bcbAMY2J2l-000541] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3775B in 1.051507417s
+{"time":"2025-07-28T19:05:21.167814+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":115}
+{"time":"2025-07-28T19:05:21.171183+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:21.171195+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:21.224913+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:21.225616+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":53}
+{"time":"2025-07-28T19:05:21.234673+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.235032+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":9}
+{"time":"2025-07-28T19:05:21.235054+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20009,"unique_prefixes":5271,"success":5271,"duration_ms":1281}
+{"time":"2025-07-28T19:05:21.235632+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:21.237537+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.23755+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.249081+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:21.250824+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":15}
+{"time":"2025-07-28T19:05:21.251913+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.254173+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":2}
+{"time":"2025-07-28T19:05:21.254187+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.254192+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.254329+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.254335+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.254341+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.256378+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:21.257064+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":2}
+{"time":"2025-07-28T19:05:21.257096+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:05:21 [akrotiri/bcbAMY2J2l-000542] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3769B in 1.134970084s
+{"time":"2025-07-28T19:05:21.476284+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:21 [akrotiri/bcbAMY2J2l-000544] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 200 3772B in 1.228493375s
+2025/07/28 19:05:21 [akrotiri/bcbAMY2J2l-000543] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3772B in 1.232698166s
+{"time":"2025-07-28T19:05:21.875405+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":618}
+{"time":"2025-07-28T19:05:21.875425+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.875427+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:21.876068+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.876083+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.876115+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:21.927451+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":51}
+{"time":"2025-07-28T19:05:21.92751+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:21.931978+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":4}
+{"time":"2025-07-28T19:05:21.93199+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20001,"unique_prefixes":2521,"success":2521,"duration_ms":694}
+{"time":"2025-07-28T19:05:21.932006+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.932506+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.932515+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.93252+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.932626+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.932633+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.932638+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.932723+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.93273+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.932733+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.933376+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.933385+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.93339+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.933652+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.933662+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.933666+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.934225+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.934232+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.934235+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.934717+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.934726+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.93473+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.935044+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.93505+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.935054+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.935425+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.935432+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.935435+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.935964+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.935971+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.935975+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.936461+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.93647+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.936475+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.936559+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.936565+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.93657+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.936649+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.936656+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.936659+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.937324+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.93733+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.937333+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.937635+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.937641+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.937645+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.937718+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.937726+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.93773+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.937827+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.937833+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.937837+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.938434+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.93844+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.938443+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.938522+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.938528+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.938532+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.93862+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.938626+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.938629+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.939065+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.939071+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.939075+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.939157+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.939165+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.939195+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.939609+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.939615+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.939619+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.939865+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.939871+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.939875+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.940226+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.940234+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.940238+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.940487+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.940494+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.940498+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.940717+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.940723+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.940727+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.941096+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.941102+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.941106+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.941171+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.941177+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.941181+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.94142+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.941427+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.94143+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.941991+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.941998+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.942001+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.94223+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.942237+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.942272+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.942346+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.942355+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.942359+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.94243+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.942438+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.942441+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.942507+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:21.942546+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.942553+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.942557+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.942624+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:21.942646+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:21.942666+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+2025/07/28 19:05:22 [akrotiri/bcbAMY2J2l-000546] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3770B in 1.081123209s
+{"time":"2025-07-28T19:05:22.223189+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:22 [akrotiri/bcbAMY2J2l-000545] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3773B in 1.10500875s
+{"time":"2025-07-28T19:05:22.336212+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:7f8:1::a503:1042:1","peer_asn":"31042"}
+{"time":"2025-07-28T19:05:22.515463+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:22.97043+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1027}
+{"time":"2025-07-28T19:05:22.970451+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:22.970453+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:22.970808+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:22.970824+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:22.970835+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:23.036241+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":65}
+{"time":"2025-07-28T19:05:23.036512+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:23.038336+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:23.041097+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":4}
+{"time":"2025-07-28T19:05:23.041623+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:23.046646+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.046649+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":4}
+{"time":"2025-07-28T19:05:23.046896+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":5434,"success":5434,"duration_ms":1112}
+{"time":"2025-07-28T19:05:23.047144+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:23.047155+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.047159+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.047251+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:23.047258+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.047262+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.048072+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:23.048096+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:23.048109+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.062892+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:23.079952+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":31}
+{"time":"2025-07-28T19:05:23.079972+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.080756+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:23.080771+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.080776+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.080934+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:23.080941+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.080945+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.08103+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:23.081345+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:23.081361+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:23.247185+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:23 [akrotiri/bcbAMY2J2l-000548] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57341 - 408 17B in 1.003542541s
+{"time":"2025-07-28T19:05:23.317629+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:23.396257+02:00","level":"DEBUG","msg":"System stats","source":"cli.go:40","func":"routewatch.logDebugStats","goroutines":55,"alloc_mb":273,"total_alloc_mb":5767,"sys_mb":520,"num_gc":84,"heap_alloc_mb":273,"heap_sys_mb":495,"heap_idle_mb":169,"heap_inuse_mb":326,"heap_released_mb":75,"stack_inuse_mb":4}
+2025/07/28 19:05:23 [akrotiri/bcbAMY2J2l-000550] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3772B in 1.207825125s
+2025/07/28 19:05:23 [akrotiri/bcbAMY2J2l-000547] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3772B in 1.237545709s
+2025/07/28 19:05:23 [akrotiri/bcbAMY2J2l-000549] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3772B in 1.267907042s
+2025/07/28 19:05:23 [akrotiri/bcbAMY2J2l-000551] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3774B in 1.182018958s
+2025/07/28 19:05:23 [akrotiri/bcbAMY2J2l-000552] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3774B in 1.224593708s
+{"time":"2025-07-28T19:05:24.165685+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:24.19434+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.19434+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1113}
+{"time":"2025-07-28T19:05:24.194587+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:24.195186+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:24.195203+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.195208+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.195944+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:24.195976+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:24.195991+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.2858+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:24.285815+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":89}
+{"time":"2025-07-28T19:05:24.288382+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:24.290022+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:24.290178+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":4}
+{"time":"2025-07-28T19:05:24.30068+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.30068+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":10}
+{"time":"2025-07-28T19:05:24.300849+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20001,"unique_prefixes":4740,"success":4740,"duration_ms":1249}
+{"time":"2025-07-28T19:05:24.308525+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:24.310248+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":7}
+{"time":"2025-07-28T19:05:24.310273+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.318238+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:24.348669+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":40}
+{"time":"2025-07-28T19:05:24.348704+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.349006+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:24.349021+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.349027+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.349218+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:24.349228+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.349233+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:24.349584+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:24.353872+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:24.353929+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+2025/07/28 19:05:24 [akrotiri/bcbAMY2J2l-000553] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57425 - 200 3771B in 1.30059475s
+2025/07/28 19:05:24 [akrotiri/bcbAMY2J2l-000554] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3771B in 1.201782625s
+{"time":"2025-07-28T19:05:24.685963+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:24 [akrotiri/bcbAMY2J2l-000555] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3772B in 1.214842625s
+{"time":"2025-07-28T19:05:24.749757+02:00","level":"INFO","msg":"Stream statistics","source":"streamer.go:271","func":"streamer.(*Streamer).logMetrics","uptime":180000580709,"total_messages":1116672,"total_bytes":835849057,"total_mb":"797.13","messages_per_sec":"5829.06","bits_per_sec":"34955704","mbps":"34.96","total_dropped":138693}
+{"time":"2025-07-28T19:05:24.749805+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.ASHandler","index":0,"queue_len":61,"queue_cap":100000,"processed":1108013,"dropped":0,"avg_time":125273,"min_time":0,"max_time":2311683250}
+{"time":"2025-07-28T19:05:24.749815+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeerHandler","index":1,"queue_len":0,"queue_cap":100000,"processed":1108075,"dropped":0,"avg_time":67293,"min_time":0,"max_time":1917211625}
+{"time":"2025-07-28T19:05:24.749823+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PrefixHandler","index":2,"queue_len":77375,"queue_cap":100000,"processed":892006,"dropped":138693,"avg_time":178735,"min_time":0,"max_time":2258306666}
+{"time":"2025-07-28T19:05:24.749835+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeeringHandler","index":3,"queue_len":0,"queue_cap":100000,"processed":1108075,"dropped":0,"avg_time":1587,"min_time":0,"max_time":16413542}
+2025/07/28 19:05:24 [akrotiri/bcbAMY2J2l-000556] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3772B in 1.217097417s
+2025/07/28 19:05:24 [akrotiri/bcbAMY2J2l-000557] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3774B in 1.184537083s
+2025/07/28 19:05:25 [akrotiri/bcbAMY2J2l-000558] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3773B in 1.217948292s
+2025/07/28 19:05:25 [akrotiri/bcbAMY2J2l-000559] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57425 - 200 3773B in 1.127099833s
+2025/07/28 19:05:25 [akrotiri/bcbAMY2J2l-000560] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3773B in 1.221673291s
+2025/07/28 19:05:25 [akrotiri/bcbAMY2J2l-000561] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3773B in 1.18093425s
+{"time":"2025-07-28T19:05:26.015599+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:26.015689+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1665}
+{"time":"2025-07-28T19:05:26.015742+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:26.016072+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:26.016083+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:26.016088+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:26.016965+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:26.018776+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:26.018795+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:26.050849+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:26.050891+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":33}
+{"time":"2025-07-28T19:05:26.052899+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:26.056345+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:26.056347+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":5}
+{"time":"2025-07-28T19:05:26.056371+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20001,"unique_prefixes":9150,"success":9150,"duration_ms":1753}
+{"time":"2025-07-28T19:05:26.056728+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:26.05684+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:26.056851+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:26.065319+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:26.112915+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":56}
+{"time":"2025-07-28T19:05:26.112963+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:26.113684+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:26.113695+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:26.1137+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:26.113832+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:26.113869+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:26.11391+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:26.271215+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+2025/07/28 19:05:26 [akrotiri/bcbAMY2J2l-000563] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 200 3773B in 1.243165958s
+2025/07/28 19:05:26 [akrotiri/bcbAMY2J2l-000562] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 200 3773B in 1.27942025s
+{"time":"2025-07-28T19:05:26.573706+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+2025/07/28 19:05:26 [akrotiri/bcbAMY2J2l-000564] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 200 3776B in 1.278715208s
+2025/07/28 19:05:26 [akrotiri/bcbAMY2J2l-000565] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57425 - 200 3777B in 1.2944385s
+2025/07/28 19:05:27 [akrotiri/bcbAMY2J2l-000567] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 200 3775B in 1.339044041s
+2025/07/28 19:05:27 [akrotiri/bcbAMY2J2l-000566] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 200 3775B in 1.414130084s
+{"time":"2025-07-28T19:05:27.642262+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:27 [akrotiri/bcbAMY2J2l-000569] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:56697 - 408 17B in 1.002236833s
+{"time":"2025-07-28T19:05:27.642575+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:27 [akrotiri/bcbAMY2J2l-000568] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57347 - 408 17B in 1.002518041s
+{"time":"2025-07-28T19:05:27.824989+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1711}
+{"time":"2025-07-28T19:05:27.825027+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:27.825036+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:27.83756+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:27.838206+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:27.842521+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:27.842795+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":12}
+{"time":"2025-07-28T19:05:27.842806+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20019,"unique_prefixes":6762,"success":6762,"duration_ms":1784}
+{"time":"2025-07-28T19:05:27.845306+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:27.845324+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:27.845339+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":4}
+{"time":"2025-07-28T19:05:27.848779+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:27.853387+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:28.015137+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":172}
+{"time":"2025-07-28T19:05:28.016156+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.016957+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:28.016971+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.016976+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.017082+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:28.017089+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.017092+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.017229+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:28.017235+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.017238+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.01732+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:28.017325+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.017329+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.01757+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:28.018372+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:05:28.018382+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.018387+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.018686+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:28.018693+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.018698+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.018785+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:28.018794+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:28.018799+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:28.143943+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:28 [akrotiri/bcbAMY2J2l-000570] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57425 - 408 17B in 1.0018105s
+{"time":"2025-07-28T19:05:28.144369+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:28 [akrotiri/bcbAMY2J2l-000571] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57346 - 408 17B in 1.002080125s
+{"time":"2025-07-28T19:05:28.219005+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"217.29.66.232","peer_asn":"54104"}
+{"time":"2025-07-28T19:05:28.223088+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"195.208.208.187","peer_asn":"9002"}
+{"time":"2025-07-28T19:05:28.22797+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":209}
+{"time":"2025-07-28T19:05:28.229318+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:28.349134+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:28.642779+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:28 [akrotiri/bcbAMY2J2l-000572] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57344 - 408 17B in 1.000669541s
+{"time":"2025-07-28T19:05:28.643482+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:28 [akrotiri/bcbAMY2J2l-000575] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57451 - 408 17B in 1.000167208s
+{"time":"2025-07-28T19:05:28.643551+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:28 [akrotiri/bcbAMY2J2l-000573] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57339 - 408 17B in 1.001364083s
+{"time":"2025-07-28T19:05:28.643622+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:28 [akrotiri/bcbAMY2J2l-000574] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57452 - 408 17B in 1.000473292s
+{"time":"2025-07-28T19:05:29.150211+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:29 [akrotiri/bcbAMY2J2l-000576] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57454 - 408 17B in 1.005714s
+{"time":"2025-07-28T19:05:29.152446+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:29 [akrotiri/bcbAMY2J2l-000577] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57455 - 408 17B in 1.005499041s
+{"time":"2025-07-28T19:05:29.64375+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:29 [akrotiri/bcbAMY2J2l-000578] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57497 - 408 17B in 1.000101125s
+{"time":"2025-07-28T19:05:29.64604+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:29 [akrotiri/bcbAMY2J2l-000579] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57500 - 408 17B in 1.000181958s
+{"time":"2025-07-28T19:05:29.647017+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:29 [akrotiri/bcbAMY2J2l-000581] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57498 - 408 17B in 1.000275833s
+{"time":"2025-07-28T19:05:29.647411+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:29 [akrotiri/bcbAMY2J2l-000580] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57499 - 408 17B in 1.000693333s
+{"time":"2025-07-28T19:05:29.667323+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1437}
+{"time":"2025-07-28T19:05:29.66734+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:29.667345+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:29.687674+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:29.687694+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":20}
+{"time":"2025-07-28T19:05:29.687703+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20060,"unique_prefixes":6710,"success":6710,"duration_ms":1843}
+{"time":"2025-07-28T19:05:29.69197+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:29.704244+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:29.705964+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":16}
+{"time":"2025-07-28T19:05:29.706974+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:29.706988+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":2}
+{"time":"2025-07-28T19:05:29.706998+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:29.714011+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:29.766631+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM peerings","duration":54581125}
+{"time":"2025-07-28T19:05:29.821738+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:29.82414+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":114}
+{"time":"2025-07-28T19:05:29.829386+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:30.15401+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:30 [akrotiri/bcbAMY2J2l-000583] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57502 - 408 17B in 1.000997458s
+{"time":"2025-07-28T19:05:30.155319+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:30 [akrotiri/bcbAMY2J2l-000582] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57501 - 408 17B in 1.003434917s
+{"time":"2025-07-28T19:05:30.645553+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:30 [akrotiri/bcbAMY2J2l-000584] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57504 - 408 17B in 1.001253375s
+{"time":"2025-07-28T19:05:30.648219+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:30 [akrotiri/bcbAMY2J2l-000586] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57506 - 408 17B in 1.000697042s
+{"time":"2025-07-28T19:05:30.648336+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:30 [akrotiri/bcbAMY2J2l-000585] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57505 - 408 17B in 1.001516708s
+{"time":"2025-07-28T19:05:30.648399+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:30 [akrotiri/bcbAMY2J2l-000587] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57507 - 408 17B in 1.000330834s
+{"time":"2025-07-28T19:05:30.782565+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:30.782597+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":960}
+{"time":"2025-07-28T19:05:30.782609+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:30.837163+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:30.837184+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":54}
+{"time":"2025-07-28T19:05:30.837328+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:30.844667+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:30.844735+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":7}
+{"time":"2025-07-28T19:05:30.848699+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:31.156844+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:31 [akrotiri/bcbAMY2J2l-000588] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57509 - 408 17B in 1.001031334s
+{"time":"2025-07-28T19:05:31.157972+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:31 [akrotiri/bcbAMY2J2l-000589] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57510 - 408 17B in 1.002004166s
+{"time":"2025-07-28T19:05:31.212724+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:31.214007+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":368}
+{"time":"2025-07-28T19:05:31.216066+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:31.221061+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:31.221222+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":8}
+{"time":"2025-07-28T19:05:31.221232+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20006,"unique_prefixes":2051,"success":2051,"duration_ms":1532}
+{"time":"2025-07-28T19:05:31.22156+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:31.226353+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:31.226378+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:31.229603+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:31.23237+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:31.236103+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":10}
+{"time":"2025-07-28T19:05:31.372446+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:31.372612+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":140}
+{"time":"2025-07-28T19:05:31.373094+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:31.373104+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:31.373276+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:31.375317+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:31.647857+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:31 [akrotiri/bcbAMY2J2l-000590] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57511 - 408 17B in 1.001480417s
+{"time":"2025-07-28T19:05:31.653944+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:31 [akrotiri/bcbAMY2J2l-000591] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57514 - 408 17B in 1.003183416s
+{"time":"2025-07-28T19:05:31.655766+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:31 [akrotiri/bcbAMY2J2l-000593] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57512 - 408 17B in 1.002635792s
+{"time":"2025-07-28T19:05:31.6561+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:31 [akrotiri/bcbAMY2J2l-000592] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57513 - 408 17B in 1.004582291s
+{"time":"2025-07-28T19:05:31.776379+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:32.086985+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"196.60.8.170","peer_asn":"327781"}
+{"time":"2025-07-28T19:05:32.165307+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:32 [akrotiri/bcbAMY2J2l-000595] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57536 - 408 17B in 1.002541542s
+{"time":"2025-07-28T19:05:32.166595+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:32 [akrotiri/bcbAMY2J2l-000594] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57537 - 408 17B in 1.006852625s
+{"time":"2025-07-28T19:05:32.650256+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:32 [akrotiri/bcbAMY2J2l-000596] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57558 - 408 17B in 1.001827875s
+{"time":"2025-07-28T19:05:32.65558+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:32 [akrotiri/bcbAMY2J2l-000597] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57559 - 408 17B in 1.000310833s
+{"time":"2025-07-28T19:05:32.657357+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:32 [akrotiri/bcbAMY2J2l-000598] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57561 - 408 17B in 1.000378375s
+{"time":"2025-07-28T19:05:32.662509+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:32 [akrotiri/bcbAMY2J2l-000599] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57560 - 408 17B in 1.004486209s
+{"time":"2025-07-28T19:05:32.912337+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"80.81.192.113","peer_asn":"35320"}
+{"time":"2025-07-28T19:05:32.986868+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1613}
+{"time":"2025-07-28T19:05:32.986903+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:32.98691+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:33.063973+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.064063+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":77}
+{"time":"2025-07-28T19:05:33.064082+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20007,"unique_prefixes":6014,"success":6014,"duration_ms":1841}
+{"time":"2025-07-28T19:05:33.065611+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:33.065625+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:05:33.065636+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.068451+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:33.167395+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:33 [akrotiri/bcbAMY2J2l-000600] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57563 - 408 17B in 1.001308125s
+{"time":"2025-07-28T19:05:33.171299+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:33 [akrotiri/bcbAMY2J2l-000601] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57564 - 408 17B in 1.002402583s
+{"time":"2025-07-28T19:05:33.225332+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:33.225332+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":159}
+{"time":"2025-07-28T19:05:33.227896+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:33.231434+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.231437+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":6}
+{"time":"2025-07-28T19:05:33.23218+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:33.233415+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:33.233437+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.240692+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:33.460192+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:33.466265+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":228}
+{"time":"2025-07-28T19:05:33.466534+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:33.504661+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.506274+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:33.50801+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":44}
+{"time":"2025-07-28T19:05:33.508113+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:05:33.509331+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.510561+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:33.510632+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":4}
+{"time":"2025-07-28T19:05:33.511013+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:33.512756+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.512883+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:33.51406+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":2}
+{"time":"2025-07-28T19:05:33.514122+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":1357,"success":1357,"duration_ms":448}
+{"time":"2025-07-28T19:05:33.514803+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:33.514868+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.521747+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:33.539019+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:33.543475+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":30}
+{"time":"2025-07-28T19:05:33.543746+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.544146+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:33.544158+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.544163+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.545188+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:33.549577+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:33.549681+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":5}
+{"time":"2025-07-28T19:05:33.549703+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:33.65275+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:33 [akrotiri/bcbAMY2J2l-000602] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57565 - 408 17B in 1.000725417s
+{"time":"2025-07-28T19:05:33.665818+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:33 [akrotiri/bcbAMY2J2l-000605] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57568 - 408 17B in 1.001417458s
+{"time":"2025-07-28T19:05:33.666029+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:33 [akrotiri/bcbAMY2J2l-000603] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57566 - 408 17B in 1.002624708s
+{"time":"2025-07-28T19:05:33.666093+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:33 [akrotiri/bcbAMY2J2l-000604] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57567 - 408 17B in 1.001847625s
+{"time":"2025-07-28T19:05:33.852625+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM bgp_peers","duration":73738084}
+{"time":"2025-07-28T19:05:33.952922+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:33.957822+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":403}
+{"time":"2025-07-28T19:05:33.959408+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:34.03423+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:34.03432+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":81}
+{"time":"2025-07-28T19:05:34.172329+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:34 [akrotiri/bcbAMY2J2l-000606] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57571 - 408 17B in 1.000444042s
+{"time":"2025-07-28T19:05:34.173663+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:34 [akrotiri/bcbAMY2J2l-000607] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57570 - 408 17B in 1.000190208s
+{"time":"2025-07-28T19:05:34.310266+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:34.310654+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":276}
+{"time":"2025-07-28T19:05:34.310791+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:34.310975+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:34.310996+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:34.312686+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:34.317241+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":6}
+{"time":"2025-07-28T19:05:34.317256+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20055,"unique_prefixes":1464,"success":1464,"duration_ms":801}
+{"time":"2025-07-28T19:05:34.31738+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:34.317799+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:34.317812+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:34.317818+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:34.31844+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:34.318578+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:34.318705+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:34.32659+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:34.424645+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":106}
+{"time":"2025-07-28T19:05:34.424892+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:34.425258+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:34.425329+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:34.425342+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:34.427594+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:34.657736+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:34 [akrotiri/bcbAMY2J2l-000608] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57592 - 408 17B in 1.00187875s
+{"time":"2025-07-28T19:05:34.668053+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:34 [akrotiri/bcbAMY2J2l-000610] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57594 - 408 17B in 1.000435333s
+{"time":"2025-07-28T19:05:34.66906+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:34 [akrotiri/bcbAMY2J2l-000609] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57595 - 408 17B in 1.001518s
+{"time":"2025-07-28T19:05:34.671834+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:34 [akrotiri/bcbAMY2J2l-000611] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57593 - 408 17B in 1.001322s
+{"time":"2025-07-28T19:05:34.749258+02:00","level":"INFO","msg":"Stream statistics","source":"streamer.go:271","func":"streamer.(*Streamer).logMetrics","uptime":190000023834,"total_messages":1188864,"total_bytes":889019510,"total_mb":"847.84","messages_per_sec":"6015.94","bits_per_sec":"36063755","mbps":"36.06","total_dropped":158227}
+{"time":"2025-07-28T19:05:34.749284+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.ASHandler","index":0,"queue_len":15549,"queue_cap":100000,"processed":1164236,"dropped":0,"avg_time":127089,"min_time":0,"max_time":2311683250}
+{"time":"2025-07-28T19:05:34.749291+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeerHandler","index":1,"queue_len":0,"queue_cap":100000,"processed":1179786,"dropped":0,"avg_time":69313,"min_time":0,"max_time":1917211625}
+{"time":"2025-07-28T19:05:34.749297+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PrefixHandler","index":2,"queue_len":97266,"queue_cap":100000,"processed":924292,"dropped":158227,"avg_time":183324,"min_time":0,"max_time":2258306666}
+{"time":"2025-07-28T19:05:34.749302+02:00","level":"INFO","msg":"Handler statistics","source":"streamer.go:304","func":"streamer.(*Streamer).logMetrics","handler":"*routewatch.PeeringHandler","index":3,"queue_len":0,"queue_cap":100000,"processed":1179786,"dropped":0,"avg_time":1725,"min_time":0,"max_time":26563875}
+{"time":"2025-07-28T19:05:35.174223+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:35 [akrotiri/bcbAMY2J2l-000613] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57598 - 408 17B in 1.000130417s
+{"time":"2025-07-28T19:05:35.174315+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:35 [akrotiri/bcbAMY2J2l-000612] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57597 - 408 17B in 1.001205417s
+{"time":"2025-07-28T19:05:35.49202+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1066}
+{"time":"2025-07-28T19:05:35.492049+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:35.492056+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:35.512764+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:35.512774+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":20}
+{"time":"2025-07-28T19:05:35.512794+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20178,"unique_prefixes":5895,"success":5895,"duration_ms":1194}
+{"time":"2025-07-28T19:05:35.512948+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:35.512996+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:35.513023+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:35.522649+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:35.562387+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:35.632947+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":119}
+{"time":"2025-07-28T19:05:35.633335+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:35.634328+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:05:35.634344+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:35.634349+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:35.63468+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:35.635001+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:35.637894+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:35.637933+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:35.660982+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:35 [akrotiri/bcbAMY2J2l-000614] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57599 - 408 17B in 1.00124975s
+{"time":"2025-07-28T19:05:35.670329+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:35 [akrotiri/bcbAMY2J2l-000615] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57600 - 408 17B in 1.00159775s
+{"time":"2025-07-28T19:05:35.670837+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:35 [akrotiri/bcbAMY2J2l-000616] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57601 - 408 17B in 1.001373083s
+{"time":"2025-07-28T19:05:35.688143+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:35 [akrotiri/bcbAMY2J2l-000617] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57602 - 408 17B in 1.014207334s
+{"time":"2025-07-28T19:05:36.176727+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:36 [akrotiri/bcbAMY2J2l-000618] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57605 - 408 17B in 1.001538083s
+{"time":"2025-07-28T19:05:36.180129+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:36 [akrotiri/bcbAMY2J2l-000619] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57604 - 408 17B in 1.004434625s
+{"time":"2025-07-28T19:05:36.609854+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:36.609882+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":974}
+{"time":"2025-07-28T19:05:36.609907+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:36.61719+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:36.621146+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":7}
+{"time":"2025-07-28T19:05:36.66357+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:36 [akrotiri/bcbAMY2J2l-000620] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57607 - 408 17B in 1.001291416s
+{"time":"2025-07-28T19:05:36.671243+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+{"time":"2025-07-28T19:05:36.671446+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:36 [akrotiri/bcbAMY2J2l-000622] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57609 - 408 17B in 1.000091333s
+2025/07/28 19:05:36 [akrotiri/bcbAMY2J2l-000621] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57608 - 408 17B in 1.000391042s
+{"time":"2025-07-28T19:05:36.689038+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:36 [akrotiri/bcbAMY2J2l-000623] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57610 - 408 17B in 1.0002695s
+{"time":"2025-07-28T19:05:36.725322+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:36.725506+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":108}
+{"time":"2025-07-28T19:05:36.726728+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:36.726744+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":1}
+{"time":"2025-07-28T19:05:36.726753+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:36.728511+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:36.741358+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":14}
+{"time":"2025-07-28T19:05:36.74138+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20016,"unique_prefixes":4240,"success":4240,"duration_ms":1226}
+{"time":"2025-07-28T19:05:36.741388+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:36.742219+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:36.742234+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:36.74224+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:36.7424+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:36.745695+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:36.74691+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:36.756327+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:36.834235+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":91}
+{"time":"2025-07-28T19:05:36.836136+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:36.836157+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:37.04687+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:37.047129+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":210}
+{"time":"2025-07-28T19:05:37.047841+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:37.048555+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:37.04857+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:37.049523+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:37.183156+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:37 [akrotiri/bcbAMY2J2l-000625] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57613 - 408 17B in 1.002287458s
+{"time":"2025-07-28T19:05:37.185593+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:37 [akrotiri/bcbAMY2J2l-000624] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57612 - 408 17B in 1.007349541s
+{"time":"2025-07-28T19:05:37.608457+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:37.666634+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:37 [akrotiri/bcbAMY2J2l-000626] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57614 - 408 17B in 1.002527458s
+{"time":"2025-07-28T19:05:37.681273+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:37 [akrotiri/bcbAMY2J2l-000627] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57615 - 408 17B in 1.009195042s
+{"time":"2025-07-28T19:05:37.682224+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:37 [akrotiri/bcbAMY2J2l-000628] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57616 - 408 17B in 1.009114042s
+{"time":"2025-07-28T19:05:37.706899+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:37 [akrotiri/bcbAMY2J2l-000629] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57617 - 408 17B in 1.017035916s
+{"time":"2025-07-28T19:05:37.906915+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM peerings","duration":61838417}
+{"time":"2025-07-28T19:05:38.125516+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM bgp_peers","duration":218197375}
+{"time":"2025-07-28T19:05:38.187186+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:38 [akrotiri/bcbAMY2J2l-000630] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57618 - 408 17B in 1.001710334s
+{"time":"2025-07-28T19:05:38.188661+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:38 [akrotiri/bcbAMY2J2l-000631] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57619 - 408 17B in 1.001101375s
+{"time":"2025-07-28T19:05:38.672933+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:38 [akrotiri/bcbAMY2J2l-000632] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57621 - 408 17B in 1.005903625s
+{"time":"2025-07-28T19:05:38.676863+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1629}
+{"time":"2025-07-28T19:05:38.676882+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:38.676888+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:38.68407+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:38 [akrotiri/bcbAMY2J2l-000634] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57622 - 408 17B in 1.001082292s
+{"time":"2025-07-28T19:05:38.685933+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:38 [akrotiri/bcbAMY2J2l-000633] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57623 - 408 17B in 1.003156291s
+{"time":"2025-07-28T19:05:38.690255+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:38.690698+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:38.692666+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":13}
+{"time":"2025-07-28T19:05:38.692717+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20018,"unique_prefixes":6683,"success":6683,"duration_ms":1949}
+{"time":"2025-07-28T19:05:38.693193+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:38.693351+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:38.702372+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:38.731884+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:38 [akrotiri/bcbAMY2J2l-000635] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57624 - 408 17B in 1.023194167s
+{"time":"2025-07-28T19:05:38.82378+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:38.823872+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":133}
+{"time":"2025-07-28T19:05:38.826312+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:38.829521+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:38.829586+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":5}
+{"time":"2025-07-28T19:05:38.829848+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:38.829892+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:38.829925+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:38.833367+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:39.191456+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:39 [akrotiri/bcbAMY2J2l-000637] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57626 - 408 17B in 1.002349833s
+{"time":"2025-07-28T19:05:39.191637+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:39 [akrotiri/bcbAMY2J2l-000636] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57627 - 408 17B in 1.002500084s
+{"time":"2025-07-28T19:05:39.256708+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM asns","duration":63911750}
+{"time":"2025-07-28T19:05:39.257387+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM asns","duration":64650583}
+{"time":"2025-07-28T19:05:39.378021+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes WHERE ip_version = ?","duration":94367708}
+{"time":"2025-07-28T19:05:39.67543+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:39 [akrotiri/bcbAMY2J2l-000638] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57689 - 408 17B in 1.000219375s
+{"time":"2025-07-28T19:05:39.688571+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:39 [akrotiri/bcbAMY2J2l-000639] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57690 - 408 17B in 1.001686458s
+{"time":"2025-07-28T19:05:39.689611+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:39 [akrotiri/bcbAMY2J2l-000640] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57691 - 408 17B in 1.002631917s
+{"time":"2025-07-28T19:05:39.733984+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:39 [akrotiri/bcbAMY2J2l-000641] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57692 - 408 17B in 1.001166208s
+{"time":"2025-07-28T19:05:40.193818+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:40 [akrotiri/bcbAMY2J2l-000643] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57713 - 408 17B in 1.001087459s
+{"time":"2025-07-28T19:05:40.193955+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:40 [akrotiri/bcbAMY2J2l-000642] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57714 - 408 17B in 1.001309875s
+{"time":"2025-07-28T19:05:40.436895+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"193.239.118.249","peer_asn":"41255"}
+{"time":"2025-07-28T19:05:40.481332+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:40.481472+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1651}
+{"time":"2025-07-28T19:05:40.481808+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:40.563873+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:40.564015+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":82}
+{"time":"2025-07-28T19:05:40.56459+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:40.564986+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:40.565003+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:40.569086+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:40.569212+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":4}
+{"time":"2025-07-28T19:05:40.570252+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:40.59265+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:40.59287+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:40.593287+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:40.593491+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":23}
+{"time":"2025-07-28T19:05:40.593504+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20016,"unique_prefixes":5967,"success":5967,"duration_ms":1899}
+{"time":"2025-07-28T19:05:40.5937+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:40.605787+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:40.676384+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:40 [akrotiri/bcbAMY2J2l-000644] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57715 - 408 17B in 1.000080167s
+{"time":"2025-07-28T19:05:40.68052+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":87}
+{"time":"2025-07-28T19:05:40.681258+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:40.681931+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:40.681943+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:40.681948+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:40.682302+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:40.682307+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":0}
+{"time":"2025-07-28T19:05:40.682322+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:40.683302+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:40.69047+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:40 [akrotiri/bcbAMY2J2l-000646] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57717 - 408 17B in 1.000262959s
+{"time":"2025-07-28T19:05:40.690628+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:40 [akrotiri/bcbAMY2J2l-000645] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57716 - 408 17B in 1.00111475s
+{"time":"2025-07-28T19:05:40.738459+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:40 [akrotiri/bcbAMY2J2l-000647] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57718 - 408 17B in 1.00373775s
+{"time":"2025-07-28T19:05:40.786407+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes","duration":73051041}
+{"time":"2025-07-28T19:05:40.959963+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"195.208.209.174","peer_asn":"25227"}
+{"time":"2025-07-28T19:05:41.195764+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:41 [akrotiri/bcbAMY2J2l-000648] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57720 - 408 17B in 1.00131175s
+{"time":"2025-07-28T19:05:41.197205+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:41 [akrotiri/bcbAMY2J2l-000649] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57721 - 408 17B in 1.002605709s
+{"time":"2025-07-28T19:05:41.252373+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM asns","duration":54116333}
+{"time":"2025-07-28T19:05:41.253116+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM asns","duration":55930792}
+{"time":"2025-07-28T19:05:41.298972+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:41.678378+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:41 [akrotiri/bcbAMY2J2l-000650] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57722 - 408 17B in 1.001111625s
+{"time":"2025-07-28T19:05:41.695898+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:41 [akrotiri/bcbAMY2J2l-000652] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57723 - 408 17B in 1.004002292s
+{"time":"2025-07-28T19:05:41.69599+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:41 [akrotiri/bcbAMY2J2l-000651] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57724 - 408 17B in 1.004133292s
+{"time":"2025-07-28T19:05:41.750031+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:41 [akrotiri/bcbAMY2J2l-000653] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57725 - 408 17B in 1.007148042s
+{"time":"2025-07-28T19:05:41.82562+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":1143}
+{"time":"2025-07-28T19:05:41.825645+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:41.825652+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:41.875587+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:41.876183+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":49}
+{"time":"2025-07-28T19:05:41.876207+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20036,"unique_prefixes":4504,"success":4504,"duration_ms":1279}
+{"time":"2025-07-28T19:05:41.8815+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:41.944083+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:41.944177+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":68}
+{"time":"2025-07-28T19:05:41.944224+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:42.193407+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:42.203301+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":249}
+{"time":"2025-07-28T19:05:42.203432+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:42 [akrotiri/bcbAMY2J2l-000655] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57747 - 408 17B in 1.005244208s
+{"time":"2025-07-28T19:05:42.203637+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:42 [akrotiri/bcbAMY2J2l-000654] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57746 - 408 17B in 1.006499875s
+{"time":"2025-07-28T19:05:42.234458+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:42.246885+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpdatePeerBatch (database.go:639)","duration_ms":41}
+{"time":"2025-07-28T19:05:42.266002+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:42.323515+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM asns","duration":106967500}
+{"time":"2025-07-28T19:05:42.323828+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes","duration":78706541}
+{"time":"2025-07-28T19:05:42.374824+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes","duration":50991000}
+{"time":"2025-07-28T19:05:42.680337+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:42 [akrotiri/bcbAMY2J2l-000656] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57748 - 408 17B in 1.000852875s
+{"time":"2025-07-28T19:05:42.699201+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:42 [akrotiri/bcbAMY2J2l-000657] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57750 - 408 17B in 1.002072667s
+{"time":"2025-07-28T19:05:42.709442+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:42 [akrotiri/bcbAMY2J2l-000658] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57749 - 408 17B in 1.015503708s
+{"time":"2025-07-28T19:05:42.752963+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:42 [akrotiri/bcbAMY2J2l-000659] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57751 - 408 17B in 1.001384958s
+{"time":"2025-07-28T19:05:42.757454+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM asns","duration":76057000}
+{"time":"2025-07-28T19:05:42.758111+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM asns","duration":57635333}
+{"time":"2025-07-28T19:05:42.815387+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes","duration":57215333}
+{"time":"2025-07-28T19:05:42.873198+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes","duration":115114750}
+{"time":"2025-07-28T19:05:42.914811+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"27.111.229.239","peer_asn":"17639"}
+{"time":"2025-07-28T19:05:42.935576+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes","duration":175282541}
+{"time":"2025-07-28T19:05:42.937915+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes WHERE ip_version = ?","duration":120339000}
+{"time":"2025-07-28T19:05:42.945391+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM peerings","duration":66545708}
+{"time":"2025-07-28T19:05:42.996889+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"2001:7f8::8b0e:0:1","peer_asn":"35598"}
+{"time":"2025-07-28T19:05:43.003918+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:7f8::8b0e:0:1","peer_asn":"35598"}
+{"time":"2025-07-28T19:05:43.025562+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"UpsertLiveRouteBatch (database.go:180)","duration_ms":791}
+{"time":"2025-07-28T19:05:43.025598+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:43.025848+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:43.054805+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM bgp_peers","duration":51294042}
+{"time":"2025-07-28T19:05:43.057786+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:43.060415+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":32}
+{"time":"2025-07-28T19:05:43.060436+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:43.137565+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"80.81.194.190","peer_asn":"31042"}
+{"time":"2025-07-28T19:05:43.216579+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:43 [akrotiri/bcbAMY2J2l-000660] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57755 - 408 17B in 1.000143625s
+{"time":"2025-07-28T19:05:43.216752+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:43 [akrotiri/bcbAMY2J2l-000661] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57754 - 408 17B in 1.000319417s
+{"time":"2025-07-28T19:05:43.246714+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"DeleteLiveRouteBatch","caller":"database.go:261"}
+{"time":"2025-07-28T19:05:43.246749+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":188}
+{"time":"2025-07-28T19:05:43.248986+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:43.256327+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:43.256359+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"DeleteLiveRouteBatch (database.go:261)","duration_ms":9}
+{"time":"2025-07-28T19:05:43.256379+02:00","level":"DEBUG","msg":"Flushed prefix batch","source":"prefixhandler.go:223","func":"routewatch.(*PrefixHandler).flushBatchLocked","batch_size":20000,"unique_prefixes":1707,"success":1707,"duration_ms":1378}
+{"time":"2025-07-28T19:05:43.270111+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:43.543604+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes WHERE ip_version = ?","duration":285148250}
+{"time":"2025-07-28T19:05:43.576528+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes","duration":329298541}
+{"time":"2025-07-28T19:05:43.579908+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:43.579934+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"RecordPeering (database.go:587)","duration_ms":323}
+{"time":"2025-07-28T19:05:43.579949+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"RecordPeering","caller":"database.go:587"}
+{"time":"2025-07-28T19:05:43.681524+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:43 [akrotiri/bcbAMY2J2l-000662] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57756 - 408 17B in 1.000376833s
+{"time":"2025-07-28T19:05:43.700515+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:43 [akrotiri/bcbAMY2J2l-000663] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57757 - 408 17B in 1.000105958s
+{"time":"2025-07-28T19:05:43.715774+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:43 [akrotiri/bcbAMY2J2l-000664] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57758 - 408 17B in 1.000901625s
+{"time":"2025-07-28T19:05:43.754521+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:43 [akrotiri/bcbAMY2J2l-000665] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57759 - 408 17B in 1.000899709s
+{"time":"2025-07-28T19:05:43.84935+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM prefixes","duration":69647459}
+{"time":"2025-07-28T19:05:43.85569+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM peerings","duration":122711125}
+{"time":"2025-07-28T19:05:43.89859+02:00","level":"DEBUG","msg":"Database lock acquired","source":"database.go:149","func":"database.(*Database).lock","operation":"UpsertLiveRouteBatch","caller":"database.go:180"}
+{"time":"2025-07-28T19:05:43.898613+02:00","level":"DEBUG","msg":"Database lock released","source":"database.go:161","func":"database.(*Database).unlock","held_by":"GetOrCreateASNBatch (database.go:331)","duration_ms":318}
+{"time":"2025-07-28T19:05:43.900715+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"GetOrCreateASNBatch","caller":"database.go:331"}
+{"time":"2025-07-28T19:05:43.909027+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM bgp_peers","duration":53288708}
+{"time":"2025-07-28T19:05:44.066815+02:00","level":"DEBUG","msg":"Slow query","source":"slowquery.go:17","func":"database.logSlowQuery","query":"SELECT COUNT(*) FROM peerings","duration":112416958}
+{"time":"2025-07-28T19:05:44.157471+02:00","level":"INFO","msg":"BGP session opened","source":"streamer.go:432","func":"streamer.(*Streamer).stream","peer":"2001:7f8:4::73ab:1","peer_asn":"29611"}
+{"time":"2025-07-28T19:05:44.159413+02:00","level":"DEBUG","msg":"Acquiring database lock","source":"database.go:143","func":"database.(*Database).lock","operation":"UpdatePeerBatch","caller":"database.go:639"}
+{"time":"2025-07-28T19:05:44.171885+02:00","level":"WARN","msg":"BGP notification","source":"streamer.go:440","func":"streamer.(*Streamer).stream","peer":"2001:7f8:4::73ab:1","peer_asn":"29611"}
+{"time":"2025-07-28T19:05:44.218761+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:44 [akrotiri/bcbAMY2J2l-000666] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57761 - 408 17B in 1.001229834s
+{"time":"2025-07-28T19:05:44.219547+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:44 [akrotiri/bcbAMY2J2l-000667] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57760 - 408 17B in 1.001939375s
+{"time":"2025-07-28T19:05:44.438628+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+{"time":"2025-07-28T19:05:44.438628+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+fatal error: concurrent map writes{"time":"2025-07-28T19:05:44.438654+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+{"time":"2025-07-28T19:05:44.438692+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:44 [akrotiri/bcbAMY2J2l-000672] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57767 - 408 134B in 219.029417ms
+2025/07/28 19:05:44 [akrotiri/bcbAMY2J2l-000671] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57765 - 408 151B in 683.454125ms
+{"time":"2025-07-28T19:05:44.438794+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:44 [akrotiri/bcbAMY2J2l-000673] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57768 - 408 151B in 218.765042ms
+2025/07/28 19:05:44 [akrotiri/bcbAMY2J2l-000669] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57763 - 408 151B in 737.347875ms
+2025/07/28 19:05:44 [akrotiri/bcbAMY2J2l-000668] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57762 - 408 134B in 755.382416ms
+{"time":"2025-07-28T19:05:44.438937+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:44 [akrotiri/bcbAMY2J2l-000670] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57764 - 408 151B in 721.971208ms
+2025/07/28 19:05:44 [akrotiri/bcbAMY2J2l-000674] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57769 - 408 149B in 55.583µs
+{"time":"2025-07-28T19:05:44.43863+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+{"time":"2025-07-28T19:05:44.439112+02:00","level":"ERROR","msg":"Database stats timeout","source":"handlers.go:250","func":"server.(*Server).setupRoutes.func1.(*Server).handleStats.1"}
+2025/07/28 19:05:44 [akrotiri/bcbAMY2J2l-000675] "GET http://127.0.0.1:8080/api/v1/stats HTTP/1.1" from 127.0.0.1:57770 - 408 149B in 58.25µs
+
+
+goroutine 514511 [running]:
+internal/runtime/maps.fatal({0x100aa593f?, 0x10059d998?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/runtime/panic.go:1058 +0x20
+net/textproto.MIMEHeader.Set(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/textproto/header.go:22
+net/http.Header.Set(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/header.go:40
+net/http.Error({0x100c9e0b8, 0x14018c8ce10}, {0x100aa1935, 0x10}, 0x198)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/server.go:2323 +0xc8
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1({0x100c9e0b8, 0x14018c8ce10}, 0x1400371a140?)
+ /Users/user/dev/routewatch/internal/server/handlers.go:251 +0x4f0
+net/http.HandlerFunc.ServeHTTP(0x140007cca50?, {0x100c9e0b8?, 0x14018c8ce10?}, 0x14005cf8998?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/server.go:2294 +0x38
+github.com/go-chi/chi/v5.(*Mux).routeHTTP(0x14000202300, {0x100c9e0b8, 0x14018c8ce10}, 0x1400371a140)
+ /Users/user/go/pkg/mod/github.com/go-chi/chi/v5@v5.2.2/mux.go:478 +0x280
+net/http.HandlerFunc.ServeHTTP(0x140081a7c88?, {0x100c9e0b8?, 0x14018c8ce10?}, 0x140081a7c68?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/server.go:2294 +0x38
+github.com/go-chi/chi/v5.(*Mux).ServeHTTP(0x14000202300, {0x100c9e0b8, 0x14018c8ce10}, 0x1400371a140)
+ /Users/user/go/pkg/mod/github.com/go-chi/chi/v5@v5.2.2/mux.go:73 +0x2c4
+github.com/go-chi/chi/v5.(*Mux).Mount.func1({0x100c9e0b8, 0x14018c8ce10}, 0x1400371a140)
+ /Users/user/go/pkg/mod/github.com/go-chi/chi/v5@v5.2.2/mux.go:325 +0x1e0
+net/http.HandlerFunc.ServeHTTP(0x140007cca50?, {0x100c9e0b8?, 0x14018c8ce10?}, 0x1400a8f29c4?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/server.go:2294 +0x38
+github.com/go-chi/chi/v5.(*Mux).routeHTTP(0x140002022a0, {0x100c9e0b8, 0x14018c8ce10}, 0x1400371a140)
+ /Users/user/go/pkg/mod/github.com/go-chi/chi/v5@v5.2.2/mux.go:478 +0x280
+net/http.HandlerFunc.ServeHTTP(0x140081a7eb8?, {0x100c9e0b8?, 0x14018c8ce10?}, 0x10054057c?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/server.go:2294 +0x38
+git.eeqj.de/sneak/routewatch/internal/server.JSONResponseMiddleware.func1({0x100c9e088, 0x1401a075980}, 0x1400371a140)
+ /Users/user/dev/routewatch/internal/server/middleware.go:67 +0x168
+net/http.HandlerFunc.ServeHTTP(0x1400371a000?, {0x100c9e088?, 0x1401a075980?}, 0x1005a87c4?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/server.go:2294 +0x38
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.TimeoutMiddleware.func2.1.1()
+ /Users/user/dev/routewatch/internal/server/middleware.go:168 +0x9c
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.TimeoutMiddleware.func2.1 in goroutine 514509
+ /Users/user/dev/routewatch/internal/server/middleware.go:161 +0x184
+
+goroutine 1 [chan receive, 3 minutes]:
+go.uber.org/fx.(*App).run(0x140000c0420, 0x1400019de68)
+ /Users/user/go/pkg/mod/go.uber.org/fx@v1.24.0/app.go:613 +0x98
+go.uber.org/fx.(*App).Run(0x140000c0420)
+ /Users/user/go/pkg/mod/go.uber.org/fx@v1.24.0/app.go:600 +0x34
+git.eeqj.de/sneak/routewatch/internal/routewatch.CLIEntry()
+ /Users/user/dev/routewatch/internal/routewatch/cli.go:97 +0xec
+main.main()
+ /Users/user/dev/routewatch/cmd/routewatch/main.go:9 +0x1c
+
+goroutine 4 [select, 3 minutes]:
+database/sql.(*DB).connectionOpener(0x140000e7520, {0x100c9ea70, 0x140000d67d0})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1261 +0x80
+created by database/sql.OpenDB in goroutine 1
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:841 +0x124
+
+goroutine 34 [chan receive]:
+github.com/rcrowley/go-metrics.(*meterArbiter).tick(...)
+ /Users/user/go/pkg/mod/github.com/rcrowley/go-metrics@v0.0.0-20250401214520-65e299d6c5c9/meter.go:239
+created by github.com/rcrowley/go-metrics.NewMeter in goroutine 1
+ /Users/user/go/pkg/mod/github.com/rcrowley/go-metrics@v0.0.0-20250401214520-65e299d6c5c9/meter.go:46 +0xc8
+
+goroutine 7 [select, 3 minutes]:
+go.uber.org/fx.(*signalReceivers).relayer(0x140000c0488)
+ /Users/user/go/pkg/mod/go.uber.org/fx@v1.24.0/signal.go:84 +0x88
+created by go.uber.org/fx.(*signalReceivers).Start in goroutine 1
+ /Users/user/go/pkg/mod/go.uber.org/fx@v1.24.0/signal.go:112 +0x208
+
+goroutine 36 [chan receive]:
+git.eeqj.de/sneak/routewatch/internal/routewatch.logDebugStats(0x14000064600)
+ /Users/user/dev/routewatch/internal/routewatch/cli.go:36 +0x350
+created by git.eeqj.de/sneak/routewatch/internal/routewatch.CLIEntry.func1.1 in goroutine 35
+ /Users/user/dev/routewatch/internal/routewatch/cli.go:65 +0x80
+
+goroutine 21 [syscall, 3 minutes]:
+os/signal.signal_recv()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/runtime/sigqueue.go:149 +0x2c
+os/signal.loop()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/os/signal/signal_unix.go:23 +0x1c
+created by os/signal.Notify.func1.1 in goroutine 35
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/os/signal/signal.go:152 +0x28
+
+goroutine 5 [chan receive, 3 minutes]:
+git.eeqj.de/sneak/routewatch/internal/routewatch.CLIEntry.func1.1.1()
+ /Users/user/dev/routewatch/internal/routewatch/cli.go:72 +0x3c
+created by git.eeqj.de/sneak/routewatch/internal/routewatch.CLIEntry.func1.1 in goroutine 35
+ /Users/user/dev/routewatch/internal/routewatch/cli.go:71 +0x144
+
+goroutine 22 [select]:
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*ASHandler).flushLoop(0x140001220e0)
+ /Users/user/dev/routewatch/internal/routewatch/ashandler.go:117 +0xc4
+created by git.eeqj.de/sneak/routewatch/internal/routewatch.NewASHandler in goroutine 6
+ /Users/user/dev/routewatch/internal/routewatch/ashandler.go:55 +0x144
+
+goroutine 23 [select]:
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*PeerHandler).flushLoop(0x140001221c0)
+ /Users/user/dev/routewatch/internal/routewatch/peerhandler.go:106 +0xc4
+created by git.eeqj.de/sneak/routewatch/internal/routewatch.NewPeerHandler in goroutine 6
+ /Users/user/dev/routewatch/internal/routewatch/peerhandler.go:56 +0x144
+
+goroutine 32 [sync.Mutex.Lock]:
+internal/sync.runtime_SemacquireMutex(0x140001ce4f8?, 0xc?, 0x1400106eee8?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/runtime/sema.go:95 +0x28
+internal/sync.(*Mutex).lockSlow(0x140000ce090)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/internal/sync/mutex.go:149 +0x170
+internal/sync.(*Mutex).Lock(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/internal/sync/mutex.go:70
+sync.(*Mutex).Lock(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/sync/mutex.go:46
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*PrefixHandler).flushLoop(0x140000ce070)
+ /Users/user/dev/routewatch/internal/routewatch/prefixhandler.go:146 +0x130
+created by git.eeqj.de/sneak/routewatch/internal/routewatch.NewPrefixHandler in goroutine 6
+ /Users/user/dev/routewatch/internal/routewatch/prefixhandler.go:69 +0x144
+
+goroutine 33 [sync.Mutex.Lock]:
+internal/sync.runtime_SemacquireMutex(0x100a9928a?, 0x4?, 0x19?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/runtime/sema.go:95 +0x28
+internal/sync.(*Mutex).lockSlow(0x140000d6840)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/internal/sync/mutex.go:149 +0x170
+internal/sync.(*Mutex).Lock(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/internal/sync/mutex.go:70
+sync.(*Mutex).Lock(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/sync/mutex.go:46
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).lock(0x140000d6820, {0x100a9fc01, 0xd})
+ /Users/user/dev/routewatch/internal/database/database.go:145 +0x18c
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).RecordPeering(0x140000d6820, 0xee019a488?, 0xbcea, {0x0, 0xee019a488, 0x0})
+ /Users/user/dev/routewatch/internal/database/database.go:587 +0xe4
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*PeeringHandler).processPeerings(0x1400003e200)
+ /Users/user/dev/routewatch/internal/routewatch/peeringhandler.go:205 +0x414
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*PeeringHandler).processLoop(0x1400003e200)
+ /Users/user/dev/routewatch/internal/routewatch/peeringhandler.go:99 +0x68
+created by git.eeqj.de/sneak/routewatch/internal/routewatch.NewPeeringHandler in goroutine 6
+ /Users/user/dev/routewatch/internal/routewatch/peeringhandler.go:52 +0xec
+
+goroutine 50 [select, 3 minutes]:
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*PeeringHandler).pruneLoop(0x1400003e200)
+ /Users/user/dev/routewatch/internal/routewatch/peeringhandler.go:115 +0xa4
+created by git.eeqj.de/sneak/routewatch/internal/routewatch.NewPeeringHandler in goroutine 6
+ /Users/user/dev/routewatch/internal/routewatch/peeringhandler.go:53 +0x12c
+
+goroutine 8 [sync.Mutex.Lock]:
+internal/sync.runtime_SemacquireMutex(0x100a9928a?, 0x4?, 0x19?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/runtime/sema.go:95 +0x28
+internal/sync.(*Mutex).lockSlow(0x140000d6840)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/internal/sync/mutex.go:149 +0x170
+internal/sync.(*Mutex).Lock(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/internal/sync/mutex.go:70
+sync.(*Mutex).Lock(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/sync/mutex.go:46
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).lock(0x140000d6820, {0x100aa3a1f, 0x13})
+ /Users/user/dev/routewatch/internal/database/database.go:145 +0x18c
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetOrCreateASNBatch(0x140000d6820, 0x14010f95da0)
+ /Users/user/dev/routewatch/internal/database/database.go:331 +0x50
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*ASHandler).flushBatchLocked(0x140001220e0)
+ /Users/user/dev/routewatch/internal/routewatch/ashandler.go:150 +0x138
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*ASHandler).HandleMessage(0x140001220e0, 0x1401c1e87e0)
+ /Users/user/dev/routewatch/internal/routewatch/ashandler.go:106 +0x2d0
+git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).runHandlerWorker(0x1400003e200?, 0x140001440a0)
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:168 +0x78
+created by git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).Start in goroutine 6
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:134 +0x128
+
+goroutine 9 [sync.Mutex.Lock]:
+internal/sync.runtime_SemacquireMutex(0x100a9928a?, 0x4?, 0x19?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/runtime/sema.go:95 +0x28
+internal/sync.(*Mutex).lockSlow(0x140000d6840)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/internal/sync/mutex.go:149 +0x170
+internal/sync.(*Mutex).Lock(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/internal/sync/mutex.go:70
+sync.(*Mutex).Lock(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/sync/mutex.go:46
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).lock(0x140000d6820, {0x100aa0e27, 0xf})
+ /Users/user/dev/routewatch/internal/database/database.go:145 +0x18c
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).UpdatePeerBatch(0x140000d6820, 0x14014fd8360)
+ /Users/user/dev/routewatch/internal/database/database.go:639 +0x50
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*PeerHandler).flushBatchLocked(0x140001221c0)
+ /Users/user/dev/routewatch/internal/routewatch/peerhandler.go:150 +0x35c
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*PeerHandler).HandleMessage(0x140001221c0, 0x1400bd92480)
+ /Users/user/dev/routewatch/internal/routewatch/peerhandler.go:95 +0x1f8
+git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).runHandlerWorker(0x140000ce070?, 0x140001440f0)
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:168 +0x78
+created by git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).Start in goroutine 6
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:134 +0x128
+
+goroutine 10 [runnable]:
+github.com/mattn/go-sqlite3._Cfunc__sqlite3_step_row_internal(0x5256b9600, 0x140105413f8, 0x14010541480)
+ _cgo_gotypes.go:397 +0x34
+github.com/mattn/go-sqlite3.(*SQLiteStmt).execSync.func3(...)
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2124
+github.com/mattn/go-sqlite3.(*SQLiteStmt).execSync(0x1401d62c060, {0x140052a81c0?, 0x9ad19cff?, 0x10059cd00?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2124 +0x94
+github.com/mattn/go-sqlite3.(*SQLiteStmt).exec(0x1401d62c060, {0x100c9ea00, 0x1012a9420}, {0x140052a81c0, 0xb, 0xb})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2085 +0x308
+github.com/mattn/go-sqlite3.(*SQLiteStmt).ExecContext(0x1400011b608?, {0x100c9ea00?, 0x1012a9420?}, {0x140052a81c0?, 0x1?, 0x1005b5750?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3_go18.go:53 +0x28
+database/sql.ctxDriverStmtExec({0x100c9ea00, 0x1012a9420}, {0x100c9eca0, 0x1401d62c060}, {0x140052a81c0, 0xb, 0x140035148d0?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/ctxutil.go:65 +0x9c
+database/sql.resultFromStatement({0x100c9ea00, 0x1012a9420}, {0x100c9e1d8, 0x14003d0d260}, 0x1400e2eb180, {0x1400011b568, 0xb, 0xb})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:2680 +0xd4
+database/sql.(*Stmt).ExecContext.func1(0x0?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:2654 +0x8c
+database/sql.(*DB).retry(0x1400011b388?, 0x1400011b3a0)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1576 +0x4c
+database/sql.(*Stmt).ExecContext(0x100c8d800?, {0x100c9ea00?, 0x1012a9420?}, {0x1400011b568?, 0x1f6?, 0x146798250?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:2648 +0x124
+database/sql.(*Stmt).Exec(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:2668
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).UpsertLiveRouteBatch(0x140000d6820, {0x14004b36000, 0x1c14, 0x1907?})
+ /Users/user/dev/routewatch/internal/database/database.go:230 +0x4a0
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*PrefixHandler).flushBatchLocked(0x140000ce070)
+ /Users/user/dev/routewatch/internal/routewatch/prefixhandler.go:207 +0x554
+git.eeqj.de/sneak/routewatch/internal/routewatch.(*PrefixHandler).HandleMessage(0x140000ce070, 0x140068966c0)
+ /Users/user/dev/routewatch/internal/routewatch/prefixhandler.go:133 +0x308
+git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).runHandlerWorker(0x0?, 0x140000d6000)
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:168 +0x78
+created by git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).Start in goroutine 6
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:134 +0x128
+
+goroutine 11 [chan receive]:
+git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).runHandlerWorker(0x0?, 0x140000d6050)
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:166 +0x38
+created by git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).Start in goroutine 6
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:134 +0x128
+
+goroutine 12 [runnable]:
+encoding/json.(*decodeState).literalStore(0x14005136870, {0x14001251fcf, 0x13e, 0x4031}, {0x100bcb3a0?, 0x1400513e120?, 0x14000b5b468?}, 0x0)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/encoding/json/decode.go:953 +0x838
+encoding/json.(*decodeState).value(0x14005136870, {0x100bcb3a0?, 0x1400513e120?, 0x3?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/encoding/json/decode.go:389 +0x114
+encoding/json.(*decodeState).object(0x14005136870, {0x100c82e60?, 0x1400513e010?, 0x4237?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/encoding/json/decode.go:762 +0xae4
+encoding/json.(*decodeState).value(0x14005136870, {0x100c82e60?, 0x1400513e010?, 0x0?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/encoding/json/decode.go:375 +0x40
+encoding/json.(*decodeState).object(0x14005136870, {0x100bb66c0?, 0x1400513e000?, 0x100668090?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/encoding/json/decode.go:762 +0xae4
+encoding/json.(*decodeState).value(0x14005136870, {0x100bb66c0?, 0x1400513e000?, 0x100667b90?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/encoding/json/decode.go:375 +0x40
+encoding/json.(*decodeState).unmarshal(0x14005136870, {0x100bb66c0?, 0x1400513e000?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/encoding/json/decode.go:178 +0x100
+encoding/json.Unmarshal({0x14001251dc1, 0x34e, 0x423f}, {0x100bb66c0, 0x1400513e000})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/encoding/json/decode.go:108 +0xe4
+git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).stream(0x14000232000, {0x100c9ea70, 0x14000144000})
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:396 +0x440
+git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).Start.func1()
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:138 +0x2c
+created by git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).Start in goroutine 6
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:137 +0x1f8
+
+goroutine 66 [runnable]:
+syscall.Getsockname(0x27?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/syscall/syscall_bsd.go:298 +0x90
+net.(*netFD).accept(0x140000d4080)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/fd_unix.go:188 +0x19c
+net.(*TCPListener).accept(0x14000116000)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/tcpsock_posix.go:159 +0x24
+net.(*TCPListener).Accept(0x14000116000)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/tcpsock.go:380 +0x2c
+net/http.(*Server).Serve(0x1400014e100, {0x100c9e118, 0x14000116000})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/server.go:3424 +0x290
+net/http.(*Server).ListenAndServe(0x1400014e100)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/server.go:3350 +0x84
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).Start.func1()
+ /Users/user/dev/routewatch/internal/server/server.go:55 +0x28
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).Start in goroutine 6
+ /Users/user/dev/routewatch/internal/server/server.go:54 +0x19c
+
+goroutine 38 [select, 3 minutes]:
+net/http.(*persistConn).readLoop(0x14000000a20)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/transport.go:2395 +0xb04
+created by net/http.(*Transport).dialConn in goroutine 13
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/transport.go:1944 +0x11c4
+
+goroutine 477992 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 477991
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 39 [select, 3 minutes]:
+net/http.(*persistConn).writeLoop(0x14000000a20)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/transport.go:2590 +0x9c
+created by net/http.(*Transport).dialConn in goroutine 13
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/net/http/transport.go:1945 +0x120c
+
+goroutine 470084 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 470083
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 63 [select]:
+git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).stream.func2()
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:356 +0x94
+created by git.eeqj.de/sneak/routewatch/internal/streamer.(*Streamer).stream in goroutine 12
+ /Users/user/dev/routewatch/internal/streamer/streamer.go:354 +0x1cc
+
+goroutine 495650 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 493249
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 29330 [chan send, 3 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 28113
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 479864 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 479863
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 503528 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 503527
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 463058 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 460833
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 463034 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 463033
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 195877 [chan send, 2 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 195876
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 510362 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 510361
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 307156 [chan send, 1 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 307155
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 463037 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 463036
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 460828 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 460827
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 487943 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 487942
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 377779 [chan send, 1 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 377778
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 519252 [select]:
+database/sql.(*DB).conn(0x140000e7520, {0x100c9ea00, 0x1012a9420}, 0x1)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1369 +0x49c
+database/sql.(*DB).query(0x140000e7520, {0x100c9ea00, 0x1012a9420}, {0x100aad211, 0x20}, {0x0, 0x0, 0x0}, 0x98?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1759 +0x40
+database/sql.(*DB).QueryContext.func1(0x28?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1742 +0x54
+database/sql.(*DB).retry(0x0?, 0x140042b3c10)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1576 +0x4c
+database/sql.(*DB).QueryContext(0x140042b3cb8?, {0x100c9ea00?, 0x1012a9420?}, {0x100aad211?, 0x140047c4ac8?}, {0x0?, 0x0?, 0x140047c4a90?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1741 +0x94
+database/sql.(*DB).QueryRowContext(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1842
+database/sql.(*DB).QueryRow(0x140000324b0?, {0x100aad211?, 0x1e?}, {0x0?, 0x0?, 0x0?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1856 +0x48
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:799 +0x2ec
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 519251
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 493255 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 493254
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 506087 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 506086
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 502448 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 502447
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 510451 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 510450
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 198769 [chan send, 2 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 198768
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 479647 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 479646
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 470103 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 470102
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 503557 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 503556
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 498830 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 498829
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 493250 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 490705
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 472845 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 472844
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 1592 [chan send, 3 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 1591
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 503805 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 503804
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 506115 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 506114
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 502193 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 502192
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 228546 [chan send, 1 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 228545
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 514499 [syscall]:
+github.com/mattn/go-sqlite3._Cfunc__sqlite3_step_internal(0x533a81150)
+ _cgo_gotypes.go:384 +0x34
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked.func1(...)
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked(0x14004a5b800, {0x1400ae813e0, 0x2, 0x2?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233 +0x64
+github.com/mattn/go-sqlite3.(*SQLiteRows).Next(0x14004a5b800, {0x1400ae813e0, 0x2, 0x2})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2209 +0x2fc
+database/sql.(*Rows).nextLocked(0x140045a0820)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3066 +0x144
+database/sql.(*Rows).Next.func1()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3041 +0x30
+database/sql.withLock({0x100c9bee8, 0x140045a0858}, 0x14000b61b98)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3574 +0x74
+database/sql.(*Rows).Next(0x140045a0820)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3040 +0x74
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetPrefixDistribution(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:925 +0x38c
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:805 +0x3ec
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 514498
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 469632 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 469631
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 503838 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 503837
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 505325 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 505324
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 520147 [chan receive]:
+database/sql.(*Tx).awaitDone(0x1400ba2f380)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:2212 +0x34
+created by database/sql.(*DB).beginDC in goroutine 10
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1925 +0x19c
+
+goroutine 520757 [select]:
+database/sql.(*DB).conn(0x140000e7520, {0x100c9ea00, 0x1012a9420}, 0x1)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1369 +0x49c
+database/sql.(*DB).query(0x140000e7520, {0x100c9ea00, 0x1012a9420}, {0x100aaaec5, 0x1d}, {0x0, 0x0, 0x0}, 0x0?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1759 +0x40
+database/sql.(*DB).QueryContext.func1(0x58?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1742 +0x54
+database/sql.(*DB).retry(0x406fb88?, 0x1400406fb80)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1576 +0x4c
+database/sql.(*DB).QueryContext(0x3a85f48d34b?, {0x100c9ea00?, 0x1012a9420?}, {0x100aaaec5?, 0x9867822fb935?}, {0x0?, 0xe85f0f80406fc48?, 0x6887ade8?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1741 +0x94
+database/sql.(*DB).QueryRowContext(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1842
+database/sql.(*DB).QueryRow(0x14004049180?, {0x100aaaec5?, 0x1400406fcd8?}, {0x0?, 0x14004049180?, 0x1400406fdc0?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1856 +0x48
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).queryRow(0x140000d6820, {0x100aaaec5, 0x1d}, {0x0, 0x0, 0x0})
+ /Users/user/dev/routewatch/internal/database/slowquery.go:26 +0xb4
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:759 +0xb4
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 520756
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 482735 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 482734
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 470079 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 470078
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 24764 [chan send, 3 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 24763
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 515927 [runnable]:
+github.com/mattn/go-sqlite3._Cfunc__sqlite3_step_internal(0x548f10ca0)
+ _cgo_gotypes.go:384 +0x34
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked.func1(...)
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked(0x1401c1999e0, {0x14004603560, 0x2, 0x10059d998?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233 +0x64
+github.com/mattn/go-sqlite3.(*SQLiteRows).Next(0x1401c1999e0, {0x14004603560, 0x2, 0x2})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2209 +0x2fc
+database/sql.(*Rows).nextLocked(0x140047288c0)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3066 +0x144
+database/sql.(*Rows).Next.func1()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3041 +0x30
+database/sql.withLock({0x100c9bee8, 0x140047288f8}, 0x14000199b98)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3574 +0x74
+database/sql.(*Rows).Next(0x140047288c0)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3040 +0x74
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetPrefixDistribution(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:903 +0x168
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:805 +0x3ec
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 515926
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 472866 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 471937
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 469646 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 469645
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 518752 [syscall]:
+github.com/mattn/go-sqlite3._Cfunc__sqlite3_step_internal(0x547a61ab0)
+ _cgo_gotypes.go:384 +0x34
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked.func1(...)
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked(0x1400af3ad80, {0x14016cd2d20, 0x2, 0x10059d998?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233 +0x64
+github.com/mattn/go-sqlite3.(*SQLiteRows).Next(0x1400af3ad80, {0x14016cd2d20, 0x2, 0x2})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2209 +0x2fc
+database/sql.(*Rows).nextLocked(0x14004049220)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3066 +0x144
+database/sql.(*Rows).Next.func1()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3041 +0x30
+database/sql.withLock({0x100c9bee8, 0x14004049258}, 0x14018967b98)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3574 +0x74
+database/sql.(*Rows).Next(0x14004049220)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3040 +0x74
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetPrefixDistribution(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:903 +0x168
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:805 +0x3ec
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 518751
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 495636 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 495635
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 508808 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 508807
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 482730 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 482729
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 493056 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 493055
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 468137 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 468136
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 514512 [syscall]:
+github.com/mattn/go-sqlite3._Cfunc__sqlite3_step_internal(0x15002bb80)
+ _cgo_gotypes.go:384 +0x34
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked.func1(...)
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked(0x1401c199920, {0x14004602760, 0x2, 0x10059d998?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233 +0x64
+github.com/mattn/go-sqlite3.(*SQLiteRows).Next(0x1401c199920, {0x14004602760, 0x2, 0x2})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2209 +0x2fc
+database/sql.(*Rows).nextLocked(0x14004728780)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3066 +0x144
+database/sql.(*Rows).Next.func1()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3041 +0x30
+database/sql.withLock({0x100c9bee8, 0x140047287b8}, 0x14007e6fb98)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3574 +0x74
+database/sql.(*Rows).Next(0x14004728780)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3040 +0x74
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetPrefixDistribution(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:903 +0x168
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:805 +0x3ec
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 514511
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 462205 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 462204
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 472872 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 472871
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 463017 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 463016
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 455221 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 455220
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 463020 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 463019
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 513244 [syscall]:
+github.com/mattn/go-sqlite3._Cfunc__sqlite3_step_internal(0x53f6b28c0)
+ _cgo_gotypes.go:384 +0x34
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked.func1(...)
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked(0x140179cf140, {0x1401a898e00, 0x2, 0x10059d998?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233 +0x64
+github.com/mattn/go-sqlite3.(*SQLiteRows).Next(0x140179cf140, {0x1401a898e00, 0x2, 0x2})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2209 +0x2fc
+database/sql.(*Rows).nextLocked(0x1400259dea0)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3066 +0x144
+database/sql.(*Rows).Next.func1()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3041 +0x30
+database/sql.withLock({0x100c9bee8, 0x1400259ded8}, 0x14003117b98)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3574 +0x74
+database/sql.(*Rows).Next(0x1400259dea0)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3040 +0x74
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetPrefixDistribution(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:925 +0x38c
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:805 +0x3ec
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 513243
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 472854 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 472853
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 479753 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 479752
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 479183 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 479182
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 466968 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 466967
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 507901 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 507900
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 497830 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 497829
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 520509 [select]:
+database/sql.(*DB).conn(0x140000e7520, {0x100c9ea00, 0x1012a9420}, 0x1)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1369 +0x49c
+database/sql.(*DB).query(0x140000e7520, {0x100c9ea00, 0x1012a9420}, {0x100aa7e95, 0x19}, {0x0, 0x0, 0x0}, 0x0?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1759 +0x40
+database/sql.(*DB).QueryContext.func1(0xb8?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1742 +0x54
+database/sql.(*DB).retry(0x108?, 0x14019ba1b80)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1576 +0x4c
+database/sql.(*DB).QueryContext(0x3a85f9055dd?, {0x100c9ea00?, 0x1012a9420?}, {0x100aa7e95?, 0x98678dd34ef8?}, {0x0?, 0x1a298e3819ba1c78?, 0x6887ade8?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1741 +0x94
+database/sql.(*DB).QueryRowContext(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1842
+database/sql.(*DB).QueryRow(0x101484f30?, {0x100aa7e95?, 0x14000093808?}, {0x0?, 0x14019ba1ca8?, 0x10054105c?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1856 +0x48
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).queryRow(0x140000d6820, {0x100aa7e95, 0x19}, {0x0, 0x0, 0x0})
+ /Users/user/dev/routewatch/internal/database/slowquery.go:26 +0xb4
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:753 +0x6c
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 520508
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 371676 [chan send, 1 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 371675
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 506077 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 506076
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 503578 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 503577
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 503573 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 503572
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 470116 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 470115
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 510455 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 510454
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 510438 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 510437
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 493245 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 493244
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 477996 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 477995
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 475968 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 475967
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 519985 [select]:
+database/sql.(*DB).conn(0x140000e7520, {0x100c9ea00, 0x1012a9420}, 0x1)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1369 +0x49c
+database/sql.(*DB).query(0x140000e7520, {0x100c9ea00, 0x1012a9420}, {0x100aaaec5, 0x1d}, {0x0, 0x0, 0x0}, 0x0?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1759 +0x40
+database/sql.(*DB).QueryContext.func1(0x58?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1742 +0x54
+database/sql.(*DB).retry(0x19bb88?, 0x1400019bb80)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1576 +0x4c
+database/sql.(*DB).QueryContext(0x3a85f48d621?, {0x100c9ea00?, 0x1012a9420?}, {0x100aaaec5?, 0x986782302f5f?}, {0x0?, 0xe866a100019bc48?, 0x6887ade8?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1741 +0x94
+database/sql.(*DB).QueryRowContext(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1842
+database/sql.(*DB).QueryRow(0x1400259de00?, {0x100aaaec5?, 0x1400019bcd8?}, {0x0?, 0x1400259de00?, 0x1400019bdc0?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1856 +0x48
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).queryRow(0x140000d6820, {0x100aaaec5, 0x1d}, {0x0, 0x0, 0x0})
+ /Users/user/dev/routewatch/internal/database/slowquery.go:26 +0xb4
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:759 +0xb4
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 519984
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 503554 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 501905
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 487954 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 481425
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 479830 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 479829
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 478289 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 478288
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 518965 [syscall]:
+github.com/mattn/go-sqlite3._Cfunc__sqlite3_step_internal(0x3b16e9f60)
+ _cgo_gotypes.go:384 +0x34
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked.func1(...)
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked(0x1401a1df3e0, {0x140100b0a00, 0x2, 0x10059d998?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233 +0x64
+github.com/mattn/go-sqlite3.(*SQLiteRows).Next(0x1401a1df3e0, {0x140100b0a00, 0x2, 0x2})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2209 +0x2fc
+database/sql.(*Rows).nextLocked(0x1400357d860)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3066 +0x144
+database/sql.(*Rows).Next.func1()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3041 +0x30
+database/sql.withLock({0x100c9bee8, 0x1400357d898}, 0x14007e6db98)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3574 +0x74
+database/sql.(*Rows).Next(0x1400357d860)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3040 +0x74
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetPrefixDistribution(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:903 +0x168
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:805 +0x3ec
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 518964
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 510357 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 510356
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 475135 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 475134
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 489915 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 489914
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 503542 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 503541
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 495258 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 495257
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 510427 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 510426
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 479842 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 479825
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 495628 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 495627
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 472431 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 472430
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 472491 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 472490
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 495647 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 495646
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 497491 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 497490
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 470099 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 470098
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 503592 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 503591
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 503595 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 503594
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 510447 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 510446
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 479641 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 479640
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 377777 [chan send, 1 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 377776
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 222302 [chan send, 1 minutes]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 222301
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 488274 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 488273
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 517123 [syscall]:
+github.com/mattn/go-sqlite3._Cfunc__sqlite3_step_internal(0x52455a8c0)
+ _cgo_gotypes.go:384 +0x34
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked.func1(...)
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked(0x14013811ec0, {0x1401d327e80, 0x2, 0x10059d998?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233 +0x64
+github.com/mattn/go-sqlite3.(*SQLiteRows).Next(0x14013811ec0, {0x1401d327e80, 0x2, 0x2})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2209 +0x2fc
+database/sql.(*Rows).nextLocked(0x14004289d60)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3066 +0x144
+database/sql.(*Rows).Next.func1()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3041 +0x30
+database/sql.withLock({0x100c9bee8, 0x14004289d98}, 0x14000b5fb98)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3574 +0x74
+database/sql.(*Rows).Next(0x14004289d60)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3040 +0x74
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetPrefixDistribution(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:903 +0x168
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:805 +0x3ec
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 517122
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 487971 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 487970
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 506047 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 506046
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 513865 [syscall]:
+github.com/mattn/go-sqlite3._Cfunc__sqlite3_step_internal(0x300bf9ab0)
+ _cgo_gotypes.go:384 +0x34
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked.func1(...)
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked(0x140047d81e0, {0x14019d445a0, 0x2, 0x10059d998?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233 +0x64
+github.com/mattn/go-sqlite3.(*SQLiteRows).Next(0x140047d81e0, {0x14019d445a0, 0x2, 0x2})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2209 +0x2fc
+database/sql.(*Rows).nextLocked(0x140047bfae0)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3066 +0x144
+database/sql.(*Rows).Next.func1()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3041 +0x30
+database/sql.withLock({0x100c9bee8, 0x140047bfb18}, 0x14000b5db98)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3574 +0x74
+database/sql.(*Rows).Next(0x140047bfae0)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3040 +0x74
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetPrefixDistribution(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:925 +0x38c
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:805 +0x3ec
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 513864
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 520748 [select]:
+database/sql.(*DB).conn(0x140000e7520, {0x100c9ea00, 0x1012a9420}, 0x1)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1369 +0x49c
+database/sql.(*DB).query(0x140000e7520, {0x100c9ea00, 0x1012a9420}, {0x100aa7e95, 0x19}, {0x0, 0x0, 0x0}, 0x0?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1759 +0x40
+database/sql.(*DB).QueryContext.func1(0xb8?)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1742 +0x54
+database/sql.(*DB).retry(0x108?, 0x1400c7a6b80)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1576 +0x4c
+database/sql.(*DB).QueryContext(0x3a85f906592?, {0x100c9ea00?, 0x1012a9420?}, {0x100aa7e95?, 0x98678dd5dd6e?}, {0x0?, 0x1a2c1a900c7a6c78?, 0x6887ade8?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1741 +0x94
+database/sql.(*DB).QueryRowContext(...)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1842
+database/sql.(*DB).QueryRow(0x1014853e8?, {0x100aa7e95?, 0x14000101008?}, {0x0?, 0x1400c7a6ca8?, 0x10054105c?})
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:1856 +0x48
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).queryRow(0x140000d6820, {0x100aa7e95, 0x19}, {0x0, 0x0, 0x0})
+ /Users/user/dev/routewatch/internal/database/slowquery.go:26 +0xb4
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:753 +0x6c
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 520747
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 479826 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 479633
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 469628 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 469627
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 506084 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 506083
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 506101 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 506100
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 479858 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 479185
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 463009 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 463008
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 509536 [syscall]:
+github.com/mattn/go-sqlite3._Cfunc__sqlite3_step_internal(0x5492c0ca0)
+ _cgo_gotypes.go:384 +0x34
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked.func1(...)
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233
+github.com/mattn/go-sqlite3.(*SQLiteRows).nextSyncLocked(0x1401a1df620, {0x140100b1ae0, 0x2, 0x10059d998?})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2233 +0x64
+github.com/mattn/go-sqlite3.(*SQLiteRows).Next(0x1401a1df620, {0x140100b1ae0, 0x2, 0x2})
+ /Users/user/go/pkg/mod/github.com/mattn/go-sqlite3@v1.14.29/sqlite3.go:2209 +0x2fc
+database/sql.(*Rows).nextLocked(0x1400357da40)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3066 +0x144
+database/sql.(*Rows).Next.func1()
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3041 +0x30
+database/sql.withLock({0x100c9bee8, 0x1400357da78}, 0x14019a43b98)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3574 +0x74
+database/sql.(*Rows).Next(0x1400357da40)
+ /nix/store/f4a0g1p943l61wfvqnpdr73v9bsyfhf2-go-1.24.4/share/go/src/database/sql/sql.go:3040 +0x74
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetPrefixDistribution(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:925 +0x38c
+git.eeqj.de/sneak/routewatch/internal/database.(*Database).GetStats(0x140000d6820)
+ /Users/user/dev/routewatch/internal/database/database.go:805 +0x3ec
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:237 +0x64
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 509535
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 510430 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 510429
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 508811 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 508810
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 489920 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 489919
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 470072 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 470071
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 510442 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 510441
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 469502 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 469501
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 489896 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 489895
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 495642 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 495641
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0
+
+goroutine 497523 [chan send]:
+git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1.1()
+ /Users/user/dev/routewatch/internal/server/handlers.go:244 +0x180
+created by git.eeqj.de/sneak/routewatch/internal/server.(*Server).setupRoutes.func1.(*Server).handleStats.1 in goroutine 497522
+ /Users/user/dev/routewatch/internal/server/handlers.go:236 +0x1a0