On Mar 17, 2006, at 13:01 , Ann Gentile wrote:

> Hello,
>
> I would like to be able distinguish values that are invalid
> calling RRDs::fetch vs using rrdtool fetch. That is:
>
> at time 1142539176
>
> calling:
>       rrdtool fetch "<myrrdhere>" AVERAGE -r 1 -e now -s e-1min
>
> returns:
>
>       timestamp    sum
>       
>       1142539080:  2.3500000000e+01
>       1142539140:  nan
>       1142539200:  nan

This is two minutes.

The numerical results are: (NaN is 0 or infinity)
1142539080              23.5
1142539140      0.0
1142539200      0.0

>
>
> whereas using:

If you're on a POSIX system, Perl supports the "POSIX::strtod"  
function. Its semantics are somewhat cumbersome, so here's a "getnum"  
wrapper function for more convenient access. This function takes a  
string and returns the number it found, or "undef" for input that  
isn't a C float. The "is_numeric" function is a front end to "getnum"  
if you just want to say, ``Is this a float?''


     sub getnum {
         use POSIX qw(strtod);
         my $str = shift;
         $str =~ s/^\s+//;
         $str =~ s/\s+$//;
         $! = 0;
         my($num, $unparsed) = strtod($str);
         if (($str eq '') || ($unparsed != 0) || $!) {
             return undef;
         } else {
             return $num;
         }
     }

     sub is_numeric { defined getnum($_[0]) }



>       my ($start,$step,$names,$data) = RRDs::fetch ...
>        foreach my $line (@$data) {
>          print "  ", scalar localtime($start), " ($start) ";
>          $start += $step;
>          foreach my $val (@$line) {

                if (! is_numeric($val)) {
                        printf "$val"; # there's no number to return.
                } else {
                        printf "%12.1f ", $val; # there's a number to return
                }
>          }
>          print "\n";
>        }
>
> prints out:
>       1142539080         23.5
>         1142539140          0.0
>
>
> Two questions:
> 1) Since at time 1142539176 rrdtool fetch returns
>    nan for times 1142539140 & 1142539200, but later fills
>    them in I assume that they are just not calculated yet, as
>    opposed to nan results due to data points that will never
>    come in -- is there a way to determine that this is the case ?
> 2) Is there someother way I can use RRDs::fetch to get back
>    something other than 0.0 for the values that appear as nan
>    when I call rrdtool fetch, since 0.0 may be a valid return
>    value for my calculation?

It wasn't returning 0.0, you forced this with:  printf "%12.1f ", $val;

> Thank you,
> Ann
>
> --
> Unsubscribe mailto:[EMAIL PROTECTED] 
> subject=unsubscribe
> Help        mailto:[EMAIL PROTECTED]
> Archive     http://lists.ee.ethz.ch/rrd-users
> WebAdmin    http://lists.ee.ethz.ch/lsg2.cgi
>
>



--
Unsubscribe mailto:[EMAIL PROTECTED]
Help        mailto:[EMAIL PROTECTED]
Archive     http://lists.ee.ethz.ch/rrd-users
WebAdmin    http://lists.ee.ethz.ch/lsg2.cgi

Reply via email to