Code

addition of RRDs::times -- Christophe Kalt <kalt@taranis.org>
authoroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Thu, 15 Jan 2004 18:14:02 +0000 (18:14 +0000)
committeroetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa>
Thu, 15 Jan 2004 18:14:02 +0000 (18:14 +0000)
git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@230 a5681a0c-68f1-0310-ab6d-d61299d08faa

program/bindings/perl-shared/RRDs.pm
program/bindings/perl-shared/RRDs.xs

index fbe44784cded7ca0fc691ca4f77baac1e113d238..6ee4b3d36cb21e5712e6bcc8054724a14cbb1f6d 100644 (file)
@@ -29,6 +29,7 @@ RRDs - Access rrdtool as a shared module
   RRDs::graph ...
   RRDs::fetch ...
   RRDs::tune ...
+  RRDs::times(start, end)
 
 =head1 DESCRIPTION
 
@@ -51,6 +52,11 @@ Note that
 is also valid.
 
 
+The RRDs::times function takes two parameters:  a "start" and "end" time.
+These should be specified in the U<AT-STYLE TIME SPECIFICATION> format
+used by rrdtool.  See the U<rrdfetch> documentation for a detailed
+explanation on how to specify time.
+
 =head2 Error Handling
 
 The RRD functions will not abort your program even when they can not make
@@ -67,8 +73,8 @@ then the previous function has completed its task successfully.
 
 =head2 Return Values
 
-The functions RRDs::last, RRDs::graph, RRDs::info and RRDs::fetch return their
-findings.
+The functions RRDs::last, RRDs::graph, RRDs::info, RRDs::fetch and RRDs::times
+return their findings.
 
 B<RRDs::last> returns a single INTEGER representing the last update time.
 
@@ -114,6 +120,9 @@ integers, a pointer to an array and a pointer to a array of pointers.
     print "\n";
   }
 
+B<RRDs::times> returns two integers which are the number of seconds since
+epoch (1970-01-01) for the supplied "start" and "end" arguments, respectively.
+
 See the examples directory for more ways to use this extension.
 
 =head1 NOTE
index e2a0c8f8252d05d05028aad19754c878dfc58d13..da77457ffeaebeefc96c298ce4d787263e28796d 100644 (file)
@@ -272,6 +272,30 @@ rrd_fetch(...)
                PUSHs(sv_2mortal(newRV_noinc((SV*)names)));
                PUSHs(sv_2mortal(newRV_noinc((SV*)retar)));
 
+void
+rrd_times(start, end)
+         char *start
+         char *end
+       PREINIT:
+               struct  time_value start_tv, end_tv;
+               char    *parsetime_error = NULL;
+               time_t  start_tmp, end_tmp;
+       PPCODE:
+               rrd_clear_error();
+               if( (parsetime_error = parsetime( start, &start_tv))) {
+                       rrd_set_error( "start time: %s", parsetime_error);
+                       XSRETURN_UNDEF;
+               }
+               if( (parsetime_error = parsetime( end, &end_tv))) {
+                       rrd_set_error( "end time: %s", parsetime_error);
+                       XSRETURN_UNDEF;
+               }
+               if( proc_start_end( &start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
+                       XSRETURN_UNDEF;
+               }
+               EXTEND(sp,2);
+               PUSHs(sv_2mortal(newSVuv(start_tmp)));
+               PUSHs(sv_2mortal(newSVuv(end_tmp)));
 
 int
 rrd_xport(...)