]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - html/cgi-bin/services.cgi
Some more stderr fixes for the CGIs.
[people/pmueller/ipfire-2.x.git] / html / cgi-bin / services.cgi
index d585135397d63936cf631abb241d17bdbfe8eaeb..424ca868f15161e1694d55217032080ddbc99ace 100644 (file)
@@ -2,7 +2,7 @@
 ###############################################################################
 #                                                                             #
 # IPFire.org - A linux based firewall                                         #
-# Copyright (C) 2007  Michael Tremer & Christian Schmidt                      #
+# Copyright (C) 2005-2010  IPFire Team                                        #
 #                                                                             #
 # This program is free software: you can redistribute it and/or modify        #
 # it under the terms of the GNU General Public License as published by        #
@@ -28,24 +28,24 @@ use strict;
 require '/var/ipfire/general-functions.pl';
 require "${General::swroot}/lang.pl";
 require "${General::swroot}/header.pl";
-
-#workaround to suppress a warning when a variable is used only once
-my @dummy = ( ${Header::colourred} );
-undef (@dummy);
+require "${General::swroot}/graphs.pl";
 
 my %color = ();
 my %mainsettings = ();
+my %netsettings=();
 &General::readhash("${General::swroot}/main/settings", \%mainsettings);
 &General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color);
-
-my %netsettings=();
 &General::readhash("${General::swroot}/ethernet/settings", \%netsettings);
 
+#workaround to suppress a warning when a variable is used only once
+my @dummy = ( ${Header::colourred} );
+undef (@dummy);
+
+
 my %cgiparams=();
 # Maps a nice printable name to the changing part of the pid file, which
 # is also the name of the program
-my %servicenames =
-(
+my %servicenames =(
        $Lang::tr{'dhcp server'} => 'dhcpd',
        $Lang::tr{'web server'} => 'httpd',
        $Lang::tr{'cron server'} => 'fcron',
@@ -59,68 +59,98 @@ my %servicenames =
        'OpenVPN' => 'openvpn'
 );
 
+my %link =(
+       $Lang::tr{'dhcp server'} => "<a href=\'dhcp.cgi\'>$Lang::tr{'dhcp server'}</a>",
+       $Lang::tr{'web server'} => $Lang::tr{'web server'},
+       $Lang::tr{'cron server'} => $Lang::tr{'cron server'},
+       $Lang::tr{'dns proxy server'} => $Lang::tr{'dns proxy server'},
+       $Lang::tr{'logging server'} => $Lang::tr{'logging server'},
+       $Lang::tr{'kernel logging server'} => $Lang::tr{'kernel logging server'},
+       $Lang::tr{'ntp server'} => "<a href=\'time.cgi\'>$Lang::tr{'ntp server'}</a>",
+       $Lang::tr{'secure shell server'} => "<a href=\'remote.cgi\'>$Lang::tr{'secure shell server'}</a>",
+       $Lang::tr{'vpn'} => "<a href=\'vpnmain.cgi\'>$Lang::tr{'vpn'}</a>",
+       $Lang::tr{'web proxy'} => "<a href=\'proxy.cgi\'>$Lang::tr{'web proxy'}</a>",
+       'OpenVPN' => "<a href=\'ovpnmain.cgi\'>OpenVPN</a>",
+       "$Lang::tr{'intrusion detection system'} (GREEN)" => "<a href=\'ids.cgi\'>$Lang::tr{'intrusion detection system'} (GREEN)</a>",
+       "$Lang::tr{'intrusion detection system'} (RED)" => "<a href=\'ids.cgi\'>$Lang::tr{'intrusion detection system'} (RED)</a>",
+       "$Lang::tr{'intrusion detection system'} (ORANGE)" => "<a href=\'ids.cgi\'>$Lang::tr{'intrusion detection system'} (ORANGE)</a>",
+       "$Lang::tr{'intrusion detection system'} (BLUE)" => "<a href=\'ids.cgi\'>$Lang::tr{'intrusion detection system'} (BLUE)</a>"
+);
+
 my $lines=0; # Used to count the outputlines to make different bgcolor
 
 my $iface = '';
-if (open(FILE, "${General::swroot}/red/iface"))
-{
+if (open(FILE, "${General::swroot}/red/iface")){
        $iface = <FILE>;
        close FILE;
        chomp $iface;
 }
+
 $servicenames{"$Lang::tr{'intrusion detection system'} (RED)"}   = "snort_${iface}";
 $servicenames{"$Lang::tr{'intrusion detection system'} (GREEN)"} = "snort_$netsettings{'GREEN_DEV'}";
-if ($netsettings{'ORANGE_DEV'} ne '') {
+
+if ($netsettings{'ORANGE_DEV'} ne ''){
        $servicenames{"$Lang::tr{'intrusion detection system'} (ORANGE)"} = "snort_$netsettings{'ORANGE_DEV'}";
 }
-if ($netsettings{'BLUE_DEV'} ne '') {
+if ($netsettings{'BLUE_DEV'} ne ''){
        $servicenames{"$Lang::tr{'intrusion detection system'} (BLUE)"} = "snort_$netsettings{'BLUE_DEV'}";
 }
 
-&Header::showhttpheaders();
-&Header::getcgihash(\%cgiparams);
-&Header::openpage($Lang::tr{'status information'}, 1, '');
-&Header::openbigbox('100%', 'left');
-
-&Header::openbox('100%', 'left', $Lang::tr{'services'});
-
-print <<END
+my @querry = split(/\?/,$ENV{'QUERY_STRING'});
+$querry[0] = '' unless defined $querry[0];
+$querry[1] = 'hour' unless defined $querry[1];
+
+if ( $querry[0] =~ "processescpu"){
+       print "Content-type: image/png\n\n";
+       binmode(STDOUT);
+       &Graphs::updateprocessescpugraph($querry[1]);
+}elsif ( $querry[0] =~ "processesmemory"){
+       print "Content-type: image/png\n\n";
+       binmode(STDOUT);
+       &Graphs::updateprocessesmemorygraph($querry[1]);
+}else{
+       &Header::showhttpheaders();
+       &Header::openpage($Lang::tr{'status information'}, 1, '');
+       &Header::openbigbox('100%', 'left');
+
+       &Header::openbox('100%', 'left', $Lang::tr{'services'});
+       print <<END
 <div align='center'>
 <table width='80%' cellspacing='1' border='0'>
 <tr bgcolor='$color{'color20'}'><td align='left'><b>$Lang::tr{'services'}</b></td><td align='center' ><b>$Lang::tr{'status'}</b></td><td align='center'><b>PID</b></td><td align='center'><b>$Lang::tr{'memory'}</b></td></tr>
 END
 ;
+       my $key = '';
+       foreach $key (sort keys %servicenames){
+               $lines++;
+               if ($lines % 2){
+                       print "<tr bgcolor='$color{'color22'}'>\n<td align='left'>";
+                       print %link->{$key};
+                       print "</td>\n";
+               }else{
+                       print "<tr bgcolor='$color{'color20'}'>\n<td align='left'>";
+                       print %link->{$key};
+                       print "</td>\n";
+               }
 
-my $key = '';
-foreach $key (sort keys %servicenames)
-{
-       $lines++;
-       if ($lines % 2)
-       {  print "<tr bgcolor='$color{'color22'}'>\n<td align='left'>$key</td>\n";}
-       else
-       {  print "<tr bgcolor='$color{'color20'}'>\n<td align='left'>$key</td>\n";}
-
-       my $shortname = $servicenames{$key};
-       my $status = &isrunning($shortname);
-
-       print "$status\n";
-       print "</tr>\n";
-}
-
-
-print "</table></div>\n";
+               my $shortname = $servicenames{$key};
+               my $status = &isrunning($shortname);
 
-&Header::closebox();
+               print "$status\n";
+               print "</tr>\n";
+       }
 
-&Header::openbox('100%', 'left', "Addon - $Lang::tr{services}");
+       print "</table></div>\n";
+       &Header::closebox();
 
-my $paramstr=$ENV{QUERY_STRING};
-my @param=split(/!/, $paramstr);
-if ($param[1] ne '') {
-    my $temp = `/usr/local/bin/addonctrl @param[0] @param[1]`;
-}
+       &Header::openbox('100%', 'left', "Addon - $Lang::tr{services}");
+       my $paramstr=$ENV{QUERY_STRING};
+       my @param=split(/!/, $paramstr);
+       if ($param[1] ne ''){
+               system("/usr/local/bin/addonctrl @param[0] @param[1] > /dev/null 2>&1");
+       }
 
-print <<END
+       print <<END
 <div align='center'>
 <table width='80%' cellspacing='1' border='0'>
 <tr bgcolor='$color{'color20'}'>
@@ -134,75 +164,76 @@ print <<END
 END
 ;
 
-my $lines=0; # Used to count the outputlines to make different bgcolor
-
-# Generate list of installed addon pak's
-my @pak = `find /opt/pakfire/db/installed/meta-* | cut -d"-" -f2`;
-foreach (@pak)
-{
-       chomp($_);
-       
-       # Check which of the paks are services
-       my @svc = `find /etc/init.d/$_ | cut -d"/" -f4`;
-       foreach (@svc)
-       {
-           # blacklist some packages
-           #
-           # alsa has trouble with the volume saving and was not really stopped
-           #
-           chomp($_);
-           if ($_ ne "alsa")
-           {
-               $lines++;
-               if ($lines % 2) 
-               {
-                   print "<tr bgcolor='$color{'color22'}'>";
-               }
-               else
-               {
-                   print "<tr bgcolor='$color{'color20'}'>";
+       my $lines=0; # Used to count the outputlines to make different bgcolor
+
+       # Generate list of installed addon pak's
+       my @pak = `find /opt/pakfire/db/installed/meta-* 2>/dev/null | cut -d"-" -f2`;
+       foreach (@pak){
+               chomp($_);
+
+               # Check which of the paks are services
+               my @svc = `find /etc/init.d/$_ 2>/dev/null | cut -d"/" -f4`;
+               foreach (@svc){
+                       # blacklist some packages
+                       #
+                       # alsa has trouble with the volume saving and was not really stopped
+                       #
+                       chomp($_);
+                       if ($_ ne "alsa"){
+                               $lines++;
+                               if ($lines % 2){
+                                       print "<tr bgcolor='$color{'color22'}'>";
+                               }else{
+                                       print "<tr bgcolor='$color{'color20'}'>";
+                               }
+                               print "<td align='left'>$_</td> ";
+                               my $status = isautorun($_);
+                               print "$status ";
+                               print "<td align='center'><A HREF=services.cgi?$_!start><img alt='$Lang::tr{'start'}' title='$Lang::tr{'start'}' src='/images/go-up.png' border='0' /></A></td>";
+                               print "<td align='center'><A HREF=services.cgi?$_!stop><img alt='$Lang::tr{'stop'}' title='$Lang::tr{'stop'}' src='/images/go-down.png' border='0' /></A></td> ";
+                               my $status = &isrunningaddon($_);
+                               $status =~ s/\\e\[[0-1]\;[0-9]+m//g;
+
+                               chomp($status);
+                               print "$status";
+                               print "</tr>";
+                       }
                }
-               print "<td align='left'>$_</td> ";
-               my $status = isautorun($_);
-               print "$status ";
-               print "<td align='center'><A HREF=services.cgi?$_!start><img alt='$Lang::tr{'start'}' title='$Lang::tr{'start'}' src='/images/go-up.png' border='0' /></A></td>";
-               print "<td align='center'><A HREF=services.cgi?$_!stop><img alt='$Lang::tr{'stop'}' title='$Lang::tr{'stop'}' src='/images/go-down.png' border='0' /></A></td> ";
-               my $status = &isrunningaddon($_);
-               $status =~ s/\\e\[[0-1]\;[0-9]+m//g;
-               
-               chomp($status);
-               print "$status";
-               print "</tr>";
-           }
        }
-}
 
-print "</table></div>\n";
+       print "</table></div>\n";
+       &Header::closebox();
+
+       &Header::openbox('100%', 'center', "$Lang::tr{'processes'} $Lang::tr{'graph'}");
+       &Graphs::makegraphbox("services.cgi","processescpu","day");
+       &Header::closebox();
 
-&Header::closebox();
-&Header::closebigbox();
-&Header::closepage();
+       &Header::openbox('100%', 'center', "$Lang::tr{'processes'} $Lang::tr{'memory'} $Lang::tr{'graph'}");
+       &Graphs::makegraphbox("services.cgi","processesmemory","day");
+       &Header::closebox();
 
-sub isautorun
-{
+       &Header::closebigbox();
+       &Header::closepage();
+}
+
+sub isautorun{
        my $cmd = $_[0];
        my $status = "<td align='center'></td>";
-       my $init = `find /etc/rc.d/rc3.d/S??${cmd}`;
+       my $init = `find /etc/rc.d/rc3.d/S??${cmd} 2>/dev/null`;
        chomp ($init);
-       if ($init ne '') {
-       $status = "<td align='center'><A HREF=services.cgi?$_!disable><img alt='$Lang::tr{'deactivate'}' title='$Lang::tr{'deactivate'}' src='/images/on.gif' border='0' width='16' height='16' /></A></td>";
+       if ($init ne ''){
+               $status = "<td align='center'><A HREF=services.cgi?$_!disable><img alt='$Lang::tr{'deactivate'}' title='$Lang::tr{'deactivate'}' src='/images/on.gif' border='0' width='16' height='16' /></A></td>";
        }
-       $init = `find /etc/rc.d/rc3.d/off/S??${cmd}`;
+       $init = `find /etc/rc.d/rc3.d/off/S??${cmd} 2>/dev/null`;
        chomp ($init);
-       if ($init ne '') {
-  $status = "<td align='center'><A HREF=services.cgi?$_!enable><img alt='$Lang::tr{'activate'}' title='$Lang::tr{'activate'}' src='/images/off.gif' border='0' width='16' height='16' /></A></td>";
+       if ($init ne ''){
+               $status = "<td align='center'><A HREF=services.cgi?$_!enable><img alt='$Lang::tr{'activate'}' title='$Lang::tr{'activate'}' src='/images/off.gif' border='0' width='16' height='16' /></A></td>";
        }
-       
-return $status;
+
+       return $status;
 }
 
-sub isrunning
-{
+sub isrunning{
        my $cmd = $_[0];
        my $status = "<td align='center' bgcolor='${Header::colourred}'><font color='white'><b>$Lang::tr{'stopped'}</b></font></td><td colspan='2'></td>";
        my $pid = '';
@@ -218,7 +249,9 @@ sub isrunning
                close FILE;
                if (open(FILE, "/proc/${pid}/status")){
                        while (<FILE>){
-                               if (/^Name:\W+(.*)/) {$testcmd = $1; }
+                               if (/^Name:\W+(.*)/) {
+                                       $testcmd = $1;
+                               }
                        }
                        close FILE;
                }
@@ -227,41 +260,47 @@ sub isrunning
                                @memory = split(/ /,$temp);
                }
                close FILE;
-               if ($testcmd =~ /$exename/){$status = "<td align='center' bgcolor='${Header::colourgreen}'><font color='white'><b>$Lang::tr{'running'}</b></font></td><td align='center'>$pid</td><td align='center'>$memory[0] KB</td>";}
+               if ($testcmd =~ /$exename/){
+                       $status = "<td align='center' bgcolor='${Header::colourgreen}'><font color='white'><b>$Lang::tr{'running'}</b></font></td><td align='center'>$pid</td><td align='center'>$memory[0] KB</td>";
                }
-return $status;
+       }
+       return $status;
 }
 
-sub isrunningaddon
-{
+sub isrunningaddon{
        my $cmd = $_[0];
        my $status = "<td align='center' bgcolor='${Header::colourred}'><font color='white'><b>$Lang::tr{'stopped'}</b></font></td><td colspan='2'></td>";
        my $pid = '';
        my $testcmd = '';
        my $exename;
        my @memory;
-       
-       my $testcmd = `/usr/local/bin/addonctrl $_ status`;
+
+       my $testcmd = `/usr/local/bin/addonctrl $_ status 2>/dev/null`;
 
        if ( $testcmd =~ /is\ running/ && $testcmd !~ /is\ not\ running/){
-       $status = "<td align='center' bgcolor='${Header::colourgreen}'><font color='white'><b>$Lang::tr{'running'}</b></font></td>";
-       $testcmd =~ s/[a-z_]//gi;       $testcmd =~ s/\[[0-1]\;[0-9]+//gi;      $testcmd =~ s/[\(\)\.]//gi;     $testcmd =~ s/  //gi; $testcmd =~ s/\e//gi;
-
-       my @pid = split(/\s/,$testcmd);
-       $status .="<td align='center'>$pid[0]</td>";
-       
-       my $memory = 0;
-       
-       foreach (@pid){
-       chomp($_);
-       if (open(FILE, "/proc/$_/statm")){
+               $status = "<td align='center' bgcolor='${Header::colourgreen}'><font color='white'><b>$Lang::tr{'running'}</b></font></td>";
+               $testcmd =~ s/[a-z_]//gi;
+               $testcmd =~ s/\[[0-1]\;[0-9]+//gi;
+               $testcmd =~ s/[\(\)\.]//gi;
+               $testcmd =~ s/  //gi;
+               $testcmd =~ s/\e//gi;
+
+               my @pid = split(/\s/,$testcmd);
+               $status .="<td align='center'>$pid[0]</td>";
+
+               my $memory = 0;
+
+               foreach (@pid){
+                       chomp($_);
+                       if (open(FILE, "/proc/$_/statm")){
                                my $temp = <FILE>;
-                       @memory = split(/ /,$temp);
+                               @memory = split(/ /,$temp);
+                       }
+                       $memory+=$memory[0];
                }
-       $memory+=$memory[0];
-       }
-       $status .="<td align='center'>$memory KB</td>";
+               $status .="<td align='center'>$memory KB</td>";
+       }else{
+               $status = "<td align='center' bgcolor='${Header::colourred}'><font color='white'><b>$Lang::tr{'stopped'}</b></font></td><td colspan='2'></td>";
        }
-       else {$status = "<td align='center' bgcolor='${Header::colourred}'><font color='white'><b>$Lang::tr{'stopped'}</b></font></td><td colspan='2'></td>";}
-return $status;
+       return $status;
 }