Console: print node overall health in status
This commit is contained in:
@@ -203,9 +203,14 @@ static void do_help(p2pool * /* m_pool */, const char * /* args */)
|
|||||||
|
|
||||||
static void do_status(p2pool *m_pool, const char * /* args */)
|
static void do_status(p2pool *m_pool, const char * /* args */)
|
||||||
{
|
{
|
||||||
m_pool->side_chain().print_status();
|
const SideChain& c = m_pool->side_chain();
|
||||||
if (m_pool->stratum_server()) {
|
|
||||||
m_pool->stratum_server()->print_status();
|
c.print_status();
|
||||||
|
|
||||||
|
StratumServer* stratum = m_pool->stratum_server();
|
||||||
|
|
||||||
|
if (stratum) {
|
||||||
|
stratum->print_status();
|
||||||
}
|
}
|
||||||
|
|
||||||
P2PServer* p2p = m_pool->p2p_server();
|
P2PServer* p2p = m_pool->p2p_server();
|
||||||
@@ -224,6 +229,72 @@ static void do_status(p2pool *m_pool, const char * /* args */)
|
|||||||
if (p2p) {
|
if (p2p) {
|
||||||
p2p->check_for_updates(true);
|
p2p->check_for_updates(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int node_health = 10;
|
||||||
|
std::vector<const char*> comments;
|
||||||
|
|
||||||
|
if (!stratum) {
|
||||||
|
node_health = 0;
|
||||||
|
comments.push_back("Stratum server not loaded");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!p2p) {
|
||||||
|
node_health = 0;
|
||||||
|
comments.push_back("P2P server not loaded");
|
||||||
|
}
|
||||||
|
else if (p2p->num_connections() == 0) {
|
||||||
|
node_health = 0;
|
||||||
|
comments.push_back("No p2p connections");
|
||||||
|
}
|
||||||
|
else if (p2p->num_incoming_connections() == 0) {
|
||||||
|
node_health -= 1;
|
||||||
|
comments.push_back("No incoming p2p connections");
|
||||||
|
}
|
||||||
|
|
||||||
|
const PoolBlock* tip = c.chainTip();
|
||||||
|
|
||||||
|
if (!tip) {
|
||||||
|
node_health = 0;
|
||||||
|
comments.push_back("Sidechain not loaded");
|
||||||
|
}
|
||||||
|
else if (!c.precalcFinished()) {
|
||||||
|
node_health -= 1;
|
||||||
|
comments.push_back("Sidechain just synced, it needs a few minutes to confirm that everything is ok");
|
||||||
|
}
|
||||||
|
|
||||||
|
const MinerData data = m_pool->miner_data();
|
||||||
|
|
||||||
|
if (tip && (data.height < tip->m_txinGenHeight)) {
|
||||||
|
node_health -= 5;
|
||||||
|
comments.push_back("Your Monero node is lagging");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stratum && (stratum->num_connections() == 0)) {
|
||||||
|
node_health -= 1;
|
||||||
|
comments.push_back("No stratum connections");
|
||||||
|
}
|
||||||
|
|
||||||
|
char buf[64] = {};
|
||||||
|
|
||||||
|
log::Stream s(buf);
|
||||||
|
|
||||||
|
if (node_health >= 8) {
|
||||||
|
s << log::LightGreen();
|
||||||
|
}
|
||||||
|
else if (node_health >= 5) {
|
||||||
|
s << log::LightYellow();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
s << log::LightRed();
|
||||||
|
}
|
||||||
|
|
||||||
|
s << "Node health: " << std::max(node_health, 0) << "/10";
|
||||||
|
|
||||||
|
LOGINFO(0, log::const_buf(buf, s.m_pos));
|
||||||
|
|
||||||
|
for (const char* comment : comments) {
|
||||||
|
LOGINFO(0, log::LightYellow() << comment);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void do_loglevel(p2pool * /* m_pool */, const char *args)
|
static void do_loglevel(p2pool * /* m_pool */, const char *args)
|
||||||
|
|||||||
@@ -140,6 +140,9 @@ public:
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
[[nodiscard]] FORCEINLINE bool send(Client* client, T&& callback, bool raw = false) { return send_internal(client, Callback<size_t, uint8_t*, size_t>::Derived<T>(std::move(callback)), raw); }
|
[[nodiscard]] FORCEINLINE bool send(Client* client, T&& callback, bool raw = false) { return send_internal(client, Callback<size_t, uint8_t*, size_t>::Derived<T>(std::move(callback)), raw); }
|
||||||
|
|
||||||
|
[[nodiscard]] FORCEINLINE uint32_t num_connections() const { return m_numConnections.load(); }
|
||||||
|
[[nodiscard]] FORCEINLINE uint32_t num_incoming_connections() const { return m_numIncomingConnections.load(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void on_new_connection(uv_stream_t* server, int status);
|
static void on_new_connection(uv_stream_t* server, int status);
|
||||||
static void on_connection_close(uv_handle_t* handle);
|
static void on_connection_close(uv_handle_t* handle);
|
||||||
|
|||||||
Reference in New Issue
Block a user