From 205584acdf8856d2a0b36ea1847e18df972e5536 Mon Sep 17 00:00:00 2001 From: Jeff Date: Thu, 13 Jan 2022 16:24:08 -0500 Subject: [PATCH] redo systemd status line to include number of paths and endpoint count. optionally warn about low path success. --- llarp/path/path_context.cpp | 16 +++++++++++++++- llarp/path/path_context.hpp | 4 ++++ llarp/router/router.cpp | 18 ++++++++++++------ llarp/service/endpoint.cpp | 6 ++++++ llarp/service/endpoint.hpp | 4 ++++ 5 files changed, 41 insertions(+), 7 deletions(-) diff --git a/llarp/path/path_context.cpp b/llarp/path/path_context.cpp index 028104696..f856ec3e8 100644 --- a/llarp/path/path_context.cpp +++ b/llarp/path/path_context.cpp @@ -319,10 +319,24 @@ namespace llarp PathContext::CurrentTransitPaths() { SyncTransitMap_t::Lock_t lock(m_TransitPaths.first); - auto& map = m_TransitPaths.second; + const auto& map = m_TransitPaths.second; return map.size() / 2; } + uint64_t + PathContext::CurrentOwnedPaths(path::PathStatus st) + { + uint64_t num{}; + util::Lock lock{m_OurPaths.first}; + auto& map = m_OurPaths.second; + for (auto itr = map.begin(); itr != map.end(); ++itr) + { + if (itr->second->Status() == st) + num++; + } + return num / 2; + } + void PathContext::PutTransitHop(std::shared_ptr hop) { diff --git a/llarp/path/path_context.hpp b/llarp/path/path_context.hpp index b53e11a06..af5b9e175 100644 --- a/llarp/path/path_context.hpp +++ b/llarp/path/path_context.hpp @@ -173,6 +173,10 @@ namespace llarp uint64_t CurrentTransitPaths(); + /// current number of paths we created in status + uint64_t + CurrentOwnedPaths(path::PathStatus status = path::PathStatus::ePathEstablished); + private: AbstractRouter* m_Router; SyncTransitMap_t m_TransitPaths; diff --git a/llarp/router/router.cpp b/llarp/router/router.cpp index 87816e7ae..2204e4766 100644 --- a/llarp/router/router.cpp +++ b/llarp/router/router.cpp @@ -822,12 +822,18 @@ namespace llarp else { ss << " client | known/connected: " << nodedb()->NumLoaded() << "/" - << NumberOfConnectedRouters() << " | path success: "; - hiddenServiceContext().ForEachService([&ss](const auto& name, const auto& ep) { - ss << " [" << name << " " << std::setprecision(4) - << (100.0 * ep->CurrentBuildStats().SuccessRatio()) << "%]"; - return true; - }); + << NumberOfConnectedRouters(); + if (auto ep = hiddenServiceContext().GetDefault()) + { + ss << " | paths/endpoints " << pathContext().CurrentOwnedPaths() << "/" + << ep->UniqueEndpoints(); + auto success_rate = ep->CurrentBuildStats().SuccessRatio(); + if (success_rate < 0.5) + { + ss << " [ !!! Low Build Success Rate (" << std::setprecision(4) + << (100.0 * success_rate) << "%) !!! ] "; + } + }; } const auto status = ss.str(); ::sd_notify(0, status.c_str()); diff --git a/llarp/service/endpoint.cpp b/llarp/service/endpoint.cpp index b513903aa..324f23eb8 100644 --- a/llarp/service/endpoint.cpp +++ b/llarp/service/endpoint.cpp @@ -695,6 +695,12 @@ namespace llarp } } + size_t + Endpoint::UniqueEndpoints() const + { + return m_state->m_RemoteSessions.size() + m_state->m_SNodeSessions.size(); + } + constexpr auto PublishIntrosetTimeout = 20s; bool diff --git a/llarp/service/endpoint.hpp b/llarp/service/endpoint.hpp index 418f6899d..b15add487 100644 --- a/llarp/service/endpoint.hpp +++ b/llarp/service/endpoint.hpp @@ -396,6 +396,10 @@ namespace llarp std::optional GetSeqNoForConvo(const ConvoTag& tag); + /// count unique endpoints we are talking to + size_t + UniqueEndpoints() const; + bool HasExit() const;