#!/usr/bin/perl
###########################################
# add -- Handle uptime check
# Mike Schilli, 2002 (m@perlmeister.com)
###########################################
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
}
