#!/usr/bin/perl

use CGI qw(-nosticky :cgi :form);

$prefix="@prefix@";
$exec_prefix="@exec_prefix@";
$syscall = "@bindir@/sinfo -qW";


# my local test configuration:
#$syscall = "$syscall -h localhost:61001 -h localhost";


# set default values
$top=3;
$show_sysinfo='';
$show_network='';
$show_diskload='';
$show_own='';
$user="";
if ( param() )
{
  # read cgi variables
  $top = param('top');
  $show_sysinfo = param('show_sysinfo');
  $show_network = param('show_network');
  $show_diskload = param('show_diskload');
  $show_own = param('show_own');
  $user = param('user');
}  

# apply configuration
$syscall = "$syscall -t $top";
if ( $show_sysinfo eq 'ON')
{
  $syscall = "$syscall -s";
}
if ( $show_network eq 'ON')
{
  $syscall = "$syscall -n";
}  
if ( $show_diskload eq 'ON')
{
  $syscall = "$syscall -D";
}
if ( $show_own eq 'ON')
{
  $syscall = "$syscall -o";
}

#  prevent that someone enters "; cat /etc/passwd"  as a user-name 
#    to start "cat /etc/passwd" or other bad things 
#    as cgi-user (normally "nobody")
#
# strategy:
#   lookup if parameter $user contains a valid user name with getpwnam.
($dummy)=getpwnam($user) or $user="";

if ( $user )
{
  $syscall = "$syscall -u $user";
}

# filter all ";"
$syscall =~s/;//g;



  
############################# start of HTML output #############################
print "Content-type: text/html\n\n";

print "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n\n";

print "<HTML>\n\n";

print "  <HEAD>\n",
      "    <META http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-1\">\n",
      "    <TITLE>sinfo @VERSION@ @ ",virtual_host(),"</TITLE>\n";

# define the colors of sinfo´s output.
#   change the definitions to fit the look & feel of your web site
print "    <STYLE type=\"text/css\">\n",
      "    <!--\n",
      "    .hostname     { background-color:#1818B4; color:#FFFFFF; font-weight:bold;}\n",
      "    .myhostname   { background-color:#18B2B4; color:#FFFFFF; font-weight:bold;}\n",
      "    .cpuuser      { background-color:#B41818; color:#FFFFFF; }\n",
      "    .cpusystem    { background-color:#B41818; color:#FFFFFF; }\n",
      "    .cpunice      { background-color:#B41818; color:#FFFFFF; }\n",
      "    .cpuiowait    { background-color:#B41818; color:#FFFFFF; }\n",
      "    .cpuirq       { background-color:#B41818; color:#FFFFFF; }\n",
      "    .cpuidle      { background-color:#18B218; color:#000000; }\n",
      "    .myprocess    { color:#FF55FF; background-color:#FFFFFF;}\n",
      "    .swapwarn     { color:#FF55FF; background-color:#FFFFFF;}\n",
      "    .fixmenu      { color:#000000; margin: 0; line-height: 1.1; text-align: left; position: absolute; position: fixed; width: 15em; top: 5em; right: 1em; left: auto; background: #cccccc; border: thin outset #000000;}\n",
      "    -->\n",
      "    </STYLE>\n";
print "  </HEAD>\n\n";


print "  <BODY bgcolor=\"#ffffff\">\n";

print "    <CENTER>\n";
print "      <TABLE summary=\"\" border=\"0\" cellspacing=\"2\" cellpadding=\"5\" width=\"700\">\n";


# print a headline
print "        <TR>\n",
      "          <TH align=\"center\" bgcolor=\"#cccccc\" height=\"35\">\n",
      "            sinfo @VERSION@ @ ",virtual_host(),"\n",
      "          </TH>\n",
      "        </TR>\n\n";

# print the  menu
print "        <TR>\n",
      "          <TD ALIGN=\"center\" VALIGN=\"top \" bgcolor=\"#eeeeee\">\n",
      "            <DIV class=\"fixmenu\">\n",
      "              ",start_form(-method=>'get', -action=>$ENV{'SCRIPT_NAME'}),
      "                <TABLE summary=\"\">\n",
      "                  <TR>\n",
      "                    <TH ALIGN=\"center\">\n",
      "                      settings",
      "                    </TH>\n",
      "                  </TR>\n",
      "                  <TR>\n",
      "                    <TD>\n",
      "                      show top", 
      "                      ",popup_menu( -name=>'top', -default=>$top, -values=>['0','1','2','3','4','5']),
      "                      processes\n",
      "                    </TD>\n",
      "                  </TR>\n",
      "                  <TR>\n",
      "                    <TD>\n",
      "                      ",checkbox(-name=>'show_sysinfo', -checked=>$show_sysinfo, -value=>'ON',-label=>'show system info',),
      "                     </TD>\n",
      "                   </TR>\n",
      "                  <TR>\n",
      "                    <TD>\n",
      "                      ",checkbox(-name=>'show_network', -checked=>$show_network,-value=>'ON', -label=>'show network info',),
      "                    </TD>\n",
      "                  </TR>\n",
      "                  <TR>\n",
      "                    <TD>\n",
      "                      ",checkbox(-name=>'show_diskload', -checked=>$show_diskload,-value=>'ON', -label=>'show disk load',),
      "                    </TD>\n",
      "                  </TR>\n",
      "                   <TR>\n",
      "                     <TD>\n",
      "                       ",checkbox(-name=>'show_own', -checked=>$show_own, -value=>'ON', -label=>'show only user',),
      "                       ",textfield(-name=>'user',-size=>8),
      "                     </TD>\n",
      "                   </TR>\n",
      "                   <TR>\n",
      "                    <TD ALIGN=\"right\">\n",
      "                      ",submit(-name=>'reload page'),
      "                    </TD>\n",
      "                  </TR>\n",
      "                </TABLE>\n",
      "              ",end_form(),      
      "            </DIV>\n",
      "          </TD>\n",
      "        </TR>\n\n";



# print the output of sinfo 
print "        <TR>\n",
      "          <TD ALIGN=\"left\" bgcolor=\"#eeeeee\">\n",
      "            <TABLE summary=\"\">\n",
      "              <TR>\n",
      "                <TD bgcolor=\"ffffff\">\n",
      "                  <FONT FACE=\"monospace\" size=\"-2\">\n",
      `$syscall`,
      "                  </FONT>\n",
      "                </TD>\n",
      "              </TR>\n",
      "            </TABLE>\n",
      "          </TD>\n",
      "        </TR>\n\n";

# add a link to sinfo´s homepage
print "        <TR>\n",
      "          <TD ALIGN=\"left\">\n",
      "            <FONT SIZE=\"-3\">\n",
      "              <I>\n",
      "                generated using \n",
      "                <A HREF=\"http://www.ant.uni-bremen.de/whomes/rinas/sinfo/\">sinfo</A> @VERSION@ \n",
      "                by \n",
      "                <A HREF=\"mailto:jrinas\@gmx.de\">J. Rinas</A>\n",
      "              </I>\n",
      "            </FONT>\n",
      "          </TD>\n",
      "        </TR>\n\n";

print "      </TABLE>\n";
print "    </CENTER>\n";
print "  </BODY>\n\n";

print "</HTML>\n";
