diff --git a/server/modules/monitor/mariadbmon/mariadbmon.cc b/server/modules/monitor/mariadbmon/mariadbmon.cc index d4e4400d2..44c01df39 100644 --- a/server/modules/monitor/mariadbmon/mariadbmon.cc +++ b/server/modules/monitor/mariadbmon/mariadbmon.cc @@ -256,47 +256,10 @@ void MariaDBMonitor::diagnostics(DCB *dcb) const } dcb_printf(dcb, "\nServer information:\n-------------------\n\n"); - for (MXS_MONITORED_SERVER *db = m_monitor_base->monitored_servers; db; db = db->next) + for (auto iter = m_servers.begin(); iter != m_servers.end(); iter++) { - const MariaDBServer* serv_info = get_server_info(db); - dcb_printf(dcb, "Server: %s\n", db->server->unique_name); - dcb_printf(dcb, "Server ID: %" PRId64 "\n", serv_info->server_id); - dcb_printf(dcb, "Read only: %s\n", serv_info->read_only ? "YES" : "NO"); - dcb_printf(dcb, "Slave configured: %s\n", serv_info->slave_configured ? "YES" : "NO"); - if (serv_info->slave_configured) - { - dcb_printf(dcb, "Slave IO running: %s\n", - serv_info->slave_status.slave_io_running ? "YES" : "NO"); - dcb_printf(dcb, "Slave SQL running: %s\n", - serv_info->slave_status.slave_sql_running ? "YES" : "NO"); - dcb_printf(dcb, "Master ID: %" PRId64 "\n", - serv_info->slave_status.master_server_id); - dcb_printf(dcb, "Master binlog file: %s\n", - serv_info->slave_status.master_log_file.c_str()); - dcb_printf(dcb, "Master binlog position: %lu\n", - serv_info->slave_status.read_master_log_pos); - } - if (!serv_info->gtid_current_pos.empty()) - { - dcb_printf(dcb, "Gtid current position: %s\n", - serv_info->gtid_current_pos.to_string().c_str()); - } - if (!serv_info->gtid_binlog_pos.empty()) - { - dcb_printf(dcb, "Gtid binlog position: %s\n", - serv_info->gtid_current_pos.to_string().c_str()); - } - if (!serv_info->slave_status.gtid_io_pos.empty()) - { - dcb_printf(dcb, "Gtid slave IO position: %s\n", - serv_info->slave_status.gtid_io_pos.to_string().c_str()); - } - if (m_detect_multimaster) - { - dcb_printf(dcb, "Master group: %d\n", serv_info->group); - } - - dcb_printf(dcb, "\n"); + string server_info = (*iter)->diagnostics(m_detect_multimaster) + "\n"; + dcb_printf(dcb, "%s", server_info.c_str()); } } @@ -326,43 +289,14 @@ json_t* MariaDBMonitor::diagnostics_json() const string list = monitored_servers_to_string(m_excluded_servers); json_object_set_new(rval, CN_NO_PROMOTE_SERVERS, json_string(list.c_str())); } - if (m_monitor_base->monitored_servers) + + if (!m_servers.empty()) { json_t* arr = json_array(); - - for (MXS_MONITORED_SERVER *db = m_monitor_base->monitored_servers; db; db = db->next) + for (auto iter = m_servers.begin(); iter != m_servers.end(); iter++) { - json_t* srv = json_object(); - const MariaDBServer* serv_info = get_server_info(db); - json_object_set_new(srv, "name", json_string(db->server->unique_name)); - json_object_set_new(srv, "server_id", json_integer(serv_info->server_id)); - json_object_set_new(srv, "master_id", json_integer(serv_info->slave_status.master_server_id)); - - json_object_set_new(srv, "read_only", json_boolean(serv_info->read_only)); - json_object_set_new(srv, "slave_configured", json_boolean(serv_info->slave_configured)); - json_object_set_new(srv, "slave_io_running", - json_boolean(serv_info->slave_status.slave_io_running)); - json_object_set_new(srv, "slave_sql_running", - json_boolean(serv_info->slave_status.slave_sql_running)); - - json_object_set_new(srv, "master_binlog_file", - json_string(serv_info->slave_status.master_log_file.c_str())); - json_object_set_new(srv, "master_binlog_position", - json_integer(serv_info->slave_status.read_master_log_pos)); - json_object_set_new(srv, "gtid_current_pos", - json_string(serv_info->gtid_current_pos.to_string().c_str())); - json_object_set_new(srv, "gtid_binlog_pos", - json_string(serv_info->gtid_binlog_pos.to_string().c_str())); - json_object_set_new(srv, "gtid_io_pos", - json_string(serv_info->slave_status.gtid_io_pos.to_string().c_str())); - if (m_detect_multimaster) - { - json_object_set_new(srv, "master_group", json_integer(serv_info->group)); - } - - json_array_append_new(arr, srv); + json_array_append_new(arr, (*iter)->diagnostics_json(m_detect_multimaster)); } - json_object_set_new(rval, "server_info", arr); } diff --git a/server/modules/monitor/mariadbmon/mariadbserver.cc b/server/modules/monitor/mariadbmon/mariadbserver.cc index 434a17b7c..d23b0de8e 100644 --- a/server/modules/monitor/mariadbmon/mariadbserver.cc +++ b/server/modules/monitor/mariadbmon/mariadbserver.cc @@ -431,6 +431,64 @@ const char* MariaDBServer::name() const return server_base->server->unique_name; } +string MariaDBServer::diagnostics(bool multimaster) const +{ + std::stringstream ss; + ss << "Server: " << name() << "\n"; + ss << "Server ID: " << server_id << "\n"; + ss << "Read only: " << (read_only ? "YES" : "NO") << "\n"; + ss << "Slave configured: " << (slave_configured ? "YES" : "NO") << "\n"; + if (slave_configured) + { + ss << "Slave IO running: " << (slave_status.slave_io_running ? "YES" : "NO") << "\n"; + ss << "Slave SQL running: " << (slave_status.slave_sql_running ? "YES" : "NO") << "\n"; + ss << "Master ID: " << slave_status.master_server_id << "\n"; + ss << "Master binlog file: " << slave_status.master_log_file << "\n"; + ss << "Master binlog position: " << slave_status.read_master_log_pos << "\n"; + } + if (!gtid_current_pos.empty()) + { + ss << "Gtid current position: " << gtid_current_pos.to_string() << "\n"; + } + if (!gtid_binlog_pos.empty()) + { + ss << "Gtid binlog position: " << gtid_binlog_pos.to_string() << "\n"; + } + if (!slave_status.gtid_io_pos.empty()) + { + ss << "Gtid slave IO position: " << slave_status.gtid_io_pos.to_string() << "\n"; + } + if (multimaster) + { + ss << "Master group: " << group << "\n"; + } + return ss.str(); +} + +json_t* MariaDBServer::diagnostics_json(bool multimaster) const +{ + json_t* srv = json_object(); + json_object_set_new(srv, "name", json_string(name())); + json_object_set_new(srv, "server_id", json_integer(server_id)); + json_object_set_new(srv, "master_id", json_integer(slave_status.master_server_id)); + + json_object_set_new(srv, "read_only", json_boolean(read_only)); + json_object_set_new(srv, "slave_configured", json_boolean(slave_configured)); + json_object_set_new(srv, "slave_io_running", json_boolean(slave_status.slave_io_running)); + json_object_set_new(srv, "slave_sql_running", json_boolean(slave_status.slave_sql_running)); + + json_object_set_new(srv, "master_binlog_file", json_string(slave_status.master_log_file.c_str())); + json_object_set_new(srv, "master_binlog_position", json_integer(slave_status.read_master_log_pos)); + json_object_set_new(srv, "gtid_current_pos", json_string(gtid_current_pos.to_string().c_str())); + json_object_set_new(srv, "gtid_binlog_pos", json_string(gtid_binlog_pos.to_string().c_str())); + json_object_set_new(srv, "gtid_io_pos", json_string(slave_status.gtid_io_pos.to_string().c_str())); + if (multimaster) + { + json_object_set_new(srv, "master_group", json_integer(group)); + } + return srv; +} + QueryResult::QueryResult(MYSQL_RES* resultset) : m_resultset(resultset) , m_columns(-1) diff --git a/server/modules/monitor/mariadbmon/mariadbserver.hh b/server/modules/monitor/mariadbmon/mariadbserver.hh index 560ce8c93..dcdd1d328 100644 --- a/server/modules/monitor/mariadbmon/mariadbserver.hh +++ b/server/modules/monitor/mariadbmon/mariadbserver.hh @@ -196,6 +196,22 @@ public: * @return Server unique name */ const char* name() const; + + /** + * Print server information to a json object. + * + * @param multimaster Print multimaster group + * @return Json diagnostics object + */ + json_t* diagnostics_json(bool multimaster) const; + + /** + * Print server information to a string. + * + * @param multimaster Print multimaster group + * @return Diagnostics string + */ + std::string diagnostics(bool multimaster) const; }; /**