From 83f2b272a7611adc0cff0c878518715fd35c02f0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Sun, 1 Dec 2019 15:07:11 -0500
Subject: [PATCH] dhtrunner: add ongoing op count to node info

---
 include/opendht/callbacks.h | 1 +
 include/opendht/dhtrunner.h | 2 +-
 src/callbacks.cpp           | 2 ++
 src/dhtrunner.cpp           | 1 +
 tools/dhtnode.cpp           | 6 ++++--
 5 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/include/opendht/callbacks.h b/include/opendht/callbacks.h
index 21fad568..5619b927 100644
--- a/include/opendht/callbacks.h
+++ b/include/opendht/callbacks.h
@@ -78,6 +78,7 @@ struct OPENDHT_PUBLIC NodeInfo {
     InfoHash node_id;
     NodeStats ipv4;
     NodeStats ipv6;
+    size_t ongoing_ops;
 
 #ifdef OPENDHT_JSONCPP
     /**
diff --git a/include/opendht/dhtrunner.h b/include/opendht/dhtrunner.h
index 65ecdba8..551601ef 100644
--- a/include/opendht/dhtrunner.h
+++ b/include/opendht/dhtrunner.h
@@ -522,7 +522,7 @@ private:
     std::mutex storage_mtx {};
 
     std::atomic<State> running {State::Idle};
-    std::atomic_uint ongoing_ops {0};
+    std::atomic_size_t ongoing_ops {0};
     std::vector<ShutdownCallback> shutdownCallbacks_;
 
     NodeStatus status4 {NodeStatus::Disconnected},
diff --git a/src/callbacks.cpp b/src/callbacks.cpp
index 8d85155f..70b623b8 100644
--- a/src/callbacks.cpp
+++ b/src/callbacks.cpp
@@ -121,6 +121,7 @@ NodeInfo::toJson() const
     val["node_id"] = node_id.toString();
     val["ipv4"] = ipv4.toJson();
     val["ipv6"] = ipv6.toJson();
+    val["ops"] = Json::Value::LargestUInt(ongoing_ops);
     return val;
 }
 
@@ -131,6 +132,7 @@ NodeInfo::NodeInfo(const Json::Value& v)
     node_id = InfoHash(v["node_id"].asString());
     ipv4 = NodeStats(v["ipv4"]);
     ipv6 = NodeStats(v["ipv6"]);
+    ongoing_ops = v["ops"].asLargestUInt();
 }
 
 #endif
diff --git a/src/dhtrunner.cpp b/src/dhtrunner.cpp
index 26732405..8701db9b 100644
--- a/src/dhtrunner.cpp
+++ b/src/dhtrunner.cpp
@@ -467,6 +467,7 @@ DhtRunner::getNodeInfo() const {
     NodeInfo info;
     info.id = getId();
     info.node_id = getNodeId();
+    info.ongoing_ops = ongoing_ops;
     info.ipv4 = dht_->getNodesStats(AF_INET);
     info.ipv6 = dht_->getNodesStats(AF_INET6);
     return info;
diff --git a/tools/dhtnode.cpp b/tools/dhtnode.cpp
index 4c5dbefb..7b200b9b 100644
--- a/tools/dhtnode.cpp
+++ b/tools/dhtnode.cpp
@@ -140,11 +140,13 @@ void cmd_loop(std::shared_ptr<DhtRunner>& node, dht_params& params
             print_help();
             continue;
         } else if (op == "ll") {
+            auto nodeInfo = node->getNodeInfo();
             print_node_info(*node, params);
+            std::cout << nodeInfo.ongoing_ops << " ongoing operations" << std::endl;
             std::cout << "IPv4 stats:" << std::endl;
-            std::cout << node->getNodesStats(AF_INET).toString() << std::endl;
+            std::cout << nodeInfo.ipv4.toString() << std::endl;
             std::cout << "IPv6 stats:" << std::endl;
-            std::cout << node->getNodesStats(AF_INET6).toString() << std::endl;
+            std::cout << nodeInfo.ipv6.toString() << std::endl;
 #ifdef OPENDHT_PROXY_SERVER
             for (const auto& proxy : proxies) {
                 std::cout << "Stats for proxy on port " << proxy.first << std::endl;
-- 
GitLab