From f2dfd39f7904ac91916676f0e6bcf49b75755407 Mon Sep 17 00:00:00 2001 From: Esa Korhonen Date: Tue, 21 Aug 2018 16:30:01 +0300 Subject: [PATCH] Clean up JSON diagnostics Now prints all slave connections. --- .../modules/monitor/mariadbmon/mariadbmon.cc | 23 +++--- .../modules/monitor/mariadbmon/mariadbmon.hh | 2 +- .../monitor/mariadbmon/mariadbserver.cc | 73 ++++++++++--------- .../monitor/mariadbmon/mariadbserver.hh | 3 +- 4 files changed, 54 insertions(+), 47 deletions(-) diff --git a/server/modules/monitor/mariadbmon/mariadbmon.cc b/server/modules/monitor/mariadbmon/mariadbmon.cc index 7a97612c4..a4e87c831 100644 --- a/server/modules/monitor/mariadbmon/mariadbmon.cc +++ b/server/modules/monitor/mariadbmon/mariadbmon.cc @@ -302,7 +302,7 @@ json_t* MariaDBMonitor::diagnostics_json() const MariaDBMonitor* mutable_ptr = const_cast(this); auto func = [this, &rval] { - rval = diagnostics_to_json(); + rval = to_json(); }; if (!mutable_ptr->call(func, Worker::EXECUTE_AUTO)) @@ -313,19 +313,20 @@ json_t* MariaDBMonitor::diagnostics_json() const return rval; } -json_t* MariaDBMonitor::diagnostics_to_json() const +json_t* MariaDBMonitor::to_json() const { json_t* rval = MonitorInstance::diagnostics_json(); - if (!m_servers.empty()) - { - json_t* arr = json_array(); - for (auto iter = m_servers.begin(); iter != m_servers.end(); iter++) - { - json_array_append_new(arr, (*iter)->diagnostics_json()); - } - json_object_set_new(rval, "server_info", arr); - } + json_object_set_new(rval, "master", m_master == NULL ? json_null() : json_string(m_master->name())); + json_object_set_new(rval, "master_gtid_domain_id", + m_master_gtid_domain == GTID_DOMAIN_UNKNOWN ? json_null() : + json_integer(m_master_gtid_domain)); + json_t* server_info = json_array(); + for (MariaDBServer* server : m_servers) + { + json_array_append_new(server_info, server->to_json()); + } + json_object_set_new(rval, "server_info", server_info); return rval; } diff --git a/server/modules/monitor/mariadbmon/mariadbmon.hh b/server/modules/monitor/mariadbmon/mariadbmon.hh index b88abf40d..434c293e1 100644 --- a/server/modules/monitor/mariadbmon/mariadbmon.hh +++ b/server/modules/monitor/mariadbmon/mariadbmon.hh @@ -189,7 +189,7 @@ private: MariaDBServer* get_server(SERVER* server); bool execute_manual_command(std::function command, json_t** error_out); std::string diagnostics_to_string() const; - json_t* diagnostics_to_json() const; + json_t* to_json() const; // Cluster discovery and status assignment methods void update_server(MariaDBServer* server); diff --git a/server/modules/monitor/mariadbmon/mariadbserver.cc b/server/modules/monitor/mariadbmon/mariadbserver.cc index e08dcd6b0..c74f12f9e 100644 --- a/server/modules/monitor/mariadbmon/mariadbserver.cc +++ b/server/modules/monitor/mariadbmon/mariadbserver.cc @@ -529,43 +529,31 @@ string MariaDBServer::diagnostics() const return ss.str(); } -json_t* MariaDBServer::diagnostics_json() const +json_t* MariaDBServer::to_json() const { - json_t* srv = json_object(); - json_object_set_new(srv, "name", json_string(name())); - json_object_set_new(srv, "server_id", json_integer(m_server_id)); - json_object_set_new(srv, "read_only", json_boolean(m_read_only)); - json_object_set_new(srv, "slave_configured", json_boolean(!m_slave_status.empty())); - if (!m_slave_status.empty()) + json_t* result = json_object(); + json_object_set_new(result, "name", json_string(name())); + json_object_set_new(result, "server_id", json_integer(m_server_id)); + json_object_set_new(result, "read_only", json_boolean(m_read_only)); + + json_object_set_new(result, "gtid_current_pos", + m_gtid_current_pos.empty() ? json_null() : + json_string(m_gtid_current_pos.to_string().c_str())); + + json_object_set_new(result, "gtid_binlog_pos", + m_gtid_binlog_pos.empty() ? json_null() : + json_string(m_gtid_binlog_pos.to_string().c_str())); + + json_object_set_new(result, "master_group", + (m_node.cycle == NodeData::CYCLE_NONE) ? json_null() : json_integer(m_node.cycle)); + + json_t* slave_connections = json_array(); + for (const auto& sstatus : m_slave_status) { - json_object_set_new(srv, "slave_io_running", - json_string(SlaveStatus::slave_io_to_string(m_slave_status[0].slave_io_running).c_str())); - json_object_set_new(srv, "slave_sql_running", json_boolean(m_slave_status[0].slave_sql_running)); - json_object_set_new(srv, "master_id", json_integer(m_slave_status[0].master_server_id)); + json_array_append_new(slave_connections, sstatus.to_json()); } - if (!m_gtid_current_pos.empty()) - { - json_object_set_new(srv, "gtid_current_pos", json_string(m_gtid_current_pos.to_string().c_str())); - } - if (!m_gtid_binlog_pos.empty()) - { - json_object_set_new(srv, "gtid_binlog_pos", json_string(m_gtid_binlog_pos.to_string().c_str())); - } - if (!m_slave_status.empty() && !m_slave_status[0].gtid_io_pos.empty()) - { - json_object_set_new(srv, "gtid_io_pos", - json_string(m_slave_status[0].gtid_io_pos.to_string().c_str())); - } - if (!m_slave_status.empty()) - { - json_object_set_new(srv, "seconds_behind_master", - json_integer(m_slave_status[0].seconds_behind_master)); - } - if (m_node.cycle != NodeData::CYCLE_NONE) - { - json_object_set_new(srv, "master_group", json_integer(m_node.cycle)); - } - return srv; + json_object_set_new(result, "slave_connections", slave_connections); + return result; } bool MariaDBServer::uses_gtid(std::string* error_out) @@ -1152,6 +1140,23 @@ string SlaveStatus::to_string() const return rval; } +json_t* SlaveStatus::to_json() const +{ + json_t* result = json_object(); + json_object_set_new(result, "connection_name", json_string(name.c_str())); + json_object_set_new(result, "master_host", json_string(master_host.c_str())); + json_object_set_new(result, "master_port", json_integer(master_port)); + json_object_set_new(result, "slave_io_running", + json_string(slave_io_to_string(slave_io_running).c_str())); + json_object_set_new(result, "slave_sql_running", json_string(slave_sql_running ? "Yes" : "No")); + json_object_set_new(result, "seconds_behing_master", + seconds_behind_master == MXS_RLAG_UNDEFINED ? json_null() : + json_integer(seconds_behind_master)); + json_object_set_new(result, "master_server_id", json_integer(master_server_id)); + json_object_set_new(result, "last_io_or_sql_error", json_string(last_error.c_str())); + json_object_set_new(result, "gtid_io_pos", json_string(gtid_io_pos.to_string().c_str())); + return result; +} SlaveStatus::slave_io_running_t SlaveStatus::slave_io_from_string(const std::string& str) { slave_io_running_t rval = SLAVE_IO_NO; diff --git a/server/modules/monitor/mariadbmon/mariadbserver.hh b/server/modules/monitor/mariadbmon/mariadbserver.hh index 511da7854..c355122d6 100644 --- a/server/modules/monitor/mariadbmon/mariadbserver.hh +++ b/server/modules/monitor/mariadbmon/mariadbserver.hh @@ -55,6 +55,7 @@ public: int seconds_behind_master = MXS_RLAG_UNDEFINED; /* How much behind the slave is. */ std::string to_string() const; + json_t* to_json() const; static slave_io_running_t slave_io_from_string(const std::string& str); static std::string slave_io_to_string(slave_io_running_t slave_io); }; @@ -350,7 +351,7 @@ public: * * @return Json diagnostics object */ - json_t* diagnostics_json() const; + json_t* to_json() const; /** * Print server information to a string.