|
|
|
@ -139,30 +139,44 @@ namespace llarp
|
|
|
|
|
// Compute all stats on all path builders on the default endpoint
|
|
|
|
|
// Merge snodeSessions, remoteSessions and default into a single array
|
|
|
|
|
std::vector<nlohmann::json> builders;
|
|
|
|
|
auto snode_sessions = services["default"]["snodeSessions"];
|
|
|
|
|
|
|
|
|
|
const auto& serviceDefault = services.at("default");
|
|
|
|
|
builders.push_back(serviceDefault);
|
|
|
|
|
|
|
|
|
|
auto snode_sessions = serviceDefault.at("snodeSessions");
|
|
|
|
|
for (const auto& session : snode_sessions)
|
|
|
|
|
builders.push_back(session["buildStats"]);
|
|
|
|
|
builders.push_back(session);
|
|
|
|
|
|
|
|
|
|
auto remote_sessions = services["default"]["remoteSessions"];
|
|
|
|
|
auto remote_sessions = serviceDefault.at("remoteSessions");
|
|
|
|
|
for (const auto& session : remote_sessions)
|
|
|
|
|
builders.push_back(session["buildStats"]);
|
|
|
|
|
|
|
|
|
|
builders.push_back(services["default"]["buildStats"]);
|
|
|
|
|
builders.push_back(session);
|
|
|
|
|
|
|
|
|
|
// Iterate over all items on this array to build the global pathStats
|
|
|
|
|
uint64_t paths = 0;
|
|
|
|
|
uint64_t pathsCount = 0;
|
|
|
|
|
uint64_t success = 0;
|
|
|
|
|
uint64_t attempts = 0;
|
|
|
|
|
for (const auto& builder : builders)
|
|
|
|
|
{
|
|
|
|
|
if (builder.is_null())
|
|
|
|
|
continue;
|
|
|
|
|
if (builder["length"].is_number())
|
|
|
|
|
paths += builder["length"].get<uint64_t>();
|
|
|
|
|
if (builder["success"].is_number())
|
|
|
|
|
success += builder["success"].get<uint64_t>();
|
|
|
|
|
if (builder["attempts"].is_number())
|
|
|
|
|
attempts += builder["attempts"].get<uint64_t>();
|
|
|
|
|
|
|
|
|
|
const auto& paths = builder.at("paths");
|
|
|
|
|
if (paths.is_array())
|
|
|
|
|
{
|
|
|
|
|
for (const auto& [key, value] : paths.items())
|
|
|
|
|
{
|
|
|
|
|
if (value.is_object() && value.at("status").is_string()
|
|
|
|
|
&& value.at("status") == "established")
|
|
|
|
|
pathsCount++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const auto& buildStats = builder.at("buildStats");
|
|
|
|
|
if (buildStats.is_null())
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
success += buildStats.at("success").get<uint64_t>();
|
|
|
|
|
attempts += buildStats.at("attempts").get<uint64_t>();
|
|
|
|
|
}
|
|
|
|
|
double ratio = static_cast<double>(success) / (attempts + 1);
|
|
|
|
|
|
|
|
|
@ -171,7 +185,7 @@ namespace llarp
|
|
|
|
|
{"authCodes", services["default"]["authCodes"]},
|
|
|
|
|
{"exitMap", services["default"]["exitMap"]},
|
|
|
|
|
{"lokiAddress", services["default"]["identity"]},
|
|
|
|
|
{"numPathsBuilt", paths},
|
|
|
|
|
{"numPathsBuilt", pathsCount},
|
|
|
|
|
{"numPeersConnected", peers},
|
|
|
|
|
{"numRoutersKnown", _nodedb->NumLoaded()},
|
|
|
|
|
{"ratio", ratio},
|
|
|
|
|