From dd07e26de9cb9702fc5fb99ae8edb5f7971af03d Mon Sep 17 00:00:00 2001 From: RickiNano <81099017+RickiNano@users.noreply.github.com> Date: Wed, 3 Apr 2024 19:00:35 +0200 Subject: [PATCH] Rpc endpoint for election statistics --- nano/node/json_handler.cpp | 39 ++++++++++++++++++++++++++++++++++++++ nano/node/json_handler.hpp | 1 + 2 files changed, 40 insertions(+) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 4dec6693c8..83b0a55338 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -2002,6 +2002,44 @@ void nano::json_handler::confirmation_active () response_errors (); } +void nano::json_handler::election_statistics () +{ + auto active_elections = node.active.list_active (); + unsigned normal_count = 0; + unsigned hinted_count = 0; + unsigned optimistic_count = 0; + unsigned total_count = 0; + + for (auto const & election : active_elections) + { + total_count++; + switch (election->behavior ()) + { + case election_behavior::normal: + normal_count++; + break; + case election_behavior::hinted: + hinted_count++; + break; + case election_behavior::optimistic: + optimistic_count++; + break; + } + } + + auto utilization_percentage = (static_cast (total_count * 100) / node.config.active_elections_size); + std::stringstream stream; + stream << std::fixed << std::setprecision (2) << utilization_percentage; + + response_l.put ("normal", normal_count); + response_l.put ("hinted", hinted_count); + response_l.put ("optimistic", optimistic_count); + response_l.put ("total", total_count); + response_l.put ("aec_utilization_percentage", stream.str ()); + + response_errors (); +} + void nano::json_handler::confirmation_history () { boost::property_tree::ptree elections; @@ -5305,6 +5343,7 @@ ipc_json_handler_no_arg_func_map create_ipc_json_handler_no_arg_func_map () no_arg_funcs.emplace ("accounts_pending", &nano::json_handler::accounts_pending); no_arg_funcs.emplace ("accounts_receivable", &nano::json_handler::accounts_receivable); no_arg_funcs.emplace ("active_difficulty", &nano::json_handler::active_difficulty); + no_arg_funcs.emplace ("election_statistics", &nano::json_handler::election_statistics); no_arg_funcs.emplace ("available_supply", &nano::json_handler::available_supply); no_arg_funcs.emplace ("block_info", &nano::json_handler::block_info); no_arg_funcs.emplace ("block", &nano::json_handler::block_info); diff --git a/nano/node/json_handler.hpp b/nano/node/json_handler.hpp index cc8d7b7a8e..33eca6c6c1 100644 --- a/nano/node/json_handler.hpp +++ b/nano/node/json_handler.hpp @@ -46,6 +46,7 @@ class json_handler : public std::enable_shared_from_this void accounts_pending (); void accounts_receivable (); void active_difficulty (); + void election_statistics (); void available_supply (); void block_info (); void block_confirm ();