From ba6406d3684dcfc5e4dc4491f4f76562613bb0b6 Mon Sep 17 00:00:00 2001 From: oetiker Date: Sun, 13 Mar 2005 15:12:44 +0000 Subject: [PATCH] missed the actual code for first git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk/program@310 a5681a0c-68f1-0310-ab6d-d61299d08faa --- src/rrd_first.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 src/rrd_first.c diff --git a/src/rrd_first.c b/src/rrd_first.c new file mode 100644 index 0000000..0d16a31 --- /dev/null +++ b/src/rrd_first.c @@ -0,0 +1,97 @@ +/***************************************************************************** + * RRDtool 1.0.49 Copyright Tobias Oetiker, 1997 - 2005 + ***************************************************************************** + * rrd_first Return + ***************************************************************************** + * Initial version by Burton Strauss, ntopSupport.com - 3/2005 + *****************************************************************************/ + +#include "rrd_tool.h" + + +time_t +rrd_first(int argc, char **argv) +{ + int target_rraindex=0; + char *endptr; + + while (1){ + static struct option long_options[] = + { + {"rraindex", required_argument, 0, 129}, + {0,0,0,0} + }; + int option_index = 0; + int opt; + opt = getopt_long(argc, argv, "", long_options, &option_index); + + if(opt == EOF) + break; + + switch(opt) { + case 129: + target_rraindex=strtol(optarg,&endptr,0); + if(target_rraindex < 0) { + rrd_set_error("invalid rraindex number"); + return(-1); + } + break; + default: + rrd_set_error("usage rrdtool %s [--rraindex number] file.rrd", argv[0]); + return(-1); + } + } + + if(optind >= argc){ + rrd_set_error("not enough arguments"); + return -1; + } + + return(rrd_first_r(argv[optind], target_rraindex)); +} + + +time_t +rrd_first_r(const char *filename, const int rraindex) +{ + long rra_start, + timer; + time_t then; + FILE *in_file; + rrd_t rrd; + + if(rrd_open(filename,&in_file,&rrd, RRD_READONLY)==-1){ + rrd_set_error("could not open RRD"); + return(-1); + } + + if((rraindex < 0) || (rraindex >= (int)rrd.stat_head->rra_cnt)) { + rrd_set_error("invalid rraindex number"); + return(-1); + } + + rra_start = ftell(in_file); + fseek(in_file, + (rra_start + + (rrd.rra_ptr[rraindex].cur_row+1) * + rrd.stat_head->ds_cnt * + sizeof(rrd_value_t)), + SEEK_SET); + timer = - (rrd.rra_def[rraindex].row_cnt-1); + if (rrd.rra_ptr[rraindex].cur_row + 1 > rrd.rra_def[rraindex].row_cnt) { + fseek(in_file,rra_start,SEEK_SET); + } + then = (rrd.live_head->last_up - + rrd.live_head->last_up % + (rrd.rra_def[rraindex].pdp_cnt*rrd.stat_head->pdp_step)) + + (timer * + rrd.rra_def[rraindex].pdp_cnt*rrd.stat_head->pdp_step); + + rrd_free(&rrd); + fclose(in_file); + return(then); +} + + + + -- 2.11.0