freebsd-ports/databases/rrdtool/files/thirdparty-json.diff
Sylvio Cesar Teixeira c7984b2e77 - Fix problem of build with json
- Comment line LDFLAGS to fix problem with version upgrade.
- BUMP PORTREVISION
2012-05-11 20:57:25 +00:00

112 lines
4 KiB
Diff

--- src/rrd_tool.c.orig 2012-01-24 08:08:48.000000000 -0200
+++ src/rrd_tool.c 2012-05-11 15:57:51.000000000 -0300
@@ -57,7 +57,7 @@
N_
("Valid commands: create, update, updatev, graph, graphv, dump, restore,\n"
"\t\tlast, lastupdate, first, info, fetch, tune,\n"
- "\t\tresize, xport, flushcached\n");
+ "\t\tresize, xport, json, flushcached\n");
const char *help_listremote =
N_("Valid remote commands: quit, ls, cd, mkdir, pwd\n");
@@ -210,6 +210,13 @@
"\t\t[--enumds] [--json]\n" "\t\t[DEF:vname=rrd:ds-name:CF]\n"
"\t\t[CDEF:vname=rpn-expression]\n"
"\t\t[XPORT:vname:legend]\n");
+ const char *help_json =
+ N_("* json - generate JSON dump from one or several RRD\n\n"
+ "\trrdtool json [-s|--start seconds] [-e|--end seconds]\n"
+ "\t\t[-m|--maxrows rows]\n" "\t\t[--step seconds]\n"
+ "\t\t[DEF:vname=rrd:ds-name:CF]\n"
+ "\t\t[CDEF:vname=rpn-expression]\n"
+ "\t\t[XPORT:vname:legend]\n");
const char *help_quit =
N_(" * quit - closing a session in remote mode\n\n"
"\trrdtool quit\n");
@@ -232,7 +239,7 @@
enum { C_NONE, C_CREATE, C_DUMP, C_INFO, C_RESTORE, C_LAST,
C_LASTUPDATE, C_FIRST, C_UPDATE, C_FETCH, C_GRAPH, C_GRAPHV,
C_TUNE,
- C_RESIZE, C_XPORT, C_QUIT, C_LS, C_CD, C_MKDIR, C_PWD,
+ C_RESIZE, C_XPORT, C_JSON, C_QUIT, C_LS, C_CD, C_MKDIR, C_PWD,
C_UPDATEV, C_FLUSHCACHED
};
int help_cmd = C_NONE;
@@ -270,6 +277,8 @@
help_cmd = C_RESIZE;
else if (!strcmp(cmd, "xport"))
help_cmd = C_XPORT;
+ else if (!strcmp(cmd, "json"))
+ help_cmd = C_JSON;
else if (!strcmp(cmd, "quit"))
help_cmd = C_QUIT;
else if (!strcmp(cmd, "ls"))
@@ -345,6 +354,9 @@
case C_XPORT:
puts(_(help_xport));
break;
+ case C_JSON:
+ puts(_(help_json));
+ break;
case C_QUIT:
puts(_(help_quit));
break;
@@ -844,6 +856,58 @@
setlocale(LC_NUMERIC, old_locale);
}
free(vtag);
+ } else if (strcmp("json", argv[1]) == 0) {
+ int xxsize;
+ unsigned long int j = 0;
+ time_t start, end, ti;
+ unsigned long step, col_cnt;
+ rrd_value_t *data, *ptr;
+ char **legend_v;
+ int i;
+
+ if (rrd_xport
+ (argc - 1, &argv[1], &xxsize, &start, &end, &step, &col_cnt,
+ &legend_v, &data) != -1) {
+ char *old_locale = setlocale(LC_NUMERIC, "C");
+ printf("[\n");
+ for (j = 0; j < col_cnt; j++) {
+ char *entry = NULL;
+ ptr = j + data;
+ entry = legend_v[j];
+
+ printf("\t{\n\t\t\"%s\": {\n", entry);
+ free(entry);
+ printf("\t\t\t\"%s\": %lld,\n", META_START_TAG,
+ (long long int) start + step);
+ printf("\t\t\t\"%s\": %lu,\n", META_STEP_TAG, step);
+ printf("\t\t\t\"%s\": %lld,\n", META_END_TAG, (long long int) end);
+ printf("\t\t\t\"data_points\": [\n");
+
+ for (ti = start + step; ti <= end; ti += step) {
+ rrd_value_t newval = DNAN;
+ newval = *ptr;
+ if (isnan(newval)) {
+ printf("null");
+ } else {
+ printf("%0.5f", newval);
+ };
+ if (ti < end) {
+ printf(", ");
+ }
+ ptr+=col_cnt;
+ }
+
+ printf("\n\t\t\t]\n");
+ printf("\t\t}\n");
+
+ printf("\t}%s\n", (j<col_cnt-1) ? "," : "");
+ }
+ free(legend_v);
+
+ free(data);
+ printf("]\n");
+ setlocale(LC_NUMERIC, old_locale);
+ }
#else
rrd_set_error("the instance of rrdtool has been compiled without graphics");
#endif