#!/usr/bin/perl
#
# Copyright Martin Pot 2003
# http://martybugs.net/linux/hddtemp.cgi





use RRDs;

# define location of rrdtool binary
my $rrdtool = '/usr/bin/rrdtool';
# define location of rrdtool databases
my $rrd = '/var/lib/rrd';
# define location of images
my $img = '/www/stats/rrdtool';

# hosts

my @host = qw(
 xs2.xs4all.nl 
 ns.xitix.nl
 www.google.com 
 www.imomus.com
);


# justify

my $c=1;
my $host1=$host[0] . " ";
my $host2=$host[1] . "    ";
my $host3=$host[2];
my $host4=$host[3];

# ping hosts

foreach my $h(@host){
	my $p=`/bin/ping -c3 -w180 "$h" |grep icmp`;
	print $p;
	my ($time)= $p =~ m!(\d+\.*\d+)\s+ms$!;
	print "$c $h:\t$time \n";
	if ($time){
         print `$rrdtool update $rrd/ping.rrd  -t ping$c N:$time`;
	}
	sleep 1;
	$c++;
}





# daily ping graph
RRDs::graph "$img/ping-day.png",
        "--lazy",
        "-t", "Ping times",
        "-h", "80", "-w", "600",
        "-a", "PNG",
        "-v", "ms",
        "DEF:hda=$rrd/ping.rrd:ping1:AVERAGE",
        "DEF:hdb=$rrd/ping.rrd:ping2:AVERAGE",
        "DEF:hdc=$rrd/ping.rrd:ping3:AVERAGE",
                                                                                
                                                                                
        "AREA:hdc#00FF00:$host3",
        "GPRINT:hdc:MIN:  Min\\: %4.1lf",
        "GPRINT:hdc:MAX: Max\\: %4.1lf",
        "GPRINT:hdc:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdc:LAST: Current\\: %4.1lf ms.\\n",
        
        "AREA:hdb#FF0000:$host2",
        "GPRINT:hdb:MIN:  Min\\: %4.1lf",
        "GPRINT:hdb:MAX: Max\\: %4.1lf",
        "GPRINT:hdb:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdb:LAST: Current\\: %4.1lf ms.\\n",
                                                                                

        "AREA:hda#0000FF:$host1",
        "GPRINT:hda:MIN:  Min\\: %4.1lf",
        "GPRINT:hda:MAX: Max\\: %4.1lf",
        "GPRINT:hda:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hda:LAST: Current\\: %4.1lf ms.\\n",                                                                                 
                                                                                
;
if ($ERROR = RRDs::error) { print "$0: unable to generate graph: $ERROR\n"; }








# weekly ping graph
RRDs::graph "$img/ping-week.png",
        "-s", "-1week",  "--lazy",
        "-t", "Ping times",
        "-h", "80", "-w", "600",
        "-a", "PNG",
        "-v", "ms",
        "DEF:hda=$rrd/ping.rrd:ping1:AVERAGE",
        "DEF:hdb=$rrd/ping.rrd:ping2:AVERAGE",
        "DEF:hdc=$rrd/ping.rrd:ping3:AVERAGE",

        "AREA:hdc#00FF00:$host3",
        "GPRINT:hdc:MIN:  Min\\: %4.1lf",
        "GPRINT:hdc:MAX: Max\\: %4.1lf",
        "GPRINT:hdc:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdc:LAST: Current\\: %4.1lf ms.\\n",
        
        "AREA:hdb#FF0000:$host2",
        "GPRINT:hdb:MIN:  Min\\: %4.1lf",
        "GPRINT:hdb:MAX: Max\\: %4.1lf",
        "GPRINT:hdb:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdb:LAST: Current\\: %4.1lf ms.\\n",
                                                                                

        "AREA:hda#0000FF:$host1",
        "GPRINT:hda:MIN:  Min\\: %4.1lf",
        "GPRINT:hda:MAX: Max\\: %4.1lf",
        "GPRINT:hda:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hda:LAST: Current\\: %4.1lf ms.\\n",                                                                                 
                                                                                
;
if ($ERROR = RRDs::error) { print "$0: unable to generate graph: $ERROR\n"; }













































# monthly ping graph
RRDs::graph "$img/ping-month.png",
        "-s", "-1month",  "--lazy",
        "-t", "Ping times",
        "-h", "80", "-w", "600",
        "-a", "PNG",
        "-v", "ms",
        "DEF:hda=$rrd/ping.rrd:ping1:AVERAGE",
        "DEF:hdb=$rrd/ping.rrd:ping2:AVERAGE",
        "DEF:hdc=$rrd/ping.rrd:ping3:AVERAGE",

        "AREA:hdc#00FF00:$host3",
        "GPRINT:hdc:MIN:  Min\\: %4.1lf",
        "GPRINT:hdc:MAX: Max\\: %4.1lf",
        "GPRINT:hdc:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdc:LAST: Current\\: %4.1lf ms.\\n",
        
        "AREA:hdb#FF0000:$host2",
        "GPRINT:hdb:MIN:  Min\\: %4.1lf",
        "GPRINT:hdb:MAX: Max\\: %4.1lf",
        "GPRINT:hdb:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdb:LAST: Current\\: %4.1lf ms.\\n",
                                                                                

        "AREA:hda#0000FF:$host1",
        "GPRINT:hda:MIN:  Min\\: %4.1lf",
        "GPRINT:hda:MAX: Max\\: %4.1lf",
        "GPRINT:hda:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hda:LAST: Current\\: %4.1lf ms.\\n",                                                                                 
                                                                                
;
if ($ERROR = RRDs::error) { print "$0: unable to generate graph: $ERROR\n"; }




# monthly ping graph line
RRDs::graph "$img/ping-line-month.png",
        "-s", "-1month",  "--lazy",
        "-t", "Ping times",
        "-h", "80", "-w", "600",
        "-a", "PNG",
        "-v", "ms",
        "DEF:hda=$rrd/ping.rrd:ping1:AVERAGE",
        "DEF:hdb=$rrd/ping.rrd:ping2:AVERAGE",
        "DEF:hdc=$rrd/ping.rrd:ping3:AVERAGE",

        "LINE2:hdc#00FF00:$host3",
        "GPRINT:hdc:MIN:  Min\\: %4.1lf",
        "GPRINT:hdc:MAX: Max\\: %4.1lf",
        "GPRINT:hdc:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdc:LAST: Current\\: %4.1lf ms.\\n",
        
        "LINE2:hdb#FF0000:$host2",
        "GPRINT:hdb:MIN:  Min\\: %4.1lf",
        "GPRINT:hdb:MAX: Max\\: %4.1lf",
        "GPRINT:hdb:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdb:LAST: Current\\: %4.1lf ms.\\n",
                                                                                

        "LINE2:hda#0000FF:$host1",
        "GPRINT:hda:MIN:  Min\\: %4.1lf",
        "GPRINT:hda:MAX: Max\\: %4.1lf",
        "GPRINT:hda:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hda:LAST: Current\\: %4.1lf ms.\\n",                                                                                 
                                                                                
;
if ($ERROR = RRDs::error) { print "$0: unable to generate graph: $ERROR\n"; }





# monthly ping graph line
RRDs::graph "$img/ping-all-month.png",
        "-s", "-1month",  "--lazy",
        "-t", "Ping times",
        "-h", "80", "-w", "600",
        "-a", "PNG",
        "-v", "ms",
        "DEF:hda=$rrd/ping.rrd:ping1:AVERAGE",
        "DEF:hdb=$rrd/ping.rrd:ping2:AVERAGE",
        "DEF:hdc=$rrd/ping.rrd:ping3:AVERAGE",
        "DEF:hdd=$rrd/ping.rrd:ping4:AVERAGE",

        "LINE2:hdd#FFAA00:$host4",
        "GPRINT:hdd:MIN:  Min\\: %4.1lf",
        "GPRINT:hdd:MAX: Max\\: %4.1lf",
        "GPRINT:hdd:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdd:LAST: Current\\: %4.1lf ms.\\n",


        "LINE2:hdc#00FF00:$host3",
        "GPRINT:hdc:MIN:  Min\\: %4.1lf",
        "GPRINT:hdc:MAX: Max\\: %4.1lf",
        "GPRINT:hdc:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdc:LAST: Current\\: %4.1lf ms.\\n",
        
        "LINE2:hdb#FF0000:$host2",
        "GPRINT:hdb:MIN:  Min\\: %4.1lf",
        "GPRINT:hdb:MAX: Max\\: %4.1lf",
        "GPRINT:hdb:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdb:LAST: Current\\: %4.1lf ms.\\n",
                                                                    

        "LINE2:hda#0000FF:$host1",
        "GPRINT:hda:MIN:  Min\\: %4.1lf",
        "GPRINT:hda:MAX: Max\\: %4.1lf",
        "GPRINT:hda:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hda:LAST: Current\\: %4.1lf ms.\\n",                                                                                 
                                                                                
;
if ($ERROR = RRDs::error) { print "$0: unable to generate graph: $ERROR\n"; }


# yearly ping graph
RRDs::graph "$img/ping-year.png",
        "-s", "-1year",  "--lazy",
        "-t", "Ping times",
        "-h", "80", "-w", "600",
        "-a", "PNG",
        "-v", "ms",
        "DEF:hda=$rrd/ping.rrd:ping1:AVERAGE",
        "DEF:hdb=$rrd/ping.rrd:ping2:AVERAGE",
        "DEF:hdc=$rrd/ping.rrd:ping3:AVERAGE",

        "AREA:hdc#00FF00:$host3",
        "GPRINT:hdc:MIN:  Min\\: %4.1lf",
        "GPRINT:hdc:MAX: Max\\: %4.1lf",
        "GPRINT:hdc:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdc:LAST: Current\\: %4.1lf ms.\\n",
        
        "AREA:hdb#FF0000:$host2",
        "GPRINT:hdb:MIN:  Min\\: %4.1lf",
        "GPRINT:hdb:MAX: Max\\: %4.1lf",
        "GPRINT:hdb:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hdb:LAST: Current\\: %4.1lf ms.\\n",
                                                                                

        "AREA:hda#0000FF:$host1",
        "GPRINT:hda:MIN:  Min\\: %4.1lf",
        "GPRINT:hda:MAX: Max\\: %4.1lf",
        "GPRINT:hda:AVERAGE: Avg\\: %4.1lf",
        "GPRINT:hda:LAST: Current\\: %4.1lf ms.\\n",                                                                                 
                                                                                
;
if ($ERROR = RRDs::error) { print "$0: unable to generate graph: $ERROR\n"; }




