[rrd-users] patchkit for "rrdtool last file.rrd [--time|--counters|--values]"
steve rader
rader at teak.wiscnet.net
Mon Sep 13 19:17:37 MEST 1999
See enclosed or [1]. I recken this is useful:
bash% rrdtool last --time some.rrd
time:937242355
bash% rrdtool last --counters some.rrd
counter:input:937242355:1972629937
counter:output:937242355:3028471975
bash% rrdtool last --values some.rrd
value:input:937242355:1.0463010000e+06
value:output:937242355:3.5241593750e+05
The WiscNet rrdtool stuff will depend on it eventually so it'd
be nice if it makes it way into the source.
later
steve
- - -
systems guy
wiscnet.net
[1] ftp://teak.wiscnet.net/pub/src/rrd-1.0.7-last.patch
-- Attached file included as plaintext by Listar --
-- Desc: rrd-1.0.7-last.patch
--- rrdtool-1.0.7/src/rrd_tool.c.orig Fri Aug 27 14:20:05 1999
+++ rrdtool-1.0.7/src/rrd_tool.c Sat Sep 11 21:26:55 1999
@@ -36,8 +36,9 @@
"* restore - restore an RRD file from its XML form\n\n"
"\trrdtool restore [--range-check|-r] filename.xml filename.rrd\n\n"
- "* last - show last update time for RRD\n\n"
- "\trrdtool last filename.rrd\n\n"
+ "* last - show last update time or counters or values for an RRD\n\n"
+ "\trrdtool last filename.rrd\n"
+ "\t\t[--time|-t --counters|-c --values|-v]\n\n"
"* update - update an RRD\n\n"
"\trrdtool update filename\n"
@@ -190,7 +191,7 @@
else if (strcmp("resize", argv[1]) == 0)
rrd_resize(argc-1, &argv[1]);
else if (strcmp("last", argv[1]) == 0)
- printf("%ld\n",rrd_last(argc-1, &argv[1]));
+ rrd_last(argc-1, &argv[1]);
else if (strcmp("update", argv[1]) == 0)
rrd_update(argc-1, &argv[1]);
else if (strcmp("fetch", argv[1]) == 0) {
--- rrdtool-1.0.7/src/rrd_last.c.orig Fri Aug 27 14:20:05 1999
+++ rrdtool-1.0.7/src/rrd_last.c Sat Sep 11 21:28:44 1999
@@ -4,6 +4,7 @@
* rrd_last.c
*****************************************************************************
* Initial version by Russ Wright, @Home Network, 9/28/98
+ * Time, counters and values options added by steve rader, 9/11/99
*****************************************************************************/
#include "rrd_tool.h"
@@ -12,23 +13,81 @@
rrd_last(int argc, char **argv)
{
FILE *in_file;
- time_t lastup;
-
rrd_t rrd;
+ int i, time = 0, counters = 0, values = 0;
+
+ while (1) {
+ static struct option long_options[] =
+ { {"time", 0 , 0, 't'},
+ {"counters", 0 , 0, 'c'},
+ {"values", 0 , 0, 'v'},
+ {0,0,0,0}
+ };
+ int option_index = 0;
+ int opt;
+ opt = getopt_long(argc, argv, "tcv", long_options, &option_index);
+
+ if (opt == EOF)
+ break;
+
+ switch(opt) {
+ case 't':
+ time = 1;
+ break;
+ case 'c':
+ counters = 1;
+ break;
+ case 'v':
+ values = 1;
+ break;
+ case '?':
+ rrd_set_error("unknown option '%s'",argv[optind-1]);
+ rrd_free(&rrd);
+ return(-1);
+ }
+ }
- if(argc < 2){
- rrd_set_error("please specify an rrd");
+ /* need one arg: rrd filename */
+ if(argc-optind < 1){
+ rrd_set_error("not enough arguments");
return(-1);
}
- if(rrd_open(argv[1], &in_file, &rrd, RRD_READONLY)==-1){
+ /* no args defaults to old usage */
+ if ( time == 0 && counters == 0 && values == 0 ) {
+ time = 1;
+ }
+
+ if(rrd_open(argv[optind], &in_file, &rrd, RRD_READONLY)==-1){
return(-1);
}
- lastup = rrd.live_head->last_up;
+
+ if ( time ) {
+ printf("time:%ld\n",rrd.live_head->last_up);
+ }
+ if ( counters ) {
+ for(i=0;i<rrd.stat_head->ds_cnt;i++){
+ printf("counter:%s:%ld:%s\n",
+ rrd.ds_def[i].ds_nam,
+ rrd.live_head->last_up,
+ rrd.pdp_prep[i].last_ds);
+ }
+ }
+ if ( values ) {
+ for(i=0;i<rrd.stat_head->ds_cnt;i++){
+ if (isnan(rrd.pdp_prep[i].scratch[PDP_val].u_val)){
+ printf("value:%s:%ld:NaN\n",
+ rrd.ds_def[i].ds_nam,
+ rrd.live_head->last_up);
+ } else {
+ printf("value:%s:%ld:%0.10e\n",
+ rrd.ds_def[i].ds_nam,
+ rrd.live_head->last_up,
+ rrd.pdp_prep[i].scratch[PDP_val].u_val);
+ }
+ }
+ }
+
rrd_free(&rrd);
fclose(in_file);
- return(lastup);
}
-
-
-
--
* To unsubscribe from the rrd-users mailing list, send a message with the
subject: unsubscribe to rrd-users-request at list.ee.ethz.ch
More information about the rrd-users
mailing list