#!/usr/bin/perl -w my ($licensekey); $licensekey='gulfie'; # # # a rewrite of a little tool I once knew of. # # $comments = $comments = " Take a command or field, and give us LIFE! er' , find the numbers in it and subtract them from there previous values, maybe divide by time. "; # # because time should always be good. 128 bits would be better. # use Time::HiRes qw(time sleep); use Data::Dumper; my $cmd = 'ifconfig -a'; my $pollfile = undef; my $do_dt = 0; my $looptime = 5; my $sleeptime = $looptime; my $avg_loop_dt = $looptime; my $flatfileify = 0; my $version = " Mon Aug 14 01:58:55 PDT 2006 "; $name = $0; my $debug = 0; my $usagemsg; $usagemsg = <; close INFILE; }else{ print STDERR "Unable to opnen file ($pollfile) ($!) this may be an error, maybe not.\n"; } } }elsif(defined $cmd and $cmd){ $buf = `$cmd`; } $end = time(); if (defined $last_good_buffer_t and $last_good_buffer_t != $begin){ $dt = $end - $last_good_buffer_t; # only do DT on good buffers. }else{ $dt = $end - $begin; # though we may end up not using it. } $begin = $end; if ($dt and $do_dt ){ $td = 1 / $dt; } my $newbuf = $buf; my $cnt = 2; if (defined $buf and not $buf =~ /\A\s*\Z/ms){ $last_good_buffer_t = $end; #$newbuf =~ s/(^|(?<=(:|\s|\()))((-|\+)?(\d+(\.\d+)?))(?>(\s|\)|\.(\s)|\n|\Z))/ $newbuf =~ s/(^|(?<=(:|\s|\()))(($IP)|($MAC)|((-|\+)?((\d+(\.\d+)?))))/{ my $value = $3; if (isignore($value)){ # ignore it most definitely # print "what?! ($value)\n"; $value; # don't muck with it. }else{ # print "value a ($value)\n"; $cnt++; $debug and print "value ($value)\n"; if (defined $lastval{$cnt}){ my $tmp; $tmp = $value - $lastval{$cnt}; $lastval{$cnt} = $value; $value = $tmp; if ($do_dt){ if ($dt){ $value = $td * $value; }else{ $value = 'nan'; } } }else{ $lastval{$cnt} = $value; } $debug and print "resulting value ($value)\n"; $newvalue{$cnt} = $value; $value; } }/msge; if ($firsttime){ $firsttime =0; if ($flatfileify){ # print out the header my $header = "date " . `date`; $header .= "cmd ". join " " , @ARGV; $header .= "\n\nExample bufer ($buf)\n"; $header .= "\n\nledgend : note the values are not molested in the ledgend\n\n"; $header .= "1 : time at the end\n"; $header .= "2 : dt\n"; $header .= join "" , map { "$_ : $lastval{$_}\n"; } sort {$a<=>$b} keys %lastval; $header =~ s/^/# /msg; print "$header\n\n"; } }else{ if ($flatfileify){ print "$end , $dt , " , (join " , " , map { $newvalue{$_} } sort {$a <=> $b} keys %newvalue ) , "\n"; }else{ print $newbuf; } } } # we had a buffer so we did stuf with it. # end has our new timestamp. $loop_dt = $end - $last_time; $avg_loop_dt = $looptime; $avg_loop_dt = ($avg_loop_dt * 15 + $loop_dt)/16; $error = $looptime - $avg_loop_dt; $sleeptime = ($sleeptime * 15 + ( $looptime - $error ) ) / 16; $last_time = $end; if ($debug){ print "looptime ($looptime) loop_dt = ($loop_dt) error ($error) sleeptime ($sleeptime) avg_loop_dt ($avg_loop_dt)\n"; } if ($sleeptime >= 0 ){ sleep $sleeptime; } } } sub main{ # but quit nicely. # $SIG{HUP} = \&catch_hup; # $SIG{INT} = \&catch_hup; # $SIG{QUIT} = \&catch_hup; # $SIG{TERM} = \&catch_hup; # print "\n" x 80 ; args(@ARGV); # $now = time(); # print "BEGINNNING RUN! ($now)\n\n\n"; my ($bannerline); # $bannerline = "*" x 120 . "\n"; # print $bannerline x 30; main_loop(); } if (not defined $copyrightnotice){ $copyrightnotice = "Copyright Gulfie\@grotto-group.com all rights resurved, unpublished work, trade secret \n\n"; } # golem hates me. sub license { print " $copyrightnotice "; exit(1); } main();