MXS-2271 Cleanup internal monitor header and its functions
Some functions still accessed the servers-array. Most functions are now inside class. Removed unused defines.
This commit is contained in:
parent
e7abc53b70
commit
ac5ee1278c
@ -435,7 +435,20 @@ protected:
|
||||
private:
|
||||
friend class MonitorManager;
|
||||
|
||||
/**
|
||||
* @brief Add a server to a monitor.
|
||||
*
|
||||
* Add a server to a monitor, provided the server is not currently
|
||||
* being monitored by any monitor. Before adding the server to the
|
||||
* monitor, the monitor is stopped if it is running and after the
|
||||
* addition it is restarted if it was running.
|
||||
*
|
||||
* @param server A server.
|
||||
*
|
||||
* @return True, if the monitor was added, false otherwise.
|
||||
*/
|
||||
void add_server(SERVER* server);
|
||||
|
||||
void remove_server(SERVER* server);
|
||||
|
||||
/**
|
||||
@ -466,20 +479,6 @@ private:
|
||||
*/
|
||||
int launch_command(MXS_MONITORED_SERVER* ptr, EXTERNCMD* cmd);
|
||||
|
||||
/**
|
||||
* @brief Add a server to a monitor.
|
||||
*
|
||||
* Add a server to a monitor, provided the server is not currently
|
||||
* being monitored by any monitor. Before adding the server to the
|
||||
* monitor, the monitor is stopped if it is running and after the
|
||||
* addition it is restarted if it was running.
|
||||
*
|
||||
* @param monitor A monitor.
|
||||
* @param server A server.
|
||||
*
|
||||
* @return True, if the monitor was added, false otherwise.
|
||||
*/
|
||||
static bool add_server(Monitor* mon, SERVER* server);
|
||||
|
||||
/**
|
||||
* @brief Remove a server from a monitor.
|
||||
|
@ -3614,7 +3614,7 @@ int create_new_service(CONFIG_CONTEXT* obj)
|
||||
|
||||
if (!cluster.empty())
|
||||
{
|
||||
Monitor* pMonitor = monitor_find(cluster.c_str());
|
||||
Monitor* pMonitor = MonitorManager::find_monitor(cluster.c_str());
|
||||
|
||||
if (pMonitor)
|
||||
{
|
||||
|
@ -137,7 +137,7 @@ bool runtime_add_server(Monitor* mon, Server* server)
|
||||
mxb_assert(mon && server);
|
||||
bool rval = false;
|
||||
|
||||
if (monitor_server_in_use(server))
|
||||
if (MonitorManager::server_is_monitored(server))
|
||||
{
|
||||
MXS_ERROR("Server '%s' is already monitored.", server->name());
|
||||
}
|
||||
@ -167,7 +167,7 @@ bool runtime_remove_server(Monitor* mon, Server* server)
|
||||
mxb_assert(mon && server);
|
||||
bool rval = false;
|
||||
|
||||
if (monitor_server_in_use(server) != mon)
|
||||
if (MonitorManager::server_is_monitored(server) != mon)
|
||||
{
|
||||
MXS_ERROR("Server '%s' is not monitored by '%s'.", server->name(), mon->m_name);
|
||||
}
|
||||
@ -209,7 +209,7 @@ bool runtime_link_server(Server* server, const char* target)
|
||||
|
||||
bool rval = false;
|
||||
Service* service = service_internal_find(target);
|
||||
Monitor* monitor = service ? NULL : monitor_find(target);
|
||||
Monitor* monitor = service ? NULL : MonitorManager::find_monitor(target);
|
||||
|
||||
if (service)
|
||||
{
|
||||
@ -263,7 +263,7 @@ bool runtime_unlink_server(Server* server, const char* target)
|
||||
|
||||
bool rval = false;
|
||||
Service* service = service_internal_find(target);
|
||||
Monitor* monitor = service ? NULL : monitor_find(target);
|
||||
Monitor* monitor = service ? NULL : MonitorManager::find_monitor(target);
|
||||
|
||||
if (service || monitor)
|
||||
{
|
||||
@ -380,7 +380,7 @@ bool runtime_destroy_server(Server* server)
|
||||
std::lock_guard<std::mutex> guard(crt_lock);
|
||||
bool rval = false;
|
||||
|
||||
if (service_server_in_use(server) || monitor_server_in_use(server))
|
||||
if (service_server_in_use(server) || MonitorManager::server_is_monitored(server))
|
||||
{
|
||||
const char* err = "Cannot destroy server '%s' as it is used by at least "
|
||||
"one service or monitor";
|
||||
@ -696,7 +696,7 @@ bool runtime_alter_monitor(Monitor* monitor, const char* key, const char* value)
|
||||
bool was_running = (monitor->state() == MONITOR_STATE_RUNNING);
|
||||
if (was_running)
|
||||
{
|
||||
MonitorManager::monitor_stop(monitor);
|
||||
MonitorManager::stop_monitor(monitor);
|
||||
}
|
||||
bool success = do_alter_monitor(monitor, key, value);
|
||||
if (success)
|
||||
@ -705,7 +705,7 @@ bool runtime_alter_monitor(Monitor* monitor, const char* key, const char* value)
|
||||
}
|
||||
if (was_running)
|
||||
{
|
||||
MonitorManager::monitor_start(monitor);
|
||||
MonitorManager::start_monitor(monitor);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
@ -1210,9 +1210,9 @@ bool runtime_create_monitor(const char* name, const char* module)
|
||||
std::lock_guard<std::mutex> guard(crt_lock);
|
||||
bool rval = false;
|
||||
|
||||
if (monitor_find(name) == NULL)
|
||||
if (MonitorManager::find_monitor(name) == NULL)
|
||||
{
|
||||
Monitor* monitor = monitor_repurpose_destroyed(name, module);
|
||||
Monitor* monitor = MonitorManager::reactivate_monitor(name, module);
|
||||
std::string reason;
|
||||
|
||||
if (monitor)
|
||||
@ -1432,13 +1432,7 @@ bool runtime_destroy_monitor(Monitor* monitor)
|
||||
|
||||
if (rval)
|
||||
{
|
||||
MonitorManager::monitor_stop(monitor);
|
||||
|
||||
while (!monitor->m_servers.empty())
|
||||
{
|
||||
MonitorManager::remove_server(monitor, monitor->m_servers[0]->server);
|
||||
}
|
||||
monitor_deactivate(monitor);
|
||||
MonitorManager::deactivate_monitor(monitor);
|
||||
MXS_NOTICE("Destroyed monitor '%s'", monitor->m_name);
|
||||
}
|
||||
|
||||
@ -1735,7 +1729,7 @@ static bool server_contains_required_fields(json_t* json)
|
||||
static bool server_relation_is_valid(const std::string& type, const std::string& value)
|
||||
{
|
||||
return (type == CN_SERVICES && service_internal_find(value.c_str()))
|
||||
|| (type == CN_MONITORS && monitor_find(value.c_str()));
|
||||
|| (type == CN_MONITORS && MonitorManager::find_monitor(value.c_str()));
|
||||
}
|
||||
|
||||
static bool filter_to_service_relation_is_valid(const std::string& type, const std::string& value)
|
||||
@ -2258,7 +2252,7 @@ Monitor* runtime_create_monitor_from_json(json_t* json)
|
||||
|
||||
if (runtime_create_monitor(name, module))
|
||||
{
|
||||
rval = monitor_find(name);
|
||||
rval = MonitorManager::find_monitor(name);
|
||||
mxb_assert(rval);
|
||||
|
||||
if (!runtime_alter_monitor_from_json(rval, json))
|
||||
@ -2268,7 +2262,7 @@ Monitor* runtime_create_monitor_from_json(json_t* json)
|
||||
}
|
||||
else
|
||||
{
|
||||
MonitorManager::monitor_start(rval);
|
||||
MonitorManager::start_monitor(rval);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2420,7 +2414,7 @@ bool runtime_alter_monitor_from_json(Monitor* monitor, json_t* new_json)
|
||||
if (parameters)
|
||||
{
|
||||
bool restart = (monitor->state() != MONITOR_STATE_STOPPED);
|
||||
MonitorManager::monitor_stop(monitor);
|
||||
MonitorManager::stop_monitor(monitor);
|
||||
const char* key;
|
||||
json_t* value;
|
||||
|
||||
@ -2451,7 +2445,7 @@ bool runtime_alter_monitor_from_json(Monitor* monitor, json_t* new_json)
|
||||
|
||||
if (restart)
|
||||
{
|
||||
MonitorManager::monitor_start(monitor);
|
||||
MonitorManager::start_monitor(monitor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2186,7 +2186,7 @@ int main(int argc, char** argv)
|
||||
}
|
||||
|
||||
/** Start all monitors */
|
||||
monitor_start_all();
|
||||
MonitorManager::start_all_monitors();
|
||||
|
||||
if (cnf->config_check)
|
||||
{
|
||||
@ -2258,7 +2258,7 @@ int main(int argc, char** argv)
|
||||
mxs_admin_shutdown();
|
||||
|
||||
/*< Stop all monitors */
|
||||
monitor_stop_all();
|
||||
MonitorManager::stop_all_monitors();
|
||||
|
||||
/*< Destroy all monitors */
|
||||
MonitorManager::destroy_all_monitors();
|
||||
|
@ -22,30 +22,6 @@
|
||||
|
||||
#define MON_ARG_MAX 8192
|
||||
|
||||
#define DEFAULT_CONNECT_TIMEOUT 3
|
||||
#define DEFAULT_READ_TIMEOUT 3
|
||||
#define DEFAULT_WRITE_TIMEOUT 3
|
||||
#define DEFAULT_CONNECTION_ATTEMPTS 1
|
||||
|
||||
#define DEFAULT_MONITOR_INTERVAL 2000 // in milliseconds
|
||||
|
||||
/** Default maximum journal age in seconds */
|
||||
#define DEFAULT_JOURNAL_MAX_AGE 28800
|
||||
|
||||
/** Default script execution timeout in seconds */
|
||||
#define DEFAULT_SCRIPT_TIMEOUT 90
|
||||
|
||||
/**
|
||||
* Monitor network timeout types
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
MONITOR_CONNECT_TIMEOUT = 0,
|
||||
MONITOR_READ_TIMEOUT = 1,
|
||||
MONITOR_WRITE_TIMEOUT = 2,
|
||||
MONITOR_CONNECT_ATTEMPTS = 3
|
||||
} monitor_timeouts_t;
|
||||
|
||||
/* Is not really an event as the other values, but is a valid config setting and also the default.
|
||||
* Bitmask value matches all events. */
|
||||
static const MXS_ENUM_VALUE mxs_monitor_event_default_enum = {"all", ~0ULL};
|
||||
@ -77,8 +53,6 @@ static const MXS_ENUM_VALUE mxs_monitor_event_enum_values[] =
|
||||
{NULL}
|
||||
};
|
||||
|
||||
std::unique_ptr<ResultSet> monitor_get_list();
|
||||
|
||||
/**
|
||||
* This class contains internal monitor management functions that should not be exposed in the public
|
||||
* monitor class. It's a friend of MXS_MONITOR.
|
||||
@ -98,6 +72,15 @@ public:
|
||||
static Monitor* create_monitor(const std::string& name, const std::string& module,
|
||||
MXS_CONFIG_PARAMETER* params);
|
||||
|
||||
/**
|
||||
* Mark monitor as deactivated. A deactivated monitor appears not to exist, as if it had been
|
||||
* destroyed. Any servers the monitor had are removed. The monitor should not be serialized after
|
||||
* this function.
|
||||
*
|
||||
* @param monitor Monitor to deactivate
|
||||
*/
|
||||
static void deactivate_monitor(Monitor* monitor);
|
||||
|
||||
/**
|
||||
* @brief Destroys all monitors. At this point all monitors should
|
||||
* have been stopped.
|
||||
@ -106,27 +89,24 @@ public:
|
||||
*/
|
||||
static void destroy_all_monitors();
|
||||
|
||||
static void monitor_start(Monitor*);
|
||||
|
||||
/**
|
||||
* @brief Populate services with the servers of the monitors.
|
||||
*/
|
||||
static void populate_services();
|
||||
|
||||
static bool add_server(Monitor* mon, SERVER* server);
|
||||
|
||||
|
||||
static void remove_server(Monitor* mon, SERVER* server)
|
||||
{
|
||||
Monitor::remove_server(mon, server);
|
||||
}
|
||||
static void start_monitor(Monitor* monitor);
|
||||
|
||||
/**
|
||||
* Stop a given monitor
|
||||
*
|
||||
* @param monitor The monitor to stop
|
||||
*/
|
||||
static void monitor_stop(Monitor*);
|
||||
static void stop_monitor(Monitor* monitor);
|
||||
|
||||
static void stop_all_monitors();
|
||||
static void start_all_monitors();
|
||||
|
||||
static Monitor* find_monitor(const char* name);
|
||||
|
||||
/**
|
||||
* @brief Populate services with the servers of the monitors.
|
||||
*/
|
||||
static void populate_services();
|
||||
|
||||
/**
|
||||
* Get links to monitors that relate to a server.
|
||||
@ -145,39 +125,28 @@ public:
|
||||
*/
|
||||
static json_t* monitor_list_to_json(const char* host);
|
||||
|
||||
/**
|
||||
* Check if a server is being monitored and return the monitor.
|
||||
* @param server Server that is queried
|
||||
* @return The monitor watching this server, or NULL if not monitored
|
||||
*/
|
||||
static Monitor* server_is_monitored(const SERVER* server);
|
||||
|
||||
static Monitor* reactivate_monitor(const char* name, const char* module);
|
||||
|
||||
static void show_all_monitors(DCB* dcb);
|
||||
static void monitor_show(DCB* dcb, Monitor* monitor);
|
||||
|
||||
static void monitor_list(DCB*);
|
||||
|
||||
static std::unique_ptr<ResultSet> monitor_get_list();
|
||||
|
||||
/**
|
||||
* Waits until all running monitors have advanced one tick.
|
||||
*/
|
||||
static void monitor_debug_wait();
|
||||
static void debug_wait_one_tick();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief Mark monitor as deactivated
|
||||
*
|
||||
* A deactivated monitor appears not to exist, as if it had been
|
||||
* destroyed.
|
||||
*
|
||||
* @param monitor
|
||||
*/
|
||||
void monitor_deactivate(Monitor* monitor);
|
||||
|
||||
void monitor_stop_all();
|
||||
void monitor_start_all();
|
||||
|
||||
Monitor* monitor_find(const char*);
|
||||
Monitor* monitor_repurpose_destroyed(const char* name, const char* module);
|
||||
|
||||
void monitor_show(DCB*, Monitor*);
|
||||
void monitor_show_all(DCB*);
|
||||
|
||||
void monitor_list(DCB*);
|
||||
|
||||
void monitor_set_journal_max_age(Monitor* mon, time_t value);
|
||||
|
||||
/**
|
||||
* @brief Serialize a monitor to a file
|
||||
*
|
||||
@ -187,10 +156,3 @@ void monitor_set_journal_max_age(Monitor* mon, time_t value);
|
||||
* @return True if serialization was successful
|
||||
*/
|
||||
bool monitor_serialize(const Monitor* monitor);
|
||||
|
||||
/**
|
||||
* Check if a server is being monitored and return the monitor.
|
||||
* @param server Server that is queried
|
||||
* @return The monitor watching this server, or NULL if not monitored
|
||||
*/
|
||||
Monitor* monitor_server_in_use(const SERVER* server);
|
||||
|
@ -327,7 +327,7 @@ static bool process_argument(const MODULECMD* cmd,
|
||||
break;
|
||||
|
||||
case MODULECMD_ARG_MONITOR:
|
||||
if ((arg->value.monitor = monitor_find((char*)value)))
|
||||
if ((arg->value.monitor = MonitorManager::find_monitor((char*) value)))
|
||||
{
|
||||
const char* eff_name = mxs_module_get_effective_name(arg->value.monitor->m_module.c_str());
|
||||
if (MODULECMD_ALLOW_NAME_MISMATCH(type) || strcasecmp(cmd->domain, eff_name) == 0)
|
||||
|
@ -215,23 +215,34 @@ bool Monitor::configure(const MXS_CONFIG_PARAMETER* params)
|
||||
|
||||
// The monitor serverlist has already been checked to be valid. Empty value is ok too.
|
||||
// First, remove all servers.
|
||||
|
||||
auto servers_temp = params->get_server_list(CN_SERVERS);
|
||||
while (!m_servers.empty())
|
||||
{
|
||||
SERVER* remove = m_servers.front()->server;
|
||||
remove_server(remove);
|
||||
}
|
||||
|
||||
auto servers_temp = params->get_server_list(CN_SERVERS);
|
||||
bool error = false;
|
||||
for (auto elem : servers_temp)
|
||||
{
|
||||
// This function checks if server is already monitored. TODO: This should be a config error.
|
||||
add_server(elem);
|
||||
// TODO: Monitor should not access MonitorManager.
|
||||
Monitor* srv_monitored_by = MonitorManager::server_is_monitored(elem);
|
||||
if (srv_monitored_by)
|
||||
{
|
||||
mxb_assert(srv_monitored_by != this);
|
||||
MXS_ERROR("Server '%s' is already monitored by '%s', cannot add it to another monitor.",
|
||||
elem->name(), srv_monitored_by->m_name);
|
||||
error = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
add_server(elem);
|
||||
}
|
||||
}
|
||||
|
||||
/* The previous config values were normal types and were checked by the config manager
|
||||
* to be correct. The following is a complicated type and needs to be checked separately. */
|
||||
bool error = false;
|
||||
|
||||
auto threshold_string = params->get_string(CN_DISK_SPACE_THRESHOLD);
|
||||
if (!set_disk_space_threshold(threshold_string))
|
||||
{
|
||||
@ -266,7 +277,7 @@ void MonitorManager::destroy_all_monitors()
|
||||
}
|
||||
}
|
||||
|
||||
void MonitorManager::monitor_start(Monitor* monitor)
|
||||
void MonitorManager::start_monitor(Monitor* monitor)
|
||||
{
|
||||
mxb_assert(monitor);
|
||||
|
||||
@ -282,11 +293,6 @@ void MonitorManager::monitor_start(Monitor* monitor)
|
||||
}
|
||||
}
|
||||
|
||||
bool MonitorManager::add_server(Monitor* mon, SERVER* server)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void MonitorManager::populate_services()
|
||||
{
|
||||
this_unit.foreach_monitor([](Monitor* pMonitor) -> bool {
|
||||
@ -298,18 +304,18 @@ void MonitorManager::populate_services()
|
||||
/**
|
||||
* Start all monitors
|
||||
*/
|
||||
void monitor_start_all()
|
||||
void MonitorManager::start_all_monitors()
|
||||
{
|
||||
this_unit.foreach_monitor([](Monitor* monitor) {
|
||||
if (monitor->m_active)
|
||||
{
|
||||
MonitorManager::monitor_start(monitor);
|
||||
MonitorManager::start_monitor(monitor);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
void MonitorManager::monitor_stop(Monitor* monitor)
|
||||
void MonitorManager::stop_monitor(Monitor* monitor)
|
||||
{
|
||||
mxb_assert(monitor);
|
||||
|
||||
@ -322,8 +328,17 @@ void MonitorManager::monitor_stop(Monitor* monitor)
|
||||
}
|
||||
}
|
||||
|
||||
void monitor_deactivate(Monitor* monitor)
|
||||
void MonitorManager::deactivate_monitor(Monitor* monitor)
|
||||
{
|
||||
// This cannot be done with configure(), since other, module-specific config settings may depend on the
|
||||
// "servers"-setting of the base monitor. Directly manipulate monitor field for now, later use a dtor
|
||||
// to cleanly "deactivate" inherited objects.
|
||||
stop_monitor(monitor);
|
||||
while (!monitor->m_servers.empty())
|
||||
{
|
||||
monitor->remove_server(monitor->m_servers.front()->server);
|
||||
}
|
||||
|
||||
this_unit.run_behind_lock([monitor](){
|
||||
monitor->m_active = false;
|
||||
});
|
||||
@ -332,72 +347,30 @@ void monitor_deactivate(Monitor* monitor)
|
||||
/**
|
||||
* Shutdown all running monitors
|
||||
*/
|
||||
void monitor_stop_all()
|
||||
void MonitorManager::stop_all_monitors()
|
||||
{
|
||||
this_unit.foreach_monitor([](Monitor* monitor) {
|
||||
if (monitor->m_active)
|
||||
{
|
||||
MonitorManager::monitor_stop(monitor);
|
||||
MonitorManager::stop_monitor(monitor);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
//static
|
||||
bool Monitor::add_server(Monitor* mon, SERVER* server)
|
||||
{
|
||||
mxb_assert(mon && server);
|
||||
bool rval = false;
|
||||
|
||||
if (monitor_server_in_use(server))
|
||||
{
|
||||
MXS_ERROR("Server '%s' is already monitored.", server->name());
|
||||
}
|
||||
else
|
||||
{
|
||||
rval = true;
|
||||
|
||||
monitor_state_t old_state = mon->state();
|
||||
|
||||
if (old_state == MONITOR_STATE_RUNNING)
|
||||
{
|
||||
MonitorManager::monitor_stop(mon);
|
||||
}
|
||||
|
||||
mon->add_server(server);
|
||||
|
||||
if (old_state == MONITOR_STATE_RUNNING)
|
||||
{
|
||||
MonitorManager::monitor_start(mon);
|
||||
}
|
||||
}
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Add a server to the monitor.
|
||||
*
|
||||
* It is assumed that the monitor is currently not running and that the
|
||||
* server is not currently being monitored.
|
||||
*
|
||||
* @param server A server.
|
||||
* @param server A server
|
||||
*/
|
||||
void Monitor::add_server(SERVER* server)
|
||||
{
|
||||
mxb_assert(state() != MONITOR_STATE_RUNNING);
|
||||
mxb_assert(!monitor_server_in_use(server));
|
||||
|
||||
MXS_MONITORED_SERVER* db = new (std::nothrow) MXS_MONITORED_SERVER(server);
|
||||
MXS_ABORT_IF_NULL(db);
|
||||
|
||||
using Guard = std::unique_lock<std::mutex>;
|
||||
Guard guard(m_lock);
|
||||
|
||||
m_servers.push_back(db);
|
||||
|
||||
guard.unlock();
|
||||
|
||||
auto new_server = new MXS_MONITORED_SERVER(server);
|
||||
m_servers.push_back(new_server);
|
||||
server_added(server);
|
||||
}
|
||||
|
||||
@ -449,14 +422,14 @@ void Monitor::remove_server(Monitor* mon, SERVER* server)
|
||||
|
||||
if (old_state == MONITOR_STATE_RUNNING)
|
||||
{
|
||||
MonitorManager::monitor_stop(mon);
|
||||
MonitorManager::stop_monitor(mon);
|
||||
}
|
||||
|
||||
mon->remove_server(server);
|
||||
|
||||
if (old_state == MONITOR_STATE_RUNNING)
|
||||
{
|
||||
MonitorManager::monitor_start(mon);
|
||||
MonitorManager::start_monitor(mon);
|
||||
}
|
||||
}
|
||||
|
||||
@ -502,7 +475,7 @@ void Monitor::remove_server(SERVER* server)
|
||||
*
|
||||
* @param dcb DCB for printing output
|
||||
*/
|
||||
void monitor_show_all(DCB* dcb)
|
||||
void MonitorManager::show_all_monitors(DCB* dcb)
|
||||
{
|
||||
this_unit.foreach_monitor([dcb](Monitor* monitor) {
|
||||
if (monitor->m_active)
|
||||
@ -518,7 +491,7 @@ void monitor_show_all(DCB* dcb)
|
||||
*
|
||||
* @param dcb DCB for printing output
|
||||
*/
|
||||
void monitor_show(DCB* dcb, Monitor* monitor)
|
||||
void MonitorManager::monitor_show(DCB* dcb, Monitor* monitor)
|
||||
{
|
||||
monitor->show(dcb);
|
||||
}
|
||||
@ -563,7 +536,7 @@ void Monitor::show(DCB* dcb)
|
||||
*
|
||||
* @param dcb DCB for printing output
|
||||
*/
|
||||
void monitor_list(DCB* dcb)
|
||||
void MonitorManager::monitor_list(DCB* dcb)
|
||||
{
|
||||
dcb_printf(dcb, "---------------------+---------------------\n");
|
||||
dcb_printf(dcb, "%-20s | Status\n", "Monitor");
|
||||
@ -590,7 +563,7 @@ void monitor_list(DCB* dcb)
|
||||
* @param name The name of the monitor
|
||||
* @return Pointer to the monitor or NULL
|
||||
*/
|
||||
Monitor* monitor_find(const char* name)
|
||||
Monitor* MonitorManager::find_monitor(const char* name)
|
||||
{
|
||||
Monitor* rval = nullptr;
|
||||
this_unit.foreach_monitor([&rval, name](Monitor* ptr) {
|
||||
@ -608,7 +581,7 @@ Monitor* monitor_find(const char* name)
|
||||
* @param name The name of the monitor
|
||||
* @return Pointer to the destroyed monitor or NULL if monitor is not found
|
||||
*/
|
||||
Monitor* monitor_repurpose_destroyed(const char* name, const char* module)
|
||||
Monitor* MonitorManager::reactivate_monitor(const char* name, const char* module)
|
||||
{
|
||||
Monitor* rval = NULL;
|
||||
this_unit.foreach_monitor([&rval, name, module](Monitor* monitor) {
|
||||
@ -628,7 +601,7 @@ Monitor* monitor_repurpose_destroyed(const char* name, const char* module)
|
||||
*
|
||||
* @return A Result set
|
||||
*/
|
||||
std::unique_ptr<ResultSet> monitor_get_list()
|
||||
std::unique_ptr<ResultSet> MonitorManager::monitor_get_list()
|
||||
{
|
||||
std::unique_ptr<ResultSet> set = ResultSet::create({"Monitor", "Status"});
|
||||
this_unit.foreach_monitor([&set](Monitor* ptr) {
|
||||
@ -1301,7 +1274,7 @@ static void mon_log_state_change(MXS_MONITORED_SERVER* ptr)
|
||||
prev.c_str(), next.c_str());
|
||||
}
|
||||
|
||||
Monitor* monitor_server_in_use(const SERVER* server)
|
||||
Monitor* MonitorManager::server_is_monitored(const SERVER* server)
|
||||
{
|
||||
Monitor* rval = nullptr;
|
||||
this_unit.foreach_monitor([&rval, server](Monitor* monitor) {
|
||||
@ -2328,7 +2301,7 @@ void Monitor::populate_services()
|
||||
}
|
||||
}
|
||||
|
||||
void MonitorManager::monitor_debug_wait()
|
||||
void MonitorManager::debug_wait_one_tick()
|
||||
{
|
||||
using namespace std::chrono;
|
||||
std::map<Monitor*, uint64_t> ticks;
|
||||
|
@ -125,7 +125,7 @@ bool Resource::matching_variable_path(const string& path, const string& target)
|
||||
if ((path == ":service" && service_find(target.c_str()))
|
||||
|| (path == ":server" && Server::find_by_unique_name(target))
|
||||
|| (path == ":filter" && filter_find(target.c_str()))
|
||||
|| (path == ":monitor" && monitor_find(target.c_str()))
|
||||
|| (path == ":monitor" && MonitorManager::find_monitor(target.c_str()))
|
||||
|| (path == ":module" && get_module(target.c_str(), NULL))
|
||||
|| (path == ":inetuser" && admin_inet_user_exists(target.c_str()))
|
||||
|| (path == ":unixuser" && admin_linux_account_enabled(target.c_str())))
|
||||
@ -259,20 +259,20 @@ private:
|
||||
|
||||
HttpResponse cb_stop_monitor(const HttpRequest& request)
|
||||
{
|
||||
Monitor* monitor = monitor_find(request.uri_part(1).c_str());
|
||||
Monitor* monitor = MonitorManager::find_monitor(request.uri_part(1).c_str());
|
||||
if (monitor)
|
||||
{
|
||||
MonitorManager::monitor_stop(monitor);
|
||||
MonitorManager::stop_monitor(monitor);
|
||||
}
|
||||
return HttpResponse(MHD_HTTP_NO_CONTENT);
|
||||
}
|
||||
|
||||
HttpResponse cb_start_monitor(const HttpRequest& request)
|
||||
{
|
||||
Monitor* monitor = monitor_find(request.uri_part(1).c_str());
|
||||
Monitor* monitor = MonitorManager::find_monitor(request.uri_part(1).c_str());
|
||||
if (monitor)
|
||||
{
|
||||
MonitorManager::monitor_start(monitor);
|
||||
MonitorManager::start_monitor(monitor);
|
||||
}
|
||||
return HttpResponse(MHD_HTTP_NO_CONTENT);
|
||||
}
|
||||
@ -390,7 +390,7 @@ HttpResponse cb_create_service_listener(const HttpRequest& request)
|
||||
|
||||
HttpResponse cb_alter_monitor(const HttpRequest& request)
|
||||
{
|
||||
Monitor* monitor = monitor_find(request.uri_part(1).c_str());
|
||||
Monitor* monitor = MonitorManager::find_monitor(request.uri_part(1).c_str());
|
||||
mxb_assert(monitor && request.get_json());
|
||||
|
||||
if (runtime_alter_monitor_from_json(monitor, request.get_json()))
|
||||
@ -403,7 +403,7 @@ HttpResponse cb_alter_monitor(const HttpRequest& request)
|
||||
|
||||
HttpResponse cb_alter_monitor_server_relationship(const HttpRequest& request)
|
||||
{
|
||||
Monitor* monitor = monitor_find(request.uri_part(1).c_str());
|
||||
Monitor* monitor = MonitorManager::find_monitor(request.uri_part(1).c_str());
|
||||
mxb_assert(monitor && request.get_json());
|
||||
|
||||
if (runtime_alter_monitor_relationships_from_json(monitor, request.get_json()))
|
||||
@ -492,7 +492,7 @@ HttpResponse cb_delete_server(const HttpRequest& request)
|
||||
|
||||
HttpResponse cb_delete_monitor(const HttpRequest& request)
|
||||
{
|
||||
Monitor* monitor = monitor_find(request.uri_part(1).c_str());
|
||||
Monitor* monitor = MonitorManager::find_monitor(request.uri_part(1).c_str());
|
||||
mxb_assert(monitor);
|
||||
|
||||
if (runtime_destroy_monitor(monitor))
|
||||
@ -613,7 +613,7 @@ HttpResponse cb_all_monitors(const HttpRequest& request)
|
||||
|
||||
HttpResponse cb_get_monitor(const HttpRequest& request)
|
||||
{
|
||||
Monitor* monitor = monitor_find(request.uri_part(1).c_str());
|
||||
Monitor* monitor = MonitorManager::find_monitor(request.uri_part(1).c_str());
|
||||
mxb_assert(monitor);
|
||||
return HttpResponse(MHD_HTTP_OK, monitor_to_json(monitor, request.host()));
|
||||
}
|
||||
@ -742,7 +742,7 @@ HttpResponse cb_unix_user(const HttpRequest& request)
|
||||
|
||||
HttpResponse cb_monitor_wait(const HttpRequest& request)
|
||||
{
|
||||
MonitorManager::monitor_debug_wait();
|
||||
MonitorManager::debug_wait_one_tick();
|
||||
return HttpResponse(MHD_HTTP_OK);
|
||||
}
|
||||
HttpResponse cb_create_user(const HttpRequest& request)
|
||||
|
@ -950,7 +950,7 @@ bool mxs::server_set_status(SERVER* srv, int bit, string* errmsg_out)
|
||||
/* First check if the server is monitored. This isn't done under a lock
|
||||
* but the race condition cannot cause significant harm. Monitors are never
|
||||
* freed so the pointer stays valid. */
|
||||
Monitor* mon = monitor_server_in_use(srv);
|
||||
Monitor* mon = MonitorManager::server_is_monitored(srv);
|
||||
if (mon)
|
||||
{
|
||||
written = mon->set_server_status(srv, bit, errmsg_out);
|
||||
@ -969,7 +969,7 @@ bool mxs::server_clear_status(SERVER* srv, int bit, string* errmsg_out)
|
||||
{
|
||||
// See server_set_status().
|
||||
bool written = false;
|
||||
Monitor* mon = monitor_server_in_use(srv);
|
||||
Monitor* mon = MonitorManager::server_is_monitored(srv);
|
||||
if (mon)
|
||||
{
|
||||
written = mon->clear_server_status(srv, bit, errmsg_out);
|
||||
|
@ -291,7 +291,7 @@ struct subcommand showoptions[] =
|
||||
{0 }
|
||||
},
|
||||
{
|
||||
"monitor", 1, 1, (FN)monitor_show,
|
||||
"monitor", 1, 1, (FN)MonitorManager::monitor_show,
|
||||
"Show monitor details",
|
||||
"Usage: show monitor MONITOR\n"
|
||||
"\n"
|
||||
@ -302,7 +302,7 @@ struct subcommand showoptions[] =
|
||||
{ARG_TYPE_MONITOR}
|
||||
},
|
||||
{
|
||||
"monitors", 0, 0, (FN)monitor_show_all,
|
||||
"monitors", 0, 0, (FN)MonitorManager::show_all_monitors,
|
||||
"Show all monitors",
|
||||
"Usage: show monitors",
|
||||
{0 }
|
||||
@ -482,7 +482,7 @@ struct subcommand listoptions[] =
|
||||
{0 }
|
||||
},
|
||||
{
|
||||
"monitors", 0, 0, (FN)monitor_list,
|
||||
"monitors", 0, 0, (FN)MonitorManager::monitor_list,
|
||||
"List all monitors",
|
||||
"Usage: list monitors",
|
||||
{0 }
|
||||
@ -1293,7 +1293,7 @@ static void createListener(DCB* dcb,
|
||||
|
||||
static void createMonitor(DCB* dcb, const char* name, const char* module)
|
||||
{
|
||||
if (monitor_find(name))
|
||||
if (MonitorManager::find_monitor(name))
|
||||
{
|
||||
dcb_printf(dcb, "Monitor '%s' already exists\n", name);
|
||||
}
|
||||
@ -1993,7 +1993,7 @@ static unsigned long convert_arg(char* arg, int arg_type)
|
||||
|
||||
case ARG_TYPE_MONITOR:
|
||||
fix_object_name(arg);
|
||||
rval = (unsigned long)monitor_find(arg);
|
||||
rval = (unsigned long) MonitorManager::find_monitor(arg);
|
||||
break;
|
||||
|
||||
case ARG_TYPE_FILTER:
|
||||
@ -2716,7 +2716,7 @@ static void show_qc_all(DCB* dcb)
|
||||
*/
|
||||
static void shutdown_monitor(DCB* dcb, Monitor* monitor)
|
||||
{
|
||||
MonitorManager::monitor_stop(monitor);
|
||||
MonitorManager::stop_monitor(monitor);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2727,7 +2727,7 @@ static void shutdown_monitor(DCB* dcb, Monitor* monitor)
|
||||
*/
|
||||
static void restart_monitor(DCB* dcb, Monitor* monitor)
|
||||
{
|
||||
MonitorManager::monitor_start(monitor);
|
||||
MonitorManager::start_monitor(monitor);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -186,7 +186,7 @@ static void exec_show_modules(DCB* dcb, MAXINFO_TREE* tree)
|
||||
*/
|
||||
static void exec_show_monitors(DCB* dcb, MAXINFO_TREE* tree)
|
||||
{
|
||||
monitor_get_list()->write(dcb);
|
||||
MonitorManager::monitor_get_list()->write(dcb);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -503,10 +503,10 @@ void exec_shutdown_monitor(DCB* dcb, MAXINFO_TREE* tree)
|
||||
char errmsg[120];
|
||||
if (tree && tree->value)
|
||||
{
|
||||
Monitor* monitor = monitor_find(tree->value);
|
||||
Monitor* monitor = MonitorManager::find_monitor(tree->value);
|
||||
if (monitor)
|
||||
{
|
||||
MonitorManager::monitor_stop(monitor);
|
||||
MonitorManager::stop_monitor(monitor);
|
||||
maxinfo_send_ok(dcb);
|
||||
}
|
||||
else
|
||||
@ -612,10 +612,10 @@ void exec_restart_monitor(DCB* dcb, MAXINFO_TREE* tree)
|
||||
char errmsg[120];
|
||||
if (tree && tree->value)
|
||||
{
|
||||
Monitor* monitor = monitor_find(tree->value);
|
||||
Monitor* monitor = MonitorManager::find_monitor(tree->value);
|
||||
if (monitor)
|
||||
{
|
||||
MonitorManager::monitor_start(monitor);
|
||||
MonitorManager::start_monitor(monitor);
|
||||
maxinfo_send_ok(dcb);
|
||||
}
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user