From e3b264f5dcfb0d497234fe22618a54fb8c9e7f2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20W=C3=B3jcik?= <3044353+pwojcikdev@users.noreply.github.com> Date: Thu, 29 Sep 2022 17:15:24 +0200 Subject: [PATCH] Add stats to blockprocessor (#3966) --- nano/lib/stats.cpp | 30 +++++++++++++++++++++ nano/lib/stats.hpp | 12 ++++++++- nano/node/blockprocessor.cpp | 3 +++ nano/secure/common.cpp | 51 ++++++++++++++++++++++++++++++++++++ nano/secure/common.hpp | 19 ++++++++------ 5 files changed, 106 insertions(+), 9 deletions(-) diff --git a/nano/lib/stats.cpp b/nano/lib/stats.cpp index 5a794a99c..632cdf725 100644 --- a/nano/lib/stats.cpp +++ b/nano/lib/stats.cpp @@ -548,6 +548,9 @@ std::string nano::stat::type_to_string (stat::type type) case nano::stat::type::hinting: res = "hinting"; break; + case nano::stat::type::blockprocessor: + res = "blockprocessor"; + break; } return res; } @@ -629,6 +632,33 @@ std::string nano::stat::detail_to_string (stat::detail detail) case nano::stat::detail::rollback_failed: res = "rollback_failed"; break; + case nano::stat::detail::progress: + res = "progress"; + break; + case nano::stat::detail::bad_signature: + res = "bad_signature"; + break; + case nano::stat::detail::negative_spend: + res = "negative_spend"; + break; + case nano::stat::detail::unreceivable: + res = "unreceivable"; + break; + case nano::stat::detail::gap_epoch_open_pending: + res = "gap_epoch_open_pending"; + break; + case nano::stat::detail::opened_burn_account: + res = "opened_burn_account"; + break; + case nano::stat::detail::balance_mismatch: + res = "balance_mismatch"; + break; + case nano::stat::detail::representative_mismatch: + res = "representative_mismatch"; + break; + case nano::stat::detail::block_position: + res = "block_position"; + break; case nano::stat::detail::frontier_confirmation_failed: res = "frontier_confirmation_failed"; break; diff --git a/nano/lib/stats.hpp b/nano/lib/stats.hpp index 122ea4442..3e039dcad 100644 --- a/nano/lib/stats.hpp +++ b/nano/lib/stats.hpp @@ -245,7 +245,8 @@ public: telemetry, vote_generator, vote_cache, - hinting + hinting, + blockprocessor, }; /** Optional detail type */ @@ -277,6 +278,15 @@ public: gap_previous, gap_source, rollback_failed, + progress, + bad_signature, + negative_spend, + unreceivable, + gap_epoch_open_pending, + opened_burn_account, + balance_mismatch, + representative_mismatch, + block_position, // message specific not_a_type, diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index 824c99881..1d6fd17f0 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -505,6 +505,9 @@ nano::process_return nano::block_processor::process_one (nano::write_transaction break; } } + + node.stats.inc (nano::stat::type::blockprocessor, nano::to_stat_detail (result.code)); + return result; } diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 474f5ff46..2dee0b4c7 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -756,3 +756,54 @@ void nano::generate_cache::enable_all () unchecked_count = true; account_count = true; } + +nano::stat::detail nano::to_stat_detail (nano::process_result process_result) +{ + nano::stat::detail result; + switch (process_result) + { + case process_result::progress: + return nano::stat::detail::progress; + break; + case process_result::bad_signature: + return nano::stat::detail::bad_signature; + break; + case process_result::old: + return nano::stat::detail::old; + break; + case process_result::negative_spend: + return nano::stat::detail::negative_spend; + break; + case process_result::fork: + return nano::stat::detail::fork; + break; + case process_result::unreceivable: + return nano::stat::detail::unreceivable; + break; + case process_result::gap_previous: + return nano::stat::detail::gap_previous; + break; + case process_result::gap_source: + return nano::stat::detail::gap_source; + break; + case process_result::gap_epoch_open_pending: + return nano::stat::detail::gap_epoch_open_pending; + break; + case process_result::opened_burn_account: + return nano::stat::detail::opened_burn_account; + break; + case process_result::balance_mismatch: + return nano::stat::detail::balance_mismatch; + break; + case process_result::representative_mismatch: + return nano::stat::detail::representative_mismatch; + break; + case process_result::block_position: + return nano::stat::detail::block_position; + break; + case process_result::insufficient_work: + return nano::stat::detail::insufficient_work; + break; + } + return result; +} \ No newline at end of file diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index bf22199de..20c7262ff 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -150,19 +151,19 @@ public: endpoint_key () = default; /* - * @param address_a This should be in network byte order - * @param port_a This should be in host byte order - */ + * @param address_a This should be in network byte order + * @param port_a This should be in host byte order + */ endpoint_key (std::array const & address_a, uint16_t port_a); /* - * @return The ipv6 address in network byte order - */ + * @return The ipv6 address in network byte order + */ std::array const & address_bytes () const; /* - * @return The port in host byte order - */ + * @return The port in host byte order + */ uint16_t port () const; private: @@ -370,6 +371,8 @@ enum class tally_result confirm }; +nano::stat::detail to_stat_detail (process_result); + class network_params; /** Genesis keys and ledger constants for network variants */ @@ -496,7 +499,7 @@ enum class confirmation_height_mode }; /* Holds flags for various cacheable data. For most CLI operations caching is unnecessary - * (e.g getting the cemented block count) so it can be disabled for performance reasons. */ + * (e.g getting the cemented block count) so it can be disabled for performance reasons. */ class generate_cache { public: