From ce2e365aaba64b15bd6f684993a8e11fb6c9d5bd Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Fri, 28 Apr 2023 13:42:27 -0700 Subject: [PATCH] Think I found the magic spot for outgoing packet metrics --- node/Metrics.cpp | 4 +++ node/Metrics.hpp | 2 ++ node/Node.cpp | 4 ++- node/Peer.cpp | 66 -------------------------------------------- node/Switch.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++++- node/Switch.hpp | 1 + 6 files changed, 81 insertions(+), 68 deletions(-) diff --git a/node/Metrics.cpp b/node/Metrics.cpp index 1228f501a..d57bb2d00 100644 --- a/node/Metrics.cpp +++ b/node/Metrics.cpp @@ -134,6 +134,8 @@ namespace ZeroTier { { packet_errors.Add({{"error_type", "unwanted_multicast"}, {"direction", "rx"}}) }; prometheus::simpleapi::counter_metric_t pkt_error_authentication_required_in { packet_errors.Add({{"error_type", "authentication_required"}, {"direction", "rx"}}) }; + prometheus::simpleapi::counter_metric_t pkt_error_internal_server_error_in + { packet_errors.Add({{"error_type", "internal_server_error"}, {"direction", "rx"}}) }; // Outgoing Error Counts prometheus::simpleapi::counter_metric_t pkt_error_obj_not_found_out @@ -150,6 +152,8 @@ namespace ZeroTier { { packet_errors.Add({{"error_type", "unwanted_multicast"}, {"direction", "tx"}}) }; prometheus::simpleapi::counter_metric_t pkt_error_authentication_required_out { packet_errors.Add({{"error_type", "authentication_required"}, {"direction", "tx"}}) }; + prometheus::simpleapi::counter_metric_t pkt_error_internal_server_error_out + { packet_errors.Add({{"error_type", "internal_server_error"}, {"direction", "tx"}}) }; // Data Sent/Received Metrics prometheus::simpleapi::counter_metric_t udp_send diff --git a/node/Metrics.hpp b/node/Metrics.hpp index 1c4dc223e..f38bab6b9 100644 --- a/node/Metrics.hpp +++ b/node/Metrics.hpp @@ -82,6 +82,7 @@ namespace ZeroTier { extern prometheus::simpleapi::counter_metric_t pkt_error_network_access_denied_in; extern prometheus::simpleapi::counter_metric_t pkt_error_unwanted_multicast_in; extern prometheus::simpleapi::counter_metric_t pkt_error_authentication_required_in; + extern prometheus::simpleapi::counter_metric_t pkt_error_internal_server_error_in; // outgoing errors extern prometheus::simpleapi::counter_metric_t pkt_error_obj_not_found_out; @@ -91,6 +92,7 @@ namespace ZeroTier { extern prometheus::simpleapi::counter_metric_t pkt_error_network_access_denied_out; extern prometheus::simpleapi::counter_metric_t pkt_error_unwanted_multicast_out; extern prometheus::simpleapi::counter_metric_t pkt_error_authentication_required_out; + extern prometheus::simpleapi::counter_metric_t pkt_error_internal_server_error_out; // Data Sent/Received Metrics diff --git a/node/Node.cpp b/node/Node.cpp index 46f3a4add..6869d00df 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -769,7 +769,6 @@ void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &des break; case NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED: { //fprintf(stderr, "\n\nGot auth required\n\n"); - break; } @@ -784,12 +783,15 @@ void Node::ncSendError(uint64_t nwid,uint64_t requestPacketId,const Address &des //case NetworkController::NC_ERROR_INTERNAL_SERVER_ERROR: default: outp.append((unsigned char)Packet::ERROR_OBJ_NOT_FOUND); + Metrics::pkt_error_obj_not_found_out++; break; case NetworkController::NC_ERROR_ACCESS_DENIED: outp.append((unsigned char)Packet::ERROR_NETWORK_ACCESS_DENIED_); + Metrics::pkt_error_network_access_denied_out++; break; case NetworkController::NC_ERROR_AUTHENTICATION_REQUIRED: outp.append((unsigned char)Packet::ERROR_NETWORK_AUTHENTICATION_REQUIRED); + Metrics::pkt_error_authentication_required_out++; break; } diff --git a/node/Peer.cpp b/node/Peer.cpp index a0442d9a1..34e3b9c4f 100644 --- a/node/Peer.cpp +++ b/node/Peer.cpp @@ -623,72 +623,6 @@ void Peer::recordOutgoingPacket(const SharedPtr &path, const uint64_t pack if (_localMultipathSupported && _bond) { _bond->recordOutgoingPacket(path, packetId, payloadLength, verb, flowId, now); } - - switch (verb) { - case Packet::VERB_NOP: - Metrics::pkt_nop_out++; - break; - case Packet::VERB_HELLO: - Metrics::pkt_hello_out++; - break; - case Packet::VERB_ERROR: - Metrics::pkt_error_out++; - break; - case Packet::VERB_OK: - Metrics::pkt_ok_out++; - break; - case Packet::VERB_WHOIS: - Metrics::pkt_whois_out++; - break; - case Packet::VERB_RENDEZVOUS: - Metrics::pkt_rendezvous_out++; - break; - case Packet::VERB_FRAME: - Metrics::pkt_frame_out++; - break; - case Packet::VERB_EXT_FRAME: - Metrics::pkt_ext_frame_out++; - break; - case Packet::VERB_ECHO: - Metrics::pkt_echo_out++; - break; - case Packet::VERB_MULTICAST_LIKE: - Metrics::pkt_multicast_like_out++; - break; - case Packet::VERB_NETWORK_CREDENTIALS: - Metrics::pkt_network_credentials_out++; - break; - case Packet::VERB_NETWORK_CONFIG_REQUEST: - Metrics::pkt_network_config_request_out++; - break; - case Packet::VERB_NETWORK_CONFIG: - Metrics::pkt_network_config_out++; - break; - case Packet::VERB_MULTICAST_GATHER: - Metrics::pkt_multicast_gather_out++; - break; - case Packet::VERB_MULTICAST_FRAME: - Metrics::pkt_multicast_frame_out++; - break; - case Packet::VERB_PUSH_DIRECT_PATHS: - Metrics::pkt_push_direct_paths_out++; - break; - case Packet::VERB_ACK: - Metrics::pkt_ack_out++; - break; - case Packet::VERB_QOS_MEASUREMENT: - Metrics::pkt_qos_out++; - break; - case Packet::VERB_USER_MESSAGE: - Metrics::pkt_user_message_out++; - break; - case Packet::VERB_REMOTE_TRACE: - Metrics::pkt_remote_trace_out++; - break; - case Packet::VERB_PATH_NEGOTIATION_REQUEST: - Metrics::pkt_path_negotiation_request_out++; - break; - } } void Peer::recordIncomingInvalidPacket(const SharedPtr& path) diff --git a/node/Switch.cpp b/node/Switch.cpp index 59ed34a04..6b4cfab18 100644 --- a/node/Switch.cpp +++ b/node/Switch.cpp @@ -850,8 +850,10 @@ void Switch::removeNetworkQoSControlBlock(uint64_t nwid) void Switch::send(void *tPtr,Packet &packet,bool encrypt,int32_t flowId) { const Address dest(packet.destination()); - if (dest == RR->identity.address()) + if (dest == RR->identity.address()) { return; + } + _recordOutgoingPacketMetrics(packet); if (!_trySend(tPtr,packet,encrypt,flowId)) { { Mutex::Lock _l(_txQueue_m); @@ -1080,4 +1082,72 @@ void Switch::_sendViaSpecificPath(void *tPtr,SharedPtr peer,SharedPtr peer,SharedPtr viaPath,uint16_t userSpecifiedMtu, int64_t now,Packet &packet,bool encrypt,int32_t flowId); + void _recordOutgoingPacketMetrics(const Packet &p); const RuntimeEnvironment *const RR; int64_t _lastBeaconResponse;