diff --git a/llarp/router/router.cpp b/llarp/router/router.cpp index ca981315f..fea94dafb 100644 --- a/llarp/router/router.cpp +++ b/llarp/router/router.cpp @@ -95,18 +95,17 @@ namespace llarp util::StatusObject Router::ExtractStatus() const { - if (_running) - { - return util::StatusObject{ - {"running", true}, - {"numNodesKnown", _nodedb->NumLoaded()}, - {"dht", _dht->impl->ExtractStatus()}, - {"services", _hiddenServiceContext.ExtractStatus()}, - {"exit", _exitContext.ExtractStatus()}, - {"links", _linkManager.ExtractStatus()}, - {"outboundMessages", _outboundMessageHandler.ExtractStatus()}}; - } - return util::StatusObject{{"running", false}}; + if (not _running) + util::StatusObject{{"running", false}}; + + return util::StatusObject{ + {"running", true}, + {"numNodesKnown", _nodedb->NumLoaded()}, + {"dht", _dht->impl->ExtractStatus()}, + {"services", _hiddenServiceContext.ExtractStatus()}, + {"exit", _exitContext.ExtractStatus()}, + {"links", _linkManager.ExtractStatus()}, + {"outboundMessages", _outboundMessageHandler.ExtractStatus()}}; } util::StatusObject @@ -116,6 +115,7 @@ namespace llarp return util::StatusObject{{"running", false}}; auto services = _hiddenServiceContext.ExtractStatus(); + auto link_types = _linkManager.ExtractStatus(); uint64_t tx_rate = 0; @@ -140,16 +140,19 @@ namespace llarp // Merge snodeSessions, remoteSessions and default into a single array std::vector builders; - const auto& serviceDefault = services.at("default"); - builders.push_back(serviceDefault); + if (services.is_object()) + { + 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); + auto snode_sessions = serviceDefault.at("snodeSessions"); + for (const auto& session : snode_sessions) + builders.push_back(session); - auto remote_sessions = serviceDefault.at("remoteSessions"); - for (const auto& session : remote_sessions) - builders.push_back(session); + auto remote_sessions = serviceDefault.at("remoteSessions"); + for (const auto& session : remote_sessions) + builders.push_back(session); + } // Iterate over all items on this array to build the global pathStats uint64_t pathsCount = 0; @@ -180,13 +183,10 @@ namespace llarp } double ratio = static_cast(success) / (attempts + 1); - return util::StatusObject{ + util::StatusObject stats{ {"running", true}, {"version", llarp::VERSION_FULL}, {"uptime", to_json(Uptime())}, - {"authCodes", services["default"]["authCodes"]}, - {"exitMap", services["default"]["exitMap"]}, - {"lokiAddress", services["default"]["identity"]}, {"numPathsBuilt", pathsCount}, {"numPeersConnected", peers}, {"numRoutersKnown", _nodedb->NumLoaded()}, @@ -194,6 +194,14 @@ namespace llarp {"txRate", tx_rate}, {"rxRate", rx_rate}, }; + + if (services.is_object()) + { + stats["authCodes"] = services["default"]["authCodes"]; + stats["exitMap"] = services["default"]["exitMap"]; + stats["lokiAddress"] = services["default"]["identity"]; + } + return stats; } bool