示例#1
0
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;
        }
    }
示例#2
0
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;
}
示例#3
0
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;
}