Created
October 7, 2010 02:59
-
-
Save kastner/614476 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
commit f21a996ff88a09d30e818fc9815f19c055efb215 | |
Author: Erik Kastner <[email protected]> | |
Date: Wed Oct 6 22:39:46 2010 -0400 | |
work in progress | |
diff --git a/src/rrd_tool.c b/src/rrd_tool.c | |
index 4ad80f7..76a3c35 100644 | |
--- a/src/rrd_tool.c | |
+++ b/src/rrd_tool.c | |
@@ -55,7 +55,7 @@ void PrintUsage( | |
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"); | |
@@ -208,6 +208,13 @@ void PrintUsage( | |
"\t\t[--enumds]\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"); | |
@@ -230,7 +237,7 @@ void PrintUsage( | |
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; | |
@@ -268,6 +275,8 @@ void PrintUsage( | |
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")) | |
@@ -343,6 +352,9 @@ void PrintUsage( | |
case C_XPORT: | |
puts(_(help_xport)); | |
break; | |
+ case C_JSON: | |
+ puts(_(help_json)); | |
+ break; | |
case C_QUIT: | |
puts(_(help_quit)); | |
break; | |
@@ -770,6 +782,59 @@ int HandleInputLine( | |
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) { | |
+ // printf("\t\t%lu") | |
+ 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 if (strcmp("graph", argv[1]) == 0) { | |
char **calcpr; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment