#! /usr/bin/perl -w

# Ce script vérifie si des données sont insérées dans la base RTG pour
# chaque switch.
# Si des données sont présentes pour *une* interface, on fait
# l'hypothèse qu'elles sont présentes pour toutes les interfaces.

use strict;
use DBI;
use Date::Manip;
use Data::Dumper;

my $debug = 0;

my $dbhost;
if ( !$ARGV[0] ) { $dbhost = "acct.fr.clara.net" }
else { $dbhost = $ARGV[0] }
my $db       = "rtg";
my $dbuser   = "snmp";
my $password = "clar-2n";

# 6 minutes, alarme si aucun enregistrement pendant cette période.
my $max_interval = 6 * 60;

my $dbh =
  DBI->connect( "dbi:mysql:dbname=$db;host=$dbhost;password=$password",
    "$dbuser" )
  or die $DBI::errstr;

my $routers = $dbh->selectall_arrayref("SELECT rid, name FROM router");

if ( @{$routers} < 25 ) { exit_error("not enough routers in RTG DB.\n"); }

ROUTER:
for my $router ( @{$routers} ) {

    my $rid  = $router->[0];
    my $name = $router->[1];

    print "Router $rid, name $name.\n" if $debug;

    # Auparavant "AND UNIX_TIMESTAMP() - UNIX_TIMESTAMP(dtime) < $max_interval"
    # mais c'est trop lent
    my $rtg_stmt = "SELECT UNIX_TIMESTAMP(dtime) FROM ifInOctets_$rid " .
                      "ORDER BY dtime DESC LIMIT 1";

    print "$rtg_stmt\n" if $debug;
    my $dtime = $dbh->selectcol_arrayref($rtg_stmt);

    my $now = time;

    if ($dtime) {  # On a trouvé un enregistrement
            my $last_date = $dtime->[0];

            print "now $now (", scalar localtime $now, ")\n" if $debug;
            print "last insert date $last_date (", scalar localtime $last_date, ")\n" if $debug;

            if ( ( $now - $last_date ) < $max_interval ) {

                # On a trouvé un enregistrement assez récent, routeur suivant
                print "OK for $name\n\n" if $debug;
                next ROUTER;
            }
            else { 
                exit_error("data too old for $name in RTG DB.\n");
            }
    }

    else { # Pas d'enregistrement pour ce routeur
            exit_error("no data for $name in RTG DB.\n");
    }

}

# Si on arrive ici, c'est que tous les routeurs ont été vérifiés
print "OK.\n";
exit(0); # OK

sub exit_error {
    my $msg = shift;
    print "WARNING : $msg";
    exit(1); # WARNING
    # exit(2); # CRITICAL
}

