#!/usr/bin/perl

use lib "..";
use SNMPstat;
use CGI;
#use Data::Dumper;
use strict;

my $cgi=new CGI;
print $cgi->header();
print "<HTML><BODY BGCOLOR=white>";

my $arrref;
my $hashref;

# 
# Output Load Averages
#
eval {
  $arrref = SNMPstat->getLoadStats();
};

if($@) { print "$@<BR>"; }
else {

#print Data::Dumper->Dump($arrref);

print<<"HTML";
<TABLE BORDER=1 WIDTH=50%>
<TR><TH COLSPAN=3>Load Averages</TH></TR>
<TR><TH>Duration</TH><TH>Average</TH><TH>Warning Limit</TH></TR>
HTML

print "<TR><TH>1 min</TH><TD>", $$arrref[1]->{"load.Load"}, "</TD>";
print "<TD>", $$arrref[1]->{"load.RedLimit"}, "</TD></TR>";

print "<TR><TH>5 min</TH><TD>", $$arrref[2]->{"load.Load"}, "</TD>";
print "<TD>", $$arrref[2]->{"load.RedLimit"}, "</TD></TR>";

print "<TR><TH>15 min</TH><TD>", $$arrref[3]->{"load.Load"}, "</TD>";
print "<TD>", $$arrref[3]->{"load.RedLimit"}, "</TD></TR>";
}

#
# Output Memory Info
#
eval {
  $hashref = SNMPstat->getMemStats();
};

if($@) { print "$@<BR>"; }
else {

print<<"HTML";
</TABLE><P><TABLE BORDER=1 WIDTH=50%>
<TR><TH COLSPAN=5>System Memory</TH></TR>
<TR><TH COLSPAN=2>Swap Space</TH><TH COLSPAN=2>RAM</TH><TH>Free</TH></TR>
<TH ALIGN=LEFT>Total</TH>
<TH ALIGN=LEFT>Avail</TH>
<TH ALIGN=LEFT>Total</TH>
<TH ALIGN=LEFT>Avail</TH>
<TH ALIGN=LEFT>Total</TH>
</TR>
HTML

print "<TD>", &KBformat($$hashref{"mem.TotalSwap"}), "</TD>";
print "<TD>", &KBformat($$hashref{"mem.AvailSwap"}), "</TD>";
print "<TD>", &KBformat($$hashref{"mem.TotalReal"}), "</TD>";
print "<TD>", &KBformat($$hashref{"mem.AvailReal"}), "</TD>";
print "<TD>", &KBformat($$hashref{"mem.TotalFree"}), "</TD>";

print "</TR></TABLE>";
}

#
# Output Process Info
#
eval {
  $arrref = SNMPstat->getProcStats();
};

if($@) { print "$@<BR>"; }
else {

print<<"HTML";
<P><TABLE BORDER=1 WIDTH=50%>
<TR><TH COLSPAN=4>Watched Processes</TH></TR>
<TR><TH>Name</TH><TH>Count</TH><TH>Min</TH><TH>Max</TH></TR>
HTML

foreach my $i (1 .. scalar(@{$arrref})-1) {
  print "<TR><TD>", $$arrref[$i]->{"proc.Name"}, "</TD>";
  print "<TD>", $$arrref[$i]->{"proc.Count"}, "</TD>";
  print "<TD>", $$arrref[$i]->{"proc.MinCount"}, "</TD>";
  print "<TD>", $$arrref[$i]->{"proc.MaxCount"} , "</TD></TR>";
}

print "</TABLE><P>";
}

#
# Output Disk Info
#
eval {
  $arrref = SNMPstat->getDiskStats();
};

if($@) { print "$@<BR>"; }
else {

print<<"HTML";
<TABLE BORDER=1 WIDTH=50%>
<TR><TH COLSPAN=4>Disk Usage</TH></TR>
<TR><TH>Device</TH><TH>Free Space</TH><TH>Used Space</TH><TH>Total Space</TH></TR>
HTML

foreach my $i (1 .. scalar(@{$arrref})-1) {
  print "<TR><TD>", $$arrref[$i]->{"disk.Path"};
  print " (", $$arrref[$i]->{"disk.Device"},  ")</TD>";

  print "<TD>", MBformat($$arrref[$i]->{"disk.Avail"});
  print " (", 100 - $$arrref[$i]->{"disk.UsedPct"},  "%)</TD>";

  print "<TD>", MBformat($$arrref[$i]->{"disk.Used"});
  print " (", $$arrref[$i]->{"disk.UsedPct"},  "%)</TD>";
 
  print "<TD>", &MBformat($$arrref[$i]->{"disk.Total"}) , "</TD></TR>";
}

print "</TABLE><P>";
}

#
# Output System Info
#
eval {
  $hashref = SNMPstat->getSysInfo();
};

if($@) { print "$@<BR>"; }
else {
 
print "<DL><DT>System name</DT><DD>", $$hashref{"sysName"}, "</DD>";
print "<DT>Description</DT><DD>", $$hashref{"sysDescription"}, "</DD>";
print "<DT>Location</DT><DD>", $$hashref{"sysLocation"}, "</DD>";
print "<DT>Contact</DT><DD>", $$hashref{"sysContact"}, "</DD>";
print "<DT>Uptime</DT><DD>", &TTformat($$hashref{"sysUpTime"}), "</DD></DL>";

}

print "</BODY></HTML>";

# Format TimeTicks
sub TTformat {
  my $ticks = shift;
  return sprintf "%0.2f days", $ticks/8640000;
}  

# Format to KBytes
sub KBformat {
  my $bytes = shift;
  return sprintf "%d K", int($bytes/1024);
}

# Format to MBytes
sub MBformat {
  my $kbytes = shift;
  return sprintf "%d M", int($kbytes/1024);
}

# Format LoadAvg
sub LAformat {
  my $avg = shift;
  return sprintf "%0.2f %%", $avg*100;
}