#!/usr/bin/perl
###########################################
# add -- Handle uptime check
# Mike Schilli, 2002 ([email protected])
###########################################
use warnings;
use strict;

use DBI;

my $USER     = "root";
my $PASSWORD = "";

die "usage: $0 system subsystem uptime" if
   @ARGV != 3;

my $dbh = DBI->connect("DBI:mysql:" .
   "database=serverdaten;host=localhost",
   $USER, $PASSWORD, {RaiseError => 1});

uptime_add( $dbh, @ARGV );

###########################################
sub uptime_add {
###########################################
   my($dbh, $system, $subsys,
      $uptime) = @_;

   my($sys_id) = sysname_to_id($dbh,
                      "systems", $system);
   my($sub_id) = sysname_to_id($dbh,
                   "subsystems", $subsys);

       # Last uptime for this system
   my($db_uptime) =
             $dbh->selectrow_array(<<EOT);
     SELECT uptime FROM uptime
     WHERE system = $sys_id AND
           subsys = $sub_id
EOT

   if(defined $db_uptime) {
       restart_add($dbh, $sys_id, $sub_id)
         if $db_uptime > $uptime;

       my $sql = <<EOT;
         UPDATE uptime
         SET uptime   = $uptime
         WHERE system = $sys_id AND
               subsys = $sub_id
EOT
       $dbh->do($sql);
   } else {
         # No uptime for this system yet?
       $dbh->do(<<EOT);
         INSERT INTO uptime (system,
           subsys, uptime)
         VALUES ($sys_id, $sub_id, $uptime)
EOT
   }
}

###########################################
sub sysname_to_id {
###########################################
   my($dbh, $table, $name) = @_;

   my $qname = $dbh->quote($name);

   my($id) = $dbh->selectrow_array(<<EOT);
     SELECT id FROM $table
     WHERE name = $qname
EOT

   unless(defined $id) {
       $dbh->do(<<EOT);
         INSERT IGNORE INTO $table (name)
         VALUES ($qname)
EOT
       $id = $dbh->selectrow_array(<<EOT);
         SELECT id FROM $table
         WHERE name = $qname
EOT
   }
   return($id);
}

###########################################
sub restart_add {
###########################################
   my($dbh, $sys_id, $sub_id) = @_;

   $dbh->do(<<EOT);
     INSERT INTO restarts (system,
       subsys)
     VALUES ($sys_id, $sub_id)
EOT
}