Code

Initial revision
[rrdtool-all.git] / contrib / trytime / trytime.c
diff --git a/contrib/trytime/trytime.c b/contrib/trytime/trytime.c
new file mode 100644 (file)
index 0000000..8e6e260
--- /dev/null
@@ -0,0 +1,105 @@
+#include <time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <getopt.h>
+#include <rrd_tool.h>
+
+#ifndef        WANT_AT_STYLE_TIMESPEC
+#define        WANT_AT_STYLE_TIMESPEC
+#endif
+
+#define BUF_LEN 128
+
+static char soption[BUF_LEN];
+static char eoption[BUF_LEN];
+
+int main ( int ac, char **av )
+{
+  static struct option long_options[] =
+  {
+     {"start",      required_argument, 0, 's'},
+     {"end",        required_argument, 0, 'e'},
+     {0,0,0,0}};
+  int option_index = 0;
+  int opt;
+   
+  time_t start_tmp, end_tmp, Now = time(NULL);
+  char tim_b[200];
+  
+  struct time_value start_tv, end_tv;
+  char *parsetime_error = NULL;
+  
+  /* default values */
+  parsetime("end-24h", &start_tv);
+  parsetime("now", &end_tv);
+
+  if( ac < 2 )
+    {
+    printf( "usage: %s [--start|-s start] [--end|-e end]\n"
+           "\n"
+           "In plain English, this means that to time specification try\n"
+           "a single time specification (just like in the rrdtool create)\n"
+           "you can use the first form, while to try two of them at once\n"
+           "(just like in rrdtool graph or fetch) you need the seconf form\n",
+           av[0] );
+    exit(0);
+    }
+  
+  printf( "The time now is: %s\n", ctime(&Now) );
+  
+  while(1){
+       opt = getopt_long(ac, av, "s:e:", long_options, &option_index);
+    
+       if (opt == EOF)  
+           break;
+       
+       switch(opt)
+       {
+       case 's': 
+           strncpy( soption, optarg, BUF_LEN );
+           if ((parsetime_error = parsetime(optarg, &start_tv))) {
+               fprintf( stderr, "ERROR: start time: %s\n", parsetime_error );
+               exit(1);
+           }
+           
+           break;
+       case 'e': 
+           strncpy( eoption, optarg, BUF_LEN );
+           if ((parsetime_error = parsetime(optarg, &end_tv))) {
+               fprintf( stderr, "ERROR: end time: %s\n", parsetime_error );
+               exit(1);
+           }       
+           break;
+       }
+  }
+  
+  if (proc_start_end(&start_tv,&end_tv,&start_tmp,&end_tmp) == -1){
+      printf("ERROR: %s\n",rrd_get_error());
+      rrd_clear_error();
+      exit(1);
+  }
+  
+  strftime(tim_b,100,"%c %Z",localtime(&start_tmp));
+  if( *soption )
+      printf( "Start time was specified as: '%s',\n"
+             "for me this means: %s (or %ld sec since epoch)\n\n", 
+              soption, tim_b, start_tmp );
+    else
+      printf( "Start time was not specified, default value will be used (end-24h)\n"
+             "for me this means: %s (or %ld sec since epoch)\n\n",
+             tim_b, start_tmp );
+    
+  strftime(tim_b,100,"%c %Z",localtime(&end_tmp));
+  if( *eoption )
+      printf( "End time was specified as: '%s',\n"
+             "for me this means: %s (or %ld sec since epoch)\n", 
+              eoption, tim_b, end_tmp );
+  else
+      printf( "End time was not specified, default value will be used (now)\n"
+             "for me this means: %s (or %ld sec since epoch)\n\n",
+             tim_b, end_tmp );
+  exit(0);
+}
+
+