controller tracing

This commit is contained in:
Grant Limberg 2025-07-12 13:29:07 -07:00
parent 0e87c21d87
commit b9de551e0c
7 changed files with 484 additions and 1 deletions

View file

@ -15,6 +15,7 @@
#include "../node/Metrics.hpp"
#include "EmbeddedNetworkController.hpp"
#include "opentelemetry/trace/provider.h"
#include <algorithm>
#include <chrono>
@ -26,6 +27,11 @@ namespace ZeroTier {
void DB::initNetwork(nlohmann::json& network)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::initNetwork");
auto scope = tracer->WithActiveSpan(span);
if (! network.count("private"))
network["private"] = true;
if (! network.count("creationTime"))
@ -76,6 +82,11 @@ void DB::initNetwork(nlohmann::json& network)
void DB::initMember(nlohmann::json& member)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::initMember");
auto scope = tracer->WithActiveSpan(span);
if (! member.count("authorized"))
member["authorized"] = false;
if (! member.count("ssoExempt"))
@ -121,6 +132,11 @@ void DB::initMember(nlohmann::json& member)
void DB::cleanNetwork(nlohmann::json& network)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::cleanNetwork");
auto scope = tracer->WithActiveSpan(span);
network.erase("clock");
network.erase("authorizedMemberCount");
network.erase("activeMemberCount");
@ -130,6 +146,11 @@ void DB::cleanNetwork(nlohmann::json& network)
void DB::cleanMember(nlohmann::json& member)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::cleanMember");
auto scope = tracer->WithActiveSpan(span);
member.erase("clock");
member.erase("physicalAddr");
member.erase("recentLog");
@ -148,6 +169,13 @@ DB::~DB()
bool DB::get(const uint64_t networkId, nlohmann::json& network)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::getNetwork");
auto scope = tracer->WithActiveSpan(span);
char networkIdStr[17];
span->SetAttribute("network_id", Utils::hex(networkId, networkIdStr));
waitForReady();
Metrics::db_get_network++;
std::shared_ptr<_Network> nw;
@ -167,6 +195,15 @@ bool DB::get(const uint64_t networkId, nlohmann::json& network)
bool DB::get(const uint64_t networkId, nlohmann::json& network, const uint64_t memberId, nlohmann::json& member)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::getNetworkAndMember");
auto scope = tracer->WithActiveSpan(span);
char networkIdStr[17];
char memberIdStr[11];
span->SetAttribute("network_id", Utils::hex(networkId, networkIdStr));
span->SetAttribute("member_id", Utils::hex(networkId, memberIdStr));
waitForReady();
Metrics::db_get_network_and_member++;
std::shared_ptr<_Network> nw;
@ -190,6 +227,15 @@ bool DB::get(const uint64_t networkId, nlohmann::json& network, const uint64_t m
bool DB::get(const uint64_t networkId, nlohmann::json& network, const uint64_t memberId, nlohmann::json& member, NetworkSummaryInfo& info)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::getNetworkAndMemberAndSummary");
auto scope = tracer->WithActiveSpan(span);
char networkIdStr[17];
char memberIdStr[11];
span->SetAttribute("network_id", Utils::hex(networkId, networkIdStr));
span->SetAttribute("member_id", Utils::hex(memberId, memberIdStr));
waitForReady();
Metrics::db_get_network_and_member_and_summary++;
std::shared_ptr<_Network> nw;
@ -209,11 +255,24 @@ bool DB::get(const uint64_t networkId, nlohmann::json& network, const uint64_t m
return false;
member = m->second;
}
span->SetAttribute("authorized_member_count", info.authorizedMemberCount);
span->SetAttribute("allocated_ips", info.allocatedIps.size());
span->SetAttribute("total_member_count", info.totalMemberCount);
span->SetAttribute("most_recent_deauth_time", info.mostRecentDeauthTime);
span->SetAttribute("active_bridges", info.activeBridges.size());
return true;
}
bool DB::get(const uint64_t networkId, nlohmann::json& network, std::vector<nlohmann::json>& members)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::getNetworkAndMembers");
auto scope = tracer->WithActiveSpan(span);
char networkIdStr[17];
span->SetAttribute("network_id", Utils::hex(networkId, networkIdStr));
waitForReady();
Metrics::db_get_member_list++;
std::shared_ptr<_Network> nw;
@ -236,6 +295,11 @@ bool DB::get(const uint64_t networkId, nlohmann::json& network, std::vector<nloh
void DB::networks(std::set<uint64_t>& networks)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::networks");
auto scope = tracer->WithActiveSpan(span);
waitForReady();
Metrics::db_get_network_list++;
std::shared_lock<std::shared_mutex> l(_networks_l);
@ -245,6 +309,11 @@ void DB::networks(std::set<uint64_t>& networks)
void DB::_memberChanged(nlohmann::json& old, nlohmann::json& memberConfig, bool notifyListeners)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::_memberChanged");
auto scope = tracer->WithActiveSpan(span);
Metrics::db_member_change++;
uint64_t memberId = 0;
uint64_t networkId = 0;
@ -389,6 +458,11 @@ void DB::_memberChanged(nlohmann::json& old, nlohmann::json& memberConfig, bool
void DB::_networkChanged(nlohmann::json& old, nlohmann::json& networkConfig, bool notifyListeners)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::_networkChanged");
auto scope = tracer->WithActiveSpan(span);
Metrics::db_network_change++;
if (notifyListeners) {
if (old.is_object() && old.contains("id") && networkConfig.is_object() && networkConfig.contains("id")) {
@ -457,6 +531,11 @@ void DB::_networkChanged(nlohmann::json& old, nlohmann::json& networkConfig, boo
void DB::_fillSummaryInfo(const std::shared_ptr<_Network>& nw, NetworkSummaryInfo& info)
{
auto provider = opentelemetry::trace::Provider::GetTracerProvider();
auto tracer = provider->GetTracer("db");
auto span = tracer->StartSpan("db::_fillSummaryInfo");
auto scope = tracer->WithActiveSpan(span);
for (auto ab = nw->activeBridgeMembers.begin(); ab != nw->activeBridgeMembers.end(); ++ab)
info.activeBridges.push_back(Address(*ab));
std::sort(info.activeBridges.begin(), info.activeBridges.end());