static orcm_value_t* compute_min(opal_list_t* compute, orcm_analytics_aggregate* aggregate, int workflow_id) { orcm_value_t *current_value = NULL; orcm_value_t *temp = NULL; orcm_value_t *min_value = NULL; char *data_key = NULL; double val; if(NULL == compute || NULL == aggregate) { return NULL; } temp = (orcm_value_t*)opal_list_get_first(compute); if(NULL != temp) { if (NULL == (data_key = generate_data_key("MIN", workflow_id))) { return NULL; } min_value = orcm_util_load_orcm_value(data_key, &temp->value.data,OPAL_DOUBLE,temp->units); } if(NULL == min_value){ SAFEFREE(data_key); return NULL; } min_value->value.data.dval = aggregate->min; OPAL_LIST_FOREACH(current_value, compute, orcm_value_t) { val = orcm_util_get_number_orcm_value(current_value); if(val < aggregate->min) { aggregate->min = val; min_value->value.data.dval = aggregate->min; } }
int orcm_analytics_base_event_set_description(orcm_ras_event_t *analytics_event_data, char *key, void *data, opal_data_type_t type, char *units) { orcm_value_t *analytics_orcm_value = NULL; analytics_orcm_value = orcm_util_load_orcm_value(key, data, type, units); if (NULL == analytics_orcm_value) { return ORCM_ERR_OUT_OF_RESOURCE; } opal_list_append(&(analytics_event_data->description), (opal_list_item_t *)analytics_orcm_value); return ORCM_SUCCESS; }
static orcm_value_t *compute_average(opal_list_t *compute_data, orcm_analytics_aggregate* aggregate, int workflow_id) { double sum = 0.0; orcm_value_t *temp = NULL; orcm_value_t *aggregate_value = NULL; orcm_value_t *list_item = NULL; char *data_key = NULL; if (NULL == compute_data || NULL == aggregate) { return NULL; } size_t size = opal_list_get_size(compute_data); temp = (orcm_value_t*)opal_list_get_first(compute_data); if(NULL != temp) { if (NULL == (data_key = generate_data_key("average", workflow_id))) { return NULL; } aggregate_value = orcm_util_load_orcm_value(data_key, &temp->value.data,OPAL_DOUBLE,temp->units); } if(NULL == aggregate_value) { SAFEFREE(data_key); return NULL; } OPAL_LIST_FOREACH(list_item, compute_data, orcm_value_t) { if (NULL == list_item) { SAFEFREE(data_key); return NULL; } sum += orcm_util_get_number_orcm_value(list_item); } aggregate_value->value.data.dval = (aggregate->average * aggregate->num_sample + sum) / (aggregate->num_sample + size); aggregate->average = aggregate_value->value.data.dval; aggregate->num_sample += size; OPAL_OUTPUT_VERBOSE((5, orcm_analytics_base_framework.framework_output, "%s analytics:aggregate:AVERAGE is: %f, and the number of sample is:%u", ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), aggregate->average,aggregate->num_sample)); SAFEFREE(data_key); return aggregate_value; }
static orcm_value_t* compute_agg(char* op, char* data_key, opal_list_t* compute, orcm_analytics_aggregate* aggregate) { orcm_value_t *temp = NULL; orcm_value_t *agg_value = NULL; if(NULL == compute || NULL == aggregate || NULL == data_key) { return NULL; } temp = (orcm_value_t*)opal_list_get_first(compute); ON_NULL_RETURN(temp); agg_value = orcm_util_load_orcm_value(data_key, &temp->value.data,OPAL_DOUBLE,temp->units); ON_NULL_RETURN(agg_value); if(0 == strncmp(op,"average", strlen(op))) { compute_average(agg_value, aggregate, compute); } else if (0 == strncmp(op, "min", strlen(op))){ compute_min(agg_value, aggregate, compute); } else if (0 == strncmp(op,"max", strlen(op))){ compute_max(agg_value, aggregate, compute); } else { SAFEFREE(agg_value); } return agg_value; }