static void print_json_sub_items (FILE * fp, GHolder * h, int idx, int processed) { GMetrics *nmetrics; GSubItem *iter; GSubList *sub_list = h->items[idx].sub_list; char *sep = char_repeat (3, '\t'); int i = 0; if (sub_list == NULL) return; fprintf (fp, ",\n%s\"items\": [\n", sep); for (iter = sub_list->head; iter; iter = iter->next, i++) { set_data_metrics (iter->metrics, &nmetrics, processed); fprintf (fp, "%s{\n", sep); print_json_block (fp, nmetrics, sep); fprintf (fp, (i != sub_list->size - 1) ? "\n%s},\n" : "\n%s}\n", sep); free (nmetrics); } fprintf (fp, "\t\t\t]"); free (sep); }
/* A wrapper function to ouput children nodes. */ static void print_json_sub_items (GJSON * json, GHolderItem * item, GPercTotals totals, int size, int iisp) { GMetrics *nmetrics; GSubItem *iter; GSubList *sl = item->sub_list; int i = 0, iiisp = 0, iiiisp = 0; /* no sub items, nothing to output */ if (size == 0) return; /* use tabs to prettify output */ if (conf.json_pretty_print) iiisp = iisp + 1, iiiisp = iiisp + 1; if (sl == NULL) return; pjson (json, ",%.*s%.*s\"items\": [%.*s", nlines, NL, iisp, TAB, nlines, NL); for (iter = sl->head; iter; iter = iter->next, i++) { set_data_metrics (iter->metrics, &nmetrics, totals); popen_obj (json, iiisp); print_json_block (json, nmetrics, iiiisp); pclose_obj (json, iiisp, (i == sl->size - 1)); free (nmetrics); } pclose_arr (json, iisp, 1); }
/* Ouput data and determine if there are children nodes. */ static void print_data_metrics (GJSON * json, GHolder * h, GPercTotals totals, int sp, const struct GPanel_ *panel) { GMetrics *nmetrics; int i, isp = 0, iisp = 0, iiisp = 0; /* use tabs to prettify output */ if (conf.json_pretty_print) isp = sp + 1, iisp = sp + 2, iiisp = sp + 3; popen_arr_attr (json, "data", isp); /* output data metrics */ for (i = 0; i < h->idx; i++) { set_data_metrics (h->items[i].metrics, &nmetrics, totals); /* open data metric block */ popen_obj (json, iisp); /* output data metric block */ print_json_block (json, nmetrics, iiisp); /* if there are children nodes, spit them out */ if (panel->subitems) panel->subitems (json, h->items + i, totals, h->sub_items_size, iiisp); /* close data metric block */ pclose_obj (json, iisp, (i == h->idx - 1)); free (nmetrics); } pclose_arr (json, isp, 1); }
/* Ouput data and determine if there are children nodes. */ static void print_data_metrics (FILE * fp, GHolder * h, GPercTotals totals, int sp, const struct GPanel_ *panel) { GMetrics *nmetrics; char comma = ' '; int i, isp = 0, iisp = 0, iiisp = 0; /* use tabs to prettify output */ if (conf.json_pretty_print) isp = sp + 1, iisp = sp + 2, iiisp = sp + 3; print_open_data_attr (fp, isp); /* output data metrics */ for (i = 0; i < h->idx; i++) { set_data_metrics (h->items[i].metrics, &nmetrics, totals); /* open data metric block */ print_open_block_attr (fp, iisp); /* output data metric block */ print_json_block (fp, nmetrics, iiisp); /* if there are children notes, spit them out */ if (panel->subitems && h->sub_items_size) panel->subitems (fp, h->items[i].sub_list, totals, iiisp); /* close data metric block */ comma = (i != h->idx - 1) ? ',' : ' '; print_close_block_attr (fp, iisp, comma); free (nmetrics); } print_close_data_attr (fp, isp); }
/* A wrapper function to ouput children nodes. */ static void print_json_sub_items (FILE * fp, GSubList * sl, GPercTotals totals, int iisp) { GMetrics *nmetrics; GSubItem *iter; char comma = ' '; int i = 0, iiisp = 0, iiiisp = 0; /* use tabs to prettify output */ if (conf.json_pretty_print) iiisp = iisp + 1, iiiisp = iiisp + 1; if (sl == NULL) return; pjson (fp, ",%.*s%.*s\"items\": [%.*s", nlines, NL, iisp, TAB, nlines, NL); for (iter = sl->head; iter; iter = iter->next, i++) { set_data_metrics (iter->metrics, &nmetrics, totals); pjson (fp, "%.*s{%.*s", iiisp, TAB, nlines, NL); print_json_block (fp, nmetrics, iiiisp); comma = (i != sl->size - 1) ? ',' : ' '; pjson (fp, "%.*s%.*s}%c%.*s", nlines, NL, iiisp, TAB, comma, nlines, NL); free (nmetrics); } pjson (fp, "%.*s]", iisp, TAB); }
static void print_json_host_data (FILE * fp, GHolder * h, int processed) { GMetrics *nmetrics; char *sep = char_repeat (2, '\t'); int i; fprintf (fp, "\t\"%s\": [\n", module_to_id (h->module)); for (i = 0; i < h->idx; i++) { set_data_metrics (h->items[i].metrics, &nmetrics, processed); fprintf (fp, "%s{\n", sep); print_json_block (fp, nmetrics, sep); print_json_host_geo (fp, h->items[i].sub_list, sep); fprintf (fp, (i != h->idx - 1) ? "\n%s},\n" : "\n%s}\n", sep); free (nmetrics); } fprintf (fp, "\t]"); free (sep); }