From 7662ffb64a3014595a9ed1af38b37f0abb01800a Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 16 Jul 2025 11:55:12 -0700 Subject: [PATCH] let's try saving things here --- controller/CV2.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++ controller/CV2.hpp | 10 ++------ 2 files changed, 60 insertions(+), 8 deletions(-) diff --git a/controller/CV2.cpp b/controller/CV2.cpp index 28687ca4d..9892d4555 100644 --- a/controller/CV2.cpp +++ b/controller/CV2.cpp @@ -110,6 +110,64 @@ bool CV2::isReady() return (_ready == 2) && _connected; } +void CV2::_memberChanged(nlohmann::json& old, nlohmann::json& memberConfig, bool notifyListeners) +{ + auto provider = opentelemetry::trace::Provider::GetTracerProvider(); + auto tracer = provider->GetTracer("cv2"); + auto span = tracer->StartSpan("cv2::_memberChanged"); + auto scope = tracer->WithActiveSpan(span); + + if (memberConfig.is_object()) { + // member config change + const std::string ids = memberConfig["id"]; + const uint64_t networkId = OSUtils::jsonIntHex(memberConfig["nwid"], 0ULL); + const uint64_t memberId = Utils::hexStrToU64(ids.c_str()); + if ((networkId) && (memberId)) { + save(memberConfig, notifyListeners); + } + } + else if (old.is_object()) { + // member delete + const std::string ids = old["id"]; + const uint64_t networkId = OSUtils::jsonIntHex(old["nwid"], 0ULL); + const uint64_t memberId = Utils::hexStrToU64(ids.c_str()); + if ((networkId) && (memberId)) { + eraseMember(networkId, memberId); + } + } + + // fprintf(stderr, "CV2::_memberChanged\n"); + DB::_memberChanged(old, memberConfig, notifyListeners); +} + +void CV2::_networkChanged(nlohmann::json& old, nlohmann::json& networkConfig, bool notifyListeners) +{ + auto provider = opentelemetry::trace::Provider::GetTracerProvider(); + auto tracer = provider->GetTracer("cv2"); + auto span = tracer->StartSpan("cv2::_networkChanged"); + auto scope = tracer->WithActiveSpan(span); + + if (networkConfig.is_object()) { + // network config change + const std::string ids = networkConfig["id"]; + const uint64_t networkId = Utils::hexStrToU64(ids.c_str()); + if (networkId) { + save(networkConfig, notifyListeners); + } + } + else if (old.is_object()) { + // network delete + const std::string ids = networkConfig["id"]; + const uint64_t networkId = Utils::hexStrToU64(ids.c_str()); + if (networkId) { + eraseNetwork(networkId); + } + } + + // fprintf(stderr, "CV2::_networkChanged\n"); + DB::_networkChanged(old, networkConfig, false); +} + bool CV2::save(nlohmann::json& record, bool notifyListeners) { auto provider = opentelemetry::trace::Provider::GetTracerProvider(); diff --git a/controller/CV2.hpp b/controller/CV2.hpp index a0cc896d3..09501e021 100644 --- a/controller/CV2.hpp +++ b/controller/CV2.hpp @@ -59,15 +59,9 @@ class CV2 : public DB { return (std::size_t)(p.first ^ p.second); } }; - virtual void _memberChanged(nlohmann::json& old, nlohmann::json& memberConfig, bool notifyListeners) - { - DB::_memberChanged(old, memberConfig, notifyListeners); - } + virtual void _memberChanged(nlohmann::json& old, nlohmann::json& memberConfig, bool notifyListeners); - virtual void _networkChanged(nlohmann::json& old, nlohmann::json& networkConfig, bool notifyListeners) - { - DB::_networkChanged(old, networkConfig, notifyListeners); - } + virtual void _networkChanged(nlohmann::json& old, nlohmann::json& networkConfig, bool notifyListeners); private: void initializeNetworks();