From fb0d98b3248b3eaba107b92a9ad9f6cfa595d239 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 19 Apr 2023 09:47:49 -0700 Subject: [PATCH] wire up some controller stats --- controller/DB.cpp | 44 ++++++++++++++++++++++++++++++++++----- controller/DB.hpp | 8 +++++-- controller/PostgreSQL.cpp | 5 ++++- 3 files changed, 49 insertions(+), 8 deletions(-) diff --git a/controller/DB.cpp b/controller/DB.cpp index 2edcadbbe..dcce5ea11 100644 --- a/controller/DB.cpp +++ b/controller/DB.cpp @@ -211,16 +211,19 @@ void DB::_memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool no { std::lock_guard l(_networks_l); auto nw2 = _networks.find(networkId); - if (nw2 != _networks.end()) + if (nw2 != _networks.end()) { nw = nw2->second; + } } if (nw) { std::lock_guard l(nw->lock); - if (OSUtils::jsonBool(old["activeBridge"],false)) + if (OSUtils::jsonBool(old["activeBridge"],false)) { nw->activeBridgeMembers.erase(memberId); + } wasAuth = OSUtils::jsonBool(old["authorized"],false); - if (wasAuth) + if (wasAuth) { nw->authorizedMembers.erase(memberId); + } json &ips = old["ipAssignments"]; if (ips.is_array()) { for(unsigned long i=0;imembers[memberId] = memberConfig; - if (OSUtils::jsonBool(memberConfig["activeBridge"],false)) + if (OSUtils::jsonBool(memberConfig["activeBridge"],false)) { nw->activeBridgeMembers.insert(memberId); + } isAuth = OSUtils::jsonBool(memberConfig["authorized"],false); - if (isAuth) + if (isAuth) { + _member_auths++; nw->authorizedMembers.insert(memberId); + } json &ips = memberConfig["ipAssignments"]; if (ips.is_array()) { for(unsigned long i=0;i ll(_changeListeners_l); for(auto i=_changeListeners.begin();i!=_changeListeners.end();++i) { @@ -313,6 +337,16 @@ void DB::_memberChanged(nlohmann::json &old,nlohmann::json &memberConfig,bool no void DB::_networkChanged(nlohmann::json &old,nlohmann::json &networkConfig,bool notifyListeners) { + if (notifyListeners) { + if (old.is_object() && old.contains("id") && networkConfig.is_object() && networkConfig.contains("id")) { + _network_changes++; + } else if (!old.is_object() && networkConfig.is_object() && networkConfig.contains("id")) { + _network_count++; + } else if (old.is_object() && old.contains("id") && !networkConfig.is_object()) { + _network_count--; + } + } + if (networkConfig.is_object()) { const std::string ids = networkConfig["id"]; const uint64_t networkId = Utils::hexStrToU64(ids.c_str()); diff --git a/controller/DB.hpp b/controller/DB.hpp index b05a2b11e..2dd808f1c 100644 --- a/controller/DB.hpp +++ b/controller/DB.hpp @@ -191,8 +191,12 @@ protected: mutable std::mutex _changeListeners_l; mutable std::mutex _networks_l; - prometheus::simpleapi::counter_metric_t _network_count { "contrller_network_count", "number of networks the controller is serving" }; - prometheus::simpleapi::counter_metric_t _member_count { "controller_member_count", "number of network members the controller is serving" }; + prometheus::simpleapi::gauge_metric_t _network_count { "controller_network_count", "number of networks the controller is serving" }; + prometheus::simpleapi::gauge_metric_t _member_count { "controller_member_count", "number of network members the controller is serving" }; + prometheus::simpleapi::counter_metric_t _network_changes { "controller_network_change_count", "number of times a network configuration is changed" }; + prometheus::simpleapi::counter_metric_t _member_changes { "controller_member_change_count", "number of times a network member configuration is changed" }; + prometheus::simpleapi::counter_metric_t _member_auths { "controller_member_auth_count", "number of network member auths" }; + prometheus::simpleapi::counter_metric_t _member_deauths { "controller_member_deauth_count", "number of network member deauths" }; }; } // namespace ZeroTier diff --git a/controller/PostgreSQL.cpp b/controller/PostgreSQL.cpp index 8bcfec4d7..2aaaeaeb1 100644 --- a/controller/PostgreSQL.cpp +++ b/controller/PostgreSQL.cpp @@ -705,6 +705,8 @@ void PostgreSQL::initializeNetworks() } } + _network_count++; + _networkChanged(empty, config, false); auto end = std::chrono::high_resolution_clock::now(); @@ -720,7 +722,6 @@ void PostgreSQL::initializeNetworks() fprintf(stderr, "Took %llu us per network to load\n", (total/count)); } stream.complete(); - _network_count = count; w.commit(); _pool->unborrow(c2); @@ -926,6 +927,8 @@ void PostgreSQL::initializeMembers() } } + _member_count++; + _memberChanged(empty, config, false); memberId = "";