From ff67daa55f6cfcb48357a8fddaa312b9fb49602b Mon Sep 17 00:00:00 2001 From: Jan Friesse Date: Mon, 24 Feb 2014 17:29:21 +0100 Subject: [PATCH] mon: Make monitoring work Signed-off-by: Jan Friesse Reviewed-by: Christine Caulfield --- exec/mon.c | 53 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/exec/mon.c b/exec/mon.c index 1ce0575b..8b500fbb 100644 --- a/exec/mon.c +++ b/exec/mon.c @@ -237,14 +237,26 @@ static void mon_fsm_state_set (struct cs_fsm* fsm, static void mon_config_changed (struct cs_fsm* fsm, int32_t event, void * data) { struct resource_instance * inst = (struct resource_instance *)data; + char *tmp_str; uint64_t tmp_value; char key_name[ICMAP_KEYNAME_MAXLEN]; int run_updater; + int scanf_res = 0; + int32_t i32; + double dbl; ENTER(); snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", inst->icmap_path, "poll_period"); - if (icmap_get_uint64(key_name, &tmp_value) == CS_OK) { + if (icmap_get_string(key_name, &tmp_str) == CS_OK) { + scanf_res = sscanf(tmp_str, "%"PRIu64, &tmp_value); + if (scanf_res != 1) { + log_printf (LOGSYS_LEVEL_WARNING, + "Could NOT use poll_period: %s (not uint64 type) for resource %s", + tmp_str, inst->name); + } + free(tmp_str); + if (tmp_value >= MON_MIN_PERIOD && tmp_value <= MON_MAX_PERIOD) { log_printf (LOGSYS_LEVEL_DEBUG, "poll_period changing from:%"PRIu64" to %"PRIu64".", @@ -265,23 +277,29 @@ static void mon_config_changed (struct cs_fsm* fsm, int32_t event, void * data) run_updater = 0; snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", inst->icmap_path, "max"); - if (inst->max_type == ICMAP_VALUETYPE_INT32) { - if (icmap_get_int32(key_name, &inst->max.int32) != CS_OK) { - inst->max.int32 = INT32_MAX; - mon_fsm_state_set (fsm, MON_S_STOPPED, inst); - } else { - run_updater = 1; - } - } - if (inst->max_type == ICMAP_VALUETYPE_DOUBLE) { - if (icmap_get_double(key_name, &inst->max.dbl) != CS_OK) { - inst->max.dbl = INT32_MAX; + if (icmap_get_string(key_name, &tmp_str) == CS_OK) { + if (inst->max_type == ICMAP_VALUETYPE_INT32) { + if (sscanf(tmp_str, "%"PRId32, &i32) != 1) { + inst->max.int32 = INT32_MAX; - mon_fsm_state_set (fsm, MON_S_STOPPED, inst); - } else { - run_updater = 1; + mon_fsm_state_set (fsm, MON_S_STOPPED, inst); + } else { + inst->max.int32 = i32; + run_updater = 1; + } } + if (inst->max_type == ICMAP_VALUETYPE_DOUBLE) { + if (sscanf(tmp_str, "%lf", &dbl) != 1) { + inst->max.dbl = INT32_MAX; + + mon_fsm_state_set (fsm, MON_S_STOPPED, inst); + } else { + inst->max.dbl = dbl; + run_updater = 1; + } + } + free(tmp_str); } if (run_updater) { @@ -429,6 +447,7 @@ static void mon_instance_init (struct resource_instance* inst) uint64_t tmp_value; char key_name[ICMAP_KEYNAME_MAXLEN]; icmap_track_t icmap_track = NULL; + char *tmp_str; snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", inst->icmap_path, "current"); if (inst->max_type == ICMAP_VALUETYPE_INT32) { @@ -452,7 +471,8 @@ static void mon_instance_init (struct resource_instance* inst) inst->fsm.event_to_str = mon_res_event_to_str; snprintf(key_name, ICMAP_KEYNAME_MAXLEN, "%s%s", inst->icmap_path, "poll_period"); - if (icmap_get_uint64(key_name, &tmp_value) != CS_OK) { + if (icmap_get_string(key_name, &tmp_str) != CS_OK || + sscanf(tmp_str, "%"PRIu64, &tmp_value) != 1) { icmap_set_uint64(key_name, inst->period); } else { @@ -463,6 +483,7 @@ static void mon_instance_init (struct resource_instance* inst) "Could NOT use poll_period:%"PRIu64" ms for resource %s", tmp_value, inst->name); } + free(tmp_str); } cs_fsm_process (&inst->fsm, MON_E_CONFIG_CHANGED, inst, mon_fsm_cb);