示例#1
0
文件: common.c 项目: kulv2012/tsar
int
merge_one_string(U_64 *array, int l_array, char *string, struct module *mod, int n_item)
{
    int    i, len;
    U_64   array_2[MAX_COL_NUM] = {0};
    struct mod_info *info = mod->info;

    if (!(len = convert_record_to_array(array_2, l_array, string))) {
        return 0;
    }

    for (i=0; i < len; i++) {
        switch (info[i].merge_mode) {
            case MERGE_SUM:
                array[i] += array_2[i];
                break;
            case MERGE_AVG:
                array[i] = (array[i] * (n_item - 1) + array_2[i]) / n_item;
                break;
            default:
                ;
        }
    }
    return 1;
}
示例#2
0
/*
 * computer mod->st_array and swap cur_info to pre_info
 * return:  1 -> ok
 *	    0 -> some mod->n_item have modify will reprint header
 */
int collect_record_stat()
{
    struct module *mod = NULL;
    U_64 *tmp, array[MAX_COL_NUM] = {0};
    int  i, n_item, ret, no_p_hdr = 1;

    for (i = 0; i < statis.total_mod_num; i++) {
        mod = &mods[i];
        if (!mod->enable)				
            continue;

        memset(array, 0, sizeof(array));
        mod->st_flag = 0;
        ret = 0;

        if ((n_item = get_strtok_num(mod->record, ITEM_SPLIT))) {
            /* not merge mode, and last n_item != cur n_item, then reset mod->n_item and set reprint header flag */
            if (MERGE_ITEM != conf.print_merge && n_item && n_item != mod->n_item) {
                no_p_hdr = 0;
                /* reset struct module fields */	
                realloc_module_array(mod, n_item);
            }

            mod->n_item = n_item;
            /* multiply item because of have ITEM_SPLIT */
            if (strstr(mod->record, ITEM_SPLIT)) {
                /* merge items */
                if (MERGE_ITEM == conf.print_merge) {
                    mod->n_item = 1;
                    ret = merge_mult_item_to_array(mod->cur_array, mod);
                } else {
                    char item[LEN_128] = {0};
                    int num = 0;
                    int pos = 0;

                    while (strtok_next_item(item, mod->record, &pos)) {
                        if (!(ret=convert_record_to_array(&mod->cur_array[num * mod->n_col],mod->n_col,item)))
                            break;
                        memset(item, 0, sizeof(item));
                        num++;
                    }
                }
            } else { /* one item */
                ret = convert_record_to_array(mod->cur_array, mod->n_col, mod->record);
            }

            /* get st record */
            if (no_p_hdr && mod->pre_flag && ret) {
                set_st_record(mod);
            }

            if (!ret)
                mod->pre_flag = 0;
            else
                mod->pre_flag = 1;
        } else
            mod->pre_flag = 0;
        /* swap cur_array to pre_array */
        tmp = mod->pre_array;
        mod->pre_array = mod->cur_array;
        mod->cur_array = tmp;
    }

    return no_p_hdr;
}