/* add a status code item to holder */ static void add_status_code_node (GHolder * h, int hits, char *data, unsigned long long bw) { GSubList *sub_list; char *type = NULL, *status = NULL; int type_idx = -1; type = verify_status_code_type (data); status = verify_status_code (data); type_idx = get_item_idx_in_holder (h, type); if (type_idx == -1) { h->items[h->idx].bw += bw; h->items[h->idx].hits += hits; h->items[h->idx].data = xstrdup (type); /* data (child) */ sub_list = new_gsublist (); add_sub_item_back (sub_list, h->module, status, hits, bw); h->items[h->idx++].sub_list = sub_list; h->sub_items_size++; } else { sub_list = h->items[type_idx].sub_list; add_sub_item_back (sub_list, h->module, status, hits, bw); h->items[type_idx].sub_list = sub_list; h->items[type_idx].bw += bw; h->items[type_idx].hits += hits; h->sub_items_size++; } }
/* add a browser item to holder */ static void add_os_browser_node (GHolder * h, int hits, char *data, unsigned long long bw) { GSubList *sub_list; char *type = NULL; int type_idx = -1; if (h->module == OS) type = verify_os (data, OPESYS_TYPE); else type = verify_browser (data, BROWSER_TYPE); type_idx = get_item_idx_in_holder (h, type); if (type_idx == -1) { h->items[h->idx].bw += bw; h->items[h->idx].hits += hits; h->items[h->idx].data = xstrdup (type); /* data (child) */ sub_list = new_gsublist (); add_sub_item_back (sub_list, h->module, data, hits, bw); h->items[h->idx++].sub_list = sub_list; h->sub_items_size++; } else { sub_list = h->items[type_idx].sub_list; add_sub_item_back (sub_list, h->module, data, hits, bw); h->items[type_idx].sub_list = sub_list; h->items[type_idx].bw += bw; h->items[type_idx].hits += hits; h->sub_items_size++; } free (type); }
static void add_root_to_holder (GRawDataItem item, GHolder * h, GO_UNUSED const GPanel * panel) { GDataMap *map; GSubList *sub_list; GMetrics *metrics, *nmetrics; char *root = NULL; int data_nkey = 0, root_idx = KEY_NOT_FOUND, idx = 0; data_nkey = (*(int *) item.key); map = (GDataMap *) item.value; if (map == NULL) return; if (set_root_metrics (data_nkey, map, h->module, &nmetrics) == 1) return; if (!(root = (get_root_from_key (map->root, h->module)))) return; /* add data as a child node into holder */ if (KEY_NOT_FOUND == (root_idx = get_item_idx_in_holder (h, root))) { idx = h->idx; sub_list = new_gsublist (); metrics = new_gmetrics (); h->items[idx].metrics = metrics; h->items[idx].metrics->data = root; h->idx++; } else { sub_list = h->items[root_idx].sub_list; metrics = h->items[root_idx].metrics; idx = root_idx; free (root); } add_sub_item_back (sub_list, h->module, nmetrics); h->items[idx].sub_list = sub_list; h->items[idx].metrics = metrics; h->items[idx].metrics->avgts.nts += nmetrics->avgts.nts; h->items[idx].metrics->cumts.nts += nmetrics->cumts.nts; h->items[idx].metrics->maxts.nts += nmetrics->maxts.nts; h->items[idx].metrics->bw.nbw += nmetrics->bw.nbw; h->items[idx].metrics->hits += nmetrics->hits; h->items[idx].metrics->visitors += nmetrics->visitors; h->sub_items_size++; }