#!/usr/bin/perl # # SmoothWall CGIs # # This code is distributed under the terms of the GPL # # (c) The SmoothWall Team # # use strict; # enable only the following on debugging purpose use warnings; use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; require "${General::swroot}/graphs.pl"; #workaround to suppress a warning when a variable is used only once my @dummy = ( ${Header::colourred} ); undef (@dummy); my %netsettings=(); &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); my %color = (); my %mainsettings = (); &General::readhash("${General::swroot}/main/settings", \%mainsettings); &General::readhash("/srv/web/ipfire/html/themes/".$mainsettings{'THEME'}."/include/colors.txt", \%color); 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 = ( $Lang::tr{'dhcp server'} => 'dhcpd', $Lang::tr{'web server'} => 'httpd', $Lang::tr{'cron server'} => 'fcron', $Lang::tr{'dns proxy server'} => 'dnsmasq', $Lang::tr{'logging server'} => 'syslogd', $Lang::tr{'kernel logging server'} => 'klogd', $Lang::tr{'ntp server'} => 'ntpd', $Lang::tr{'secure shell server'} => 'sshd', $Lang::tr{'vpn'} => 'pluto', $Lang::tr{'web proxy'} => 'squid', 'OpenVPN' => 'openvpn' ); my $iface = ''; if (open(FILE, "${General::swroot}/red/iface")) { $iface = ; 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 '') { $servicenames{"$Lang::tr{'intrusion detection system'} (ORANGE)"} = "snort_$netsettings{'ORANGE_DEV'}"; } if ($netsettings{'BLUE_DEV'} ne '') { $servicenames{"$Lang::tr{'intrusion detection system'} (BLUE)"} = "snort_$netsettings{'BLUE_DEV'}"; } # Generate Graphs from rrd Data &Graphs::updatecpugraph ("day"); &Graphs::updateloadgraph ("day"); &Header::showhttpheaders(); &Header::getcgihash(\%cgiparams); &Header::openpage($Lang::tr{'status information'}, 1, ''); &Header::openbigbox('100%', 'left'); &Header::openbox('100%', 'center', "CPU $Lang::tr{'graph'}"); if (-e "$Header::graphdir/cpu-day.png") { my $ftime = localtime((stat("$Header::graphdir/cpu-day.png"))[9]); print "
$Lang::tr{'the statistics were last updated at'}: $ftime

\n"; print ""; print ""; print ""; } else { print $Lang::tr{'no information available'}; } print "
\n"; &Header::closebox(); &Header::openbox('100%', 'center', "Load $Lang::tr{'graph'}"); if (-e "$Header::graphdir/load-day.png") { my $ftime = localtime((stat("$Header::graphdir/load-day.png"))[9]); print "
$Lang::tr{'the statistics were last updated at'}: $ftime

\n"; print ""; print ""; print ""; } else { print $Lang::tr{'no information available'}; } print "
\n"; &Header::closebox(); &Header::openbox('100%', 'left', $Lang::tr{'services'}); print < END ; my $key = ''; foreach $key (sort keys %servicenames) { print "\n\n"; my $shortname = $servicenames{$key}; my $status = &isrunning($shortname); print "$status\n"; print "\n"; } print "
$key
\n"; &Header::closebox(); &Header::closebigbox(); &Header::closepage(); sub isrunning { my $cmd = $_[0]; my $status = "$Lang::tr{'stopped'}"; my $pid = ''; my $testcmd = ''; my $exename; $cmd =~ /(^[a-z]+)/; $exename = $1; if (open(FILE, "/var/run/${cmd}.pid")) { $pid = ; chomp $pid; close FILE; if (open(FILE, "/proc/${pid}/status")) { while () { if (/^Name:\W+(.*)/) { $testcmd = $1; } } close FILE; if ($testcmd =~ /$exename/) { $status = "$Lang::tr{'running'}"; } } } return $status; } sub percentbar { my $percent = $_[0]; my $fg = '#a0a0a0'; my $bg = '#e2e2e2'; if ($percent =~ m/^(\d+)%$/ ) { print < END ; if ($percent eq "100%") { print "" } elsif ($percent eq "0%") { print "" } else { print "" } print < END ; } }