#!/usr/bin/perl

use vars qw/$home_dir/; 
 
BEGIN { 
  $home_dir = "/home/grapher2"; 
  $pass="1234";
  open(FL,"/etc/hgs2.conf");
  ($t1,$t2,undef)=split(/:/,<FL>);
  close(FL);
  if ( $t1 ne ""){ $home_dir=$t1;}
  if ( $t2 ne ""){ $pass=$t2;}
}; 
 

#=================================================
# DON'T EDIT BELOW 
#=================================================

use lib "$home_dir/etc";
use lib "$home_dir/lib/rrdtool/lib/perl";

use plugins;
use userdefine;
($pls)=init_plugins;
($pls)=init_user_plugins($pls);

my $start=time;
$|=1;
$auth=0;


while($inp=<stdin>){
  chomp($inp);
  ($cmd,@in)=split(/:\:/,$inp);
  (@in)=grep{ ! /^$/ } @in;
  if ( $cmd eq "AUTH" ) {
    ($host,$password,$os,$domain)=@in;
    ($info)=obtain_info($home_dir,$host);
    if ( $info->{"PASS"} ne "" ) { $pass=$info->{"PASS"};}
    if ( $pass eq $password ){
      $auth=1;
      open(FL2,">$home_dir/data/$host/alerter");close(FL2);
      print "OK\n";
    }else{
      $auth=0;
      print "FAILED !\n";
    }
  }elsif ( $auth ) { 
    if ( ( $cmd eq "REGISTER" ) or ( $cmd eq "UPGRADE") ){
      print "READY\n";
      &register;
    }elsif ( $cmd eq "END" ){
      print "END\n";
      exit 0;     
    }else {
     $cmd_o=$cmd;
     $cmd_o=~ s/[0123456789]//gi;
      if ( $pls->{$cmd_o}->{"LABLE"} ){
        update_rrd("$home_dir/data/$host/$cmd.rrd",@in);
        if ($pls->{"$cmd_o.$os"}->{"ALERT_LIMIT_WARN"} ne ""){ $pls->{$cmd_o}->{"ALERT_LIMIT_WARN"}=$pls->{"$cmd_o.$os"}->{"ALERT_LIMIT_WARN"};}
        if ($pls->{"$cmd_o.$os"}->{"ALERT_LIMIT_CRIT"} ne ""){ $pls->{$cmd_o}->{"ALERT_LIMIT_CRIT"}=$pls->{"$cmd_o.$os"}->{"ALERT_LIMIT_CRIT"};}
        if ($pls->{"$cmd_o.$os"}->{"V_LABLE"} ne ""){ $pls->{$cmd_o}->{"V_LABLE"}=$pls->{"$cmd_o.$os"}->{"V_LABLE"};}
        check_warn("$home_dir/data/$host/alerter",$cmd,$pls->{$cmd_o}->{"V_LABLE"},
                    $pls->{$cmd_o}->{"ALERT_LIMIT_WARN"},$pls->{$cmd_o}->{"ALERT_LIMIT_CRIT"},$info->{"$cmd"},@in);
        print "OK\n";
      }else{
        print "PLUGIN NOT DEFINED !\n";
      }      
    }
  }else{
    exit 0;
  }
}

sub register {
  if ( ! ( -d "$home_dir/data/$host" ) ){ mkdir "$home_dir/data/$host";}
  open(FL,">$home_dir/data/$host/info2");
  print FL "HOST=$host\nOS=$os\nPASS=$password\nDOMAIN=$domain\n";
  close(FL);
  while($inp=<stdin>){
    chomp($inp);
    my ($cmd2,@in)=split(/:\:/,$inp);
    $cmd2_o=$cmd2;
    $cmd2=~ s/[0123456789]//gi;
    if ($pls->{"$cmd2.$os"}->{"LABLE"} ne ""){ $pls->{$cmd2}->{"LABLE"}=$pls->{"$cmd2.$os"}->{"LABLE"};}
    if ($pls->{"$cmd2.$os"}->{"FIXED"} ne ""){ $pls->{$cmd2}->{"FIXED"}=$pls->{"$cmd2.$os"}->{"FIXED"};}
    if ($pls->{"$cmd2.$os"}->{"DATA"} ne ""){ $pls->{$cmd2}->{"DATA"}=$pls->{"$cmd2.$os"}->{"DATA"};}
    if ( $cmd2 eq "END" ){
      print "END\n";
      exit 0;     
    }else{
      if ( $pls->{$cmd2}->{"LABLE"} ){
        open(FL,">>$home_dir/data/$host/info2");
        $tmp = join(",",@in);
        print FL "$cmd2_o=$tmp\n";
        close(FL);
        if ( $pls->{$cmd2}->{"FIXED"} eq 0 ){
          (@in_old)=split(/\,/,$info->{"$cmd2_o"});
          $count_old=$#in_old;$count_old++;
          $count=$#in;$count++;
          if ( $count_old ne $count ){ $doit=1; }else{ $doit=0; }
        }else{
          $count=$pls->{$cmd2}->{"FIXED"};
          $doit=0;
        }
        if (( $cmd ne "UPGRADE" ) or (!( -f "$home_dir/data/$host/$cmd2_o.rrd" )) or ( $doit )){
          create_rrd("$home_dir/data/$host/$cmd2_o.rrd",$pls->{$cmd2}->{"DATA"},$count);
        }
        print "OK\n";
      }else{
        print "PLUGIN NOT DEFINED !\n";
      }      
    }
  }
}
