58 #define MON_DEFAULT_PERIOD 3000
59 #define MON_MIN_PERIOD 500
60 #define MON_MAX_PERIOD (120 * CS_TIME_MS_IN_SEC)
63 .
name =
"corosync resource monitoring service",
66 .private_data_size = 0,
71 .lib_engine_count = 0,
73 .exec_engine_count = 0,
75 .exec_init_fn = mon_exec_init_fn,
96 static void mem_update_stats_fn (
void *data);
97 static void load_update_stats_fn (
void *data);
100 .
name =
"memory_used",
101 .icmap_path =
"resources.system.memory_used.",
102 .update_stats_fn = mem_update_stats_fn,
104 .max.int32 = INT32_MAX,
109 .
name =
"load_15min",
110 .icmap_path =
"resources.system.load_15min.",
111 .update_stats_fn = load_update_stats_fn,
113 .max.dbl = INT32_MAX,
121 static void mon_config_changed (
struct cs_fsm*
fsm, int32_t event,
void * data);
122 static void mon_resource_failed (
struct cs_fsm*
fsm, int32_t event,
void * data);
151 return (&mon_service_engine);
154 static const char * mon_res_state_to_str(
struct cs_fsm* fsm,
171 static const char * mon_res_event_to_str(
struct cs_fsm* fsm,
185 static void mon_fsm_cb (
struct cs_fsm *fsm,
int cb_event, int32_t curr_state,
186 int32_t next_state, int32_t fsm_event,
void *data)
216 static void mon_fsm_state_set (
struct cs_fsm* fsm,
220 const char *state_str;
225 cs_fsm_state_set(fsm, next_state, inst, mon_fsm_cb);
230 state_str = mon_res_state_to_str(fsm, fsm->
curr_state);
237 static void mon_config_changed (
struct cs_fsm* fsm, int32_t event,
void * data)
250 "poll_period changing from:%"PRIu64
" to %"PRIu64
".",
255 "Could NOT use poll_period:%"PRIu64
" ms for resource %s",
256 tmp_value, inst->
name);
279 inst->
max.
dbl = INT32_MAX;
297 void mon_resource_failed (
struct cs_fsm* fsm, int32_t event,
void * data)
304 static int32_t percent_mem_used_get(
void)
306 sg_mem_stats *mem_stats;
307 sg_swap_stats *swap_stats;
308 long long total, freemem;
310 mem_stats = sg_get_mem_stats();
311 swap_stats = sg_get_swap_stats();
313 if (mem_stats == NULL || swap_stats != NULL) {
315 sg_str_error(sg_get_error()));
318 total = mem_stats->total + swap_stats->total;
319 freemem = mem_stats->free + swap_stats->free;
320 return ((total - freemem) * 100) / total;
323 static void mem_update_stats_fn (
void *data)
330 new_value = percent_mem_used_get();
335 timestamp = cs_timestamp_get();
348 static double min15_loadavg_get(
void)
350 sg_load_stats *load_stats;
351 load_stats = sg_get_load_stats ();
352 if (load_stats == NULL) {
354 sg_str_error (sg_get_error()));
357 return load_stats->min15;
360 static void load_update_stats_fn (
void *data)
365 double min15 = min15_loadavg_get();
371 timestamp = cs_timestamp_get();
385 static void mon_key_changed_cb (
387 const char *key_name,
397 "resource \"%s\" deleted from cmap!",
404 last_key_part = strrchr(key_name,
'.');
405 if (last_key_part == NULL)
409 if (strcmp(last_key_part,
"max") == 0 ||
410 strcmp(last_key_part,
"poll_period") == 0) {
453 "Could NOT use poll_period:%"PRIu64
" ms for resource %s",
454 tmp_value, inst->
name);
461 mon_key_changed_cb, inst, &icmap_track);
470 mon_instance_init (&memory_used_inst);
471 mon_instance_init (&load_15min_inst);