Example #1
0
int
merge_mult_item_to_array(U_64 *array, struct module *mod)
{
    int    pos = 0;
    int    n_item = 1;
    char   item[LEN_128] = {0};

    memset(array, 0, sizeof(U_64) * mod->n_col);
    while (strtok_next_item(item, mod->record, &pos)) {
        if (!merge_one_string(array, mod->n_col, item, mod, n_item)) {
            return 0;
        }
        n_item++;
        memset(&item, 0, sizeof(item));
    }
    return 1;
}
Example #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;
}