Wenn dies dein erster Besuch hier ist, lies bitte zuerst die Hilfe - Häufig gestellte Fragen durch. Du musst dich vermutlich registrieren, bevor du Beiträge verfassen kannst. Klicke oben auf 'Registrieren', um den Registrierungsprozess zu starten. Du kannst auch jetzt schon Beiträge lesen. Suche dir einfach das Forum aus, das dich am meisten interessiert.
Da ich mich nie damit beschäftigt habe kann ich leider inhaltlich nicht wirklich mitreden, aber:
Wenn im Handbuch etwas nicht oder falsch stehen sollte: bitte dort korrigieren! Dafür ist's ja ein Wiki geworden
TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!
3. Installieren der Abhängigkeiten für RRDTOOL:
apt-get install libpango1.0-dev glib-2.0
4. vi fetchj.patch
Code:
--- rrdtool-1.4.7.orig/src/rrd_tool.c 2013-03-15 08:20:58.610279063 +0100
+++ rrdtool-1.4.7/src/rrd_tool.c 2013-03-15 08:23:58.991211760 +0100
@@ -56,7 +56,7 @@
const char *help_list =
N_
("Valid commands: create, update, updatev, graph, graphv, dump, restore,\n"
- "\t\tlast, lastupdate, first, info, fetch, tune,\n"
+ "\t\tlast, lastupdate, first, info, fetch, fetchj, tune,\n"
"\t\tresize, xport, flushcached\n");
const char *help_listremote =
@@ -119,6 +119,12 @@
"\t\t[-r|--resolution resolution]\n"
"\t\t[-s|--start start] [-e|--end end]\n"
"\t\t[--daemon <address>]\n");
+
+ const char *help_fetchj =
+ N_("* fetchj - fetch data out of an RRD as JSON\n\n"
+ "\trrdtool fetchj filename.rrd CF\n"
+ "\t\t[-r|--resolution resolution]\n"
+ "\t\t[-s|--start start] [-e|--end end]\n\n");
const char *help_flushcached =
N_("* flushcached - flush cached data out to an RRD file\n\n"
@@ -230,7 +236,7 @@
"Public License Version 2. (www.gnu.org/copyleft/gpl.html)\n\n"
"For more information read the RRD manpages\n");
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_LASTUPDATE, C_FIRST, C_UPDATE, C_FETCH, C_FETCHJ, C_GRAPH, C_GRAPHV,
C_TUNE,
C_RESIZE, C_XPORT, C_QUIT, C_LS, C_CD, C_MKDIR, C_PWD,
C_UPDATEV, C_FLUSHCACHED
@@ -258,6 +264,8 @@
help_cmd = C_UPDATEV;
else if (!strcmp(cmd, "fetch"))
help_cmd = C_FETCH;
+ else if (!strcmp(cmd, "fetchj"))
+ help_cmd = C_FETCHJ;
else if (!strcmp(cmd, "flushcached"))
help_cmd = C_FLUSHCACHED;
else if (!strcmp(cmd, "graph"))
@@ -320,6 +328,9 @@
case C_FETCH:
puts(_(help_fetch));
break;
+ case C_FETCHJ:
+ puts(_(help_fetchj));
+ break;
case C_FLUSHCACHED:
puts(_(help_flushcached));
break;
@@ -682,7 +693,6 @@
unsigned long step, ds_cnt, i, ii;
rrd_value_t *data, *datai;
char **ds_namv;
-
if (rrd_fetch
(argc - 1, &argv[1], &start, &end, &step, &ds_cnt, &ds_namv,
&data) == 0) {
@@ -708,7 +708,40 @@
free(ds_namv);
free(data);
}
- } else if (strcmp("xport", argv[1]) == 0) {
+ }
+ else if (strcmp("fetchj", argv[1]) == 0) {
+ time_t start, end, ti;
+ unsigned long step, ds_cnt, i, ii;
+ rrd_value_t *data, *datai;
+ char **ds_namv;
+ int written = 0;
+
+ if (rrd_fetch
+ (argc - 1, &argv[1], &start, &end, &step, &ds_cnt, &ds_namv,
+ &data) != -1) {
+ datai = data;
+ // printf("Content-Type: text/plain\n\n");
+ printf("[");
+ for (ti = start + step; ti <= end; ti += step) {
+ if (written==1)
+ printf(",");
+ printf("[%10lu000,[", ti);
+ for (ii = 0; ii < ds_cnt; ii++) {
+ if (ii > 0)
+ printf(",");
+ printf("\"%0.2f\"", *(datai++));
+ }
+ printf("]]");
+ written = 1;
+ }
+ for (i = 0; i < ds_cnt; i++)
+ free(ds_namv[i]);
+ free(ds_namv);
+ free(data);
+ printf("]\n");
+ }
+ }
+ else if (strcmp("xport", argv[1]) == 0) {
#ifdef HAVE_RRD_GRAPH
int xxsize;
unsigned long int j = 0;
5. cd rrdtool-1.4.7
6. patch -p1 < ../fetchj.patch
7. ./configure (Weiter wenn keine Fehlermeldung, ansonsten Fehlendes Paket nach Installieren
8. make
9. make install
10. cp ./src/rrdtool /usr/bin
[EDIT]
musste heut erneut das rrdtool patchen. Leider musste ich den Hunk 2 des patches von Hand eingeben.
Einfach /src/rrd_tool.c öffnen
und in Zeil 119 den Code aus Hunk 2 ergänzen
[/EDIT]
Die rrdfetch:
vi /usr/lib/cgi-bin/rrdfetch
Code:
#!/bin/sh
#echo Content-Type: text/plain
echo Content-Type: application/json
echo Content-Encoding: gzip
echo
#rrdtool fetch /var/www/rrd/Luftfeuchte_Bad_knx5-2-79.rrd AVERAGE -s-24h
RRD=`echo "$QUERY_STRING" | sed -n 's/^.*rrd=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
DS=`echo "$QUERY_STRING" | sed -n 's/^.*ds=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
START=`echo "$QUERY_STRING" | sed -n 's/^.*start=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
END=`echo "$QUERY_STRING" | sed -n 's/^.*end=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
RES=`echo "$QUERY_STRING" | sed -n 's/^.*res=\([^&]*\).*$/\1/p' | sed "s/%20/ /g"`
#FIXME: check path traversal
rrdtool fetchj /var/www/rrd/$RRD $DS -s$START -e$END -r$RES | gzip -c
Zuletzt geändert von larsrosen; 06.08.2017, 18:37.
Wir verarbeiten personenbezogene Daten über die Nutzer unserer Website mithilfe von Cookies und anderen Technologien, um unsere Dienste bereitzustellen. Weitere Informationen findest Du in unserer Datenschutzerklärung.
Indem Du unten auf "ICH stimme zu" klickst, stimmst Du unserer Datenschutzerklärung und unseren persönlichen Datenverarbeitungs- und Cookie-Praktiken zu, wie darin beschrieben. Du erkennst außerdem an, dass dieses Forum möglicherweise außerhalb Deines Landes gehostet wird und bist damit einverstanden, dass Deine Daten in dem Land, in dem dieses Forum gehostet wird, gesammelt, gespeichert und verarbeitet werden.
Kommentar