From a2dd0a756d4e296d2ce3cac6e16a2dc99fb6f5f8 Mon Sep 17 00:00:00 2001 From: zzz Date: Tue, 4 Jun 2024 08:31:32 -0400 Subject: [PATCH] Router: Add synthetic stats for client and expl. build success rate derived from event counts of existing stats requires full stats setting --- .../i2p/router/tasks/CoalesceStatsEvent.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java b/router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java index 391216a53..e369bf996 100644 --- a/router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java +++ b/router/java/src/net/i2p/router/tasks/CoalesceStatsEvent.java @@ -44,6 +44,8 @@ public class CoalesceStatsEvent implements SimpleTimer.TimedEvent { sm.createRateStat("router.integratedPeers", "Known integrated (floodfill) peers", "NetworkDatabase", new long[] { 60*1000 }); sm.createRateStat("router.knownPeers", "Known peers", "NetworkDatabase", new long[] { 60*1000 }); sm.createRequiredRateStat("router.tunnelBacklog", _x("Size of tunnel acceptor backlog"), "Tunnels", new long[] { 60*60*1000 }); + sm.createRateStat("tunnel.buildClientSuccessRate", "Percent success", "Tunnels", new long[] { 60*1000 }); + sm.createRateStat("tunnel.buildExploratorySuccessRate", "Percent success", "Tunnels", new long[] { 60*1000 }); _maxMemory = Runtime.getRuntime().maxMemory(); String legend = "(Bytes)"; if (_maxMemory < Long.MAX_VALUE) @@ -104,6 +106,38 @@ public class CoalesceStatsEvent implements SimpleTimer.TimedEvent { sm.addRateData("router.integratedPeers", integrated); sm.addRateData("router.knownPeers", _ctx.netDb().getKnownRouters()); + + RateStat s1 = sm.getRate("tunnel.buildExploratorySuccess"); + RateStat s2 = sm.getRate("tunnel.buildExploratoryExpire"); + RateStat s3 = sm.getRate("tunnel.buildExploratoryReject"); + if (s1 != null && s2 != null && s3 != null) { + Rate r1 = s1.getRate(10*60*1000); + Rate r2 = s2.getRate(10*60*1000); + Rate r3 = s3.getRate(10*60*1000); + if (r1 != null && r2 != null && r3 != null) { + long s = r1.getCurrentEventCount() + r1.getLastEventCount(); + long t = s + r2.getCurrentEventCount() + r2.getLastEventCount() + + r3.getCurrentEventCount() + r3.getLastEventCount(); + if (t > 0) + sm.addRateData("tunnel.buildExploratorySuccessRate", 100 * s / t, 60*1000); + } + } + + s1 = sm.getRate("tunnel.buildClientSuccess"); + s2 = sm.getRate("tunnel.buildClientExpire"); + s3 = sm.getRate("tunnel.buildClientReject"); + if (s1 != null && s2 != null && s3 != null) { + Rate r1 = s1.getRate(10*60*1000); + Rate r2 = s2.getRate(10*60*1000); + Rate r3 = s3.getRate(10*60*1000); + if (r1 != null && r2 != null && r3 != null) { + long s = r1.getCurrentEventCount() + r1.getLastEventCount(); + long t = s + r2.getCurrentEventCount() + r2.getLastEventCount() + + r3.getCurrentEventCount() + r3.getLastEventCount(); + if (t > 0) + sm.addRateData("tunnel.buildClientSuccessRate", 100 * s / t, 60*1000); + } + } } }