Monitors are now started after they have been fully configured.
This commit is contained in:
Markus Makela
2015-11-04 11:50:21 +02:00
parent b6783c24d0
commit cd6f7ce046
4 changed files with 68 additions and 10 deletions

View File

@ -343,6 +343,12 @@ int rval, ini_rval;
rval = process_config_context(config.next); rval = process_config_context(config.next);
free_config_context(config.next); free_config_context(config.next);
/** Start all monitors */
if(rval)
{
monitorStartAll();
}
return rval; return rval;
} }
@ -1156,7 +1162,7 @@ process_config_context(CONFIG_CONTEXT *context)
gateway.id = getpid(); gateway.id = getpid();
} }
monitorStart(obj->element,obj->parameters); monitorAddParameters(obj->element, obj->parameters);
/* set monitor interval */ /* set monitor interval */
if (interval > 0) if (interval > 0)
@ -1253,6 +1259,7 @@ process_config_context(CONFIG_CONTEXT *context)
obj = obj->next; obj = obj->next;
} /*< while */ } /*< while */
/** TODO: consistency check function */ /** TODO: consistency check function */
hashtable_free(monitorhash); hashtable_free(monitorhash);
@ -1460,6 +1467,22 @@ return_p2:
return p2; return p2;
} }
/**
* Free a configuration parameter
* @param p1 Parameter to free
*/
void free_config_parameter(CONFIG_PARAMETER* p1)
{
while (p1)
{
free(p1->name);
free(p1->value);
CONFIG_PARAMETER* p2 = p1->next;
free(p1);
p1 = p2;
}
}
/** /**
* Free a config tree * Free a config tree
* *
@ -1474,15 +1497,7 @@ CONFIG_PARAMETER *p1, *p2;
while (context) while (context)
{ {
free(context->object); free(context->object);
p1 = context->parameters; free_config_parameter(context->parameters);
while (p1)
{
free(p1->name);
free(p1->value);
p2 = p1->next;
free(p1);
p1 = p2;
}
obj = context->next; obj = context->next;
free(context); free(context);
context = obj; context = obj;

View File

@ -118,6 +118,7 @@ MONITOR *ptr;
ptr->next = mon->next; ptr->next = mon->next;
} }
spinlock_release(&monLock); spinlock_release(&monLock);
free_config_parameter(mon->parameters);
free(mon->name); free(mon->name);
free(mon); free(mon);
} }
@ -137,6 +138,23 @@ monitorStart(MONITOR *monitor, void* params)
spinlock_release(&monitor->lock); spinlock_release(&monitor->lock);
} }
/**
* Start all monitors
*/
void monitorStartAll()
{
MONITOR *ptr;
spinlock_acquire(&monLock);
ptr = allMonitors;
while (ptr)
{
monitorStart(ptr, ptr->parameters);
ptr = ptr->next;
}
spinlock_release(&monLock);
}
/** /**
* Stop a given monitor * Stop a given monitor
* *
@ -522,3 +540,22 @@ bool check_monitor_permissions(MONITOR* monitor)
free(dpasswd); free(dpasswd);
return rval; return rval;
} }
/**
* Add parameters to the monitor
* @param monitor Monitor
* @param params Config parameters
*/
void monitorAddParameters(MONITOR *monitor, CONFIG_PARAMETER *params)
{
while (params)
{
CONFIG_PARAMETER* clone = config_clone_param(params);
if (clone)
{
clone->next = monitor->parameters;
monitor->parameters = clone;
}
params = params->next;
}
}

View File

@ -120,6 +120,7 @@ extern unsigned int config_pollsleep();
CONFIG_PARAMETER* config_get_param(CONFIG_PARAMETER* params, const char* name); CONFIG_PARAMETER* config_get_param(CONFIG_PARAMETER* params, const char* name);
config_param_type_t config_get_paramtype(CONFIG_PARAMETER* param); config_param_type_t config_get_paramtype(CONFIG_PARAMETER* param);
CONFIG_PARAMETER* config_clone_param(CONFIG_PARAMETER* param); CONFIG_PARAMETER* config_clone_param(CONFIG_PARAMETER* param);
void free_config_parameter(CONFIG_PARAMETER* p1);
extern int config_truth_value(char *); extern int config_truth_value(char *);
extern double config_percentage_value(char *str); extern double config_percentage_value(char *str);
bool config_set_qualified_param( bool config_set_qualified_param(

View File

@ -21,6 +21,7 @@
#include <server.h> #include <server.h>
#include <dcb.h> #include <dcb.h>
#include <resultset.h> #include <resultset.h>
#include <maxconfig.h>
/** /**
* @file monitor.h The interface to the monitor module * @file monitor.h The interface to the monitor module
@ -140,6 +141,7 @@ typedef struct monitor {
char* user; /*< Monitor username */ char* user; /*< Monitor username */
char* password; /*< Monitor password */ char* password; /*< Monitor password */
SPINLOCK lock; SPINLOCK lock;
CONFIG_PARAMETER* parameters; /*< configuration parameters */
MONITOR_SERVERS* databases; /*< List of databases the monitor monitors */ MONITOR_SERVERS* databases; /*< List of databases the monitor monitors */
monitor_state_t state; /**< The state of the monitor */ monitor_state_t state; /**< The state of the monitor */
int connect_timeout; /**< Connect timeout in seconds for mysql_real_connect */ int connect_timeout; /**< Connect timeout in seconds for mysql_real_connect */
@ -160,9 +162,11 @@ extern void monitor_free(MONITOR *);
extern MONITOR *monitor_find(char *); extern MONITOR *monitor_find(char *);
extern void monitorAddServer(MONITOR *, SERVER *); extern void monitorAddServer(MONITOR *, SERVER *);
extern void monitorAddUser(MONITOR *, char *, char *); extern void monitorAddUser(MONITOR *, char *, char *);
extern void monitorAddParameters(MONITOR *monitor, CONFIG_PARAMETER *params);
extern void monitorStop(MONITOR *); extern void monitorStop(MONITOR *);
extern void monitorStart(MONITOR *, void*); extern void monitorStart(MONITOR *, void*);
extern void monitorStopAll(); extern void monitorStopAll();
extern void monitorStartAll();
extern void monitorShowAll(DCB *); extern void monitorShowAll(DCB *);
extern void monitorShow(DCB *, MONITOR *); extern void monitorShow(DCB *, MONITOR *);
extern void monitorList(DCB *); extern void monitorList(DCB *);
@ -170,4 +174,5 @@ extern void monitorSetInterval (MONITOR *, unsigned long);
extern void monitorSetNetworkTimeout(MONITOR *, int, int); extern void monitorSetNetworkTimeout(MONITOR *, int, int);
extern RESULTSET *monitorGetList(); extern RESULTSET *monitorGetList();
bool check_monitor_permissions(MONITOR* monitor); bool check_monitor_permissions(MONITOR* monitor);
#endif #endif