]> git.ipfire.org Git - ipfire-2.x.git/blame - html/cgi-bin/status.cgi
immernoch das alte Problem...
[ipfire-2.x.git] / html / cgi-bin / status.cgi
CommitLineData
cd1a2927
MT
1#!/usr/bin/perl\r
2#\r
3# SmoothWall CGIs\r
4#\r
5# This code is distributed under the terms of the GPL\r
6#\r
7# (c) The SmoothWall Team\r
8#\r
9# $Id: status.cgi,v 1.6.2.7 2005/02/24 07:44:35 gespinasse Exp $\r
10#\r
11\r
12use strict;\r
13\r
14# enable only the following on debugging purpose\r
15#use warnings;\r
16#use CGI::Carp 'fatalsToBrowser';\r
17\r
18require 'CONFIG_ROOT/general-functions.pl';\r
19require "${General::swroot}/lang.pl";\r
20require "${General::swroot}/header.pl";\r
21\r
22#workaround to suppress a warning when a variable is used only once\r
23my @dummy = ( ${Header::colourred} );\r
24undef (@dummy);\r
25\r
26my %netsettings=();\r
27&General::readhash("${General::swroot}/ethernet/settings", \%netsettings);\r
28\r
29my %cgiparams=();\r
30# Maps a nice printable name to the changing part of the pid file, which\r
31# is also the name of the program\r
32my %servicenames =\r
33(\r
34 $Lang::tr{'dhcp server'} => 'dhcpd',\r
35 $Lang::tr{'web server'} => 'httpd',\r
36 $Lang::tr{'cron server'} => 'fcron',\r
37 $Lang::tr{'dns proxy server'} => 'dnsmasq',\r
38 $Lang::tr{'logging server'} => 'syslogd',\r
39 $Lang::tr{'kernel logging server'} => 'klogd',\r
40 $Lang::tr{'ntp server'} => 'ntpd',\r
41 $Lang::tr{'secure shell server'} => 'sshd',\r
42 $Lang::tr{'vpn'} => 'pluto',\r
43 $Lang::tr{'web proxy'} => 'squid'\r
44);\r
45\r
46my $iface = '';\r
47if (open(FILE, "${General::swroot}/red/iface"))\r
48{\r
49 $iface = <FILE>;\r
50 close FILE;\r
51 chomp $iface;\r
52}\r
53$servicenames{"$Lang::tr{'intrusion detection system'} (RED)"} = "snort_${iface}";\r
54$servicenames{"$Lang::tr{'intrusion detection system'} (GREEN)"} = "snort_$netsettings{'GREEN_DEV'}";\r
55if ($netsettings{'ORANGE_DEV'} ne '') {\r
56 $servicenames{"$Lang::tr{'intrusion detection system'} (ORANGE)"} = "snort_$netsettings{'ORANGE_DEV'}";\r
57}\r
58if ($netsettings{'BLUE_DEV'} ne '') {\r
59 $servicenames{"$Lang::tr{'intrusion detection system'} (BLUE)"} = "snort_$netsettings{'BLUE_DEV'}";\r
60}\r
61\r
62&Header::showhttpheaders();\r
63\r
64&Header::getcgihash(\%cgiparams);\r
65\r
66&Header::openpage($Lang::tr{'status information'}, 1, '');\r
67\r
68&Header::openbigbox('100%', 'left');\r
69\r
70print <<END\r
71<table width='100%' cellspacing='0' cellpadding='5'border='0'>\r
72<tr><td style="background-color: #EAE9EE;" align='left'>\r
73 <a href='#services'>$Lang::tr{'services'}</a> |\r
74 <a href='#memory'>$Lang::tr{'memory'}</a> |\r
75 <a href='#disk'>$Lang::tr{'disk usage'}</a> |\r
76 <a href='#uptime'>$Lang::tr{'uptime and users'}</a> |\r
77 <a href='#modules'>$Lang::tr{'loaded modules'}</a> |\r
78 <a href='#kernel'>$Lang::tr{'kernel version'}</a>\r
79</td></tr></table>\r
80END\r
81;\r
82\r
83print "<a name='services'/>\n"; \r
84&Header::openbox('100%', 'left', $Lang::tr{'services'});\r
85\r
86print <<END\r
87<div align='center'>\r
88<table width='60%' cellspacing='0' border='0'>\r
89END\r
90;\r
91\r
92my $lines = 0;\r
93my $key = '';\r
94foreach $key (sort keys %servicenames)\r
95{\r
96 if ($lines % 2) {\r
97 print "<tr bgcolor='${Header::table1colour}'>\n"; }\r
98 else {\r
99 print "<tr bgcolor='${Header::table2colour}'>\n"; }\r
100 print "<td align='left'>$key</td>\n";\r
101 my $shortname = $servicenames{$key};\r
102 my $status = &isrunning($shortname);\r
103 print "$status\n";\r
104 print "</tr>\n";\r
105 $lines++;\r
106}\r
107\r
108\r
109print "</table></div>\n";\r
110\r
111&Header::closebox();\r
112\r
113print "<a name='memory'/>\n";\r
114&Header::openbox('100%', 'left', $Lang::tr{'memory'});\r
115print "<table><tr><td><table>";\r
116my $ram=0;\r
117my $size=0;\r
118my $used=0;\r
119my $free=0;\r
120my $percent=0;\r
121my $shared=0;\r
122my $buffers=0;\r
123my $cached=0;\r
124open(FREE,'/usr/bin/free |');\r
125while(<FREE>)\r
126{\r
127 if ($_ =~ m/^\s+total\s+used\s+free\s+shared\s+buffers\s+cached$/ )\r
128 {\r
129 print <<END\r
130<tr>\r
131<td>&nbsp;</td>\r
132<td align='center' class='boldbase'><b>$Lang::tr{'size'}</b></td>\r
133<td align='center' class='boldbase'><b>$Lang::tr{'used'}</b></td>\r
134<td align='center' class='boldbase'><b>$Lang::tr{'free'}</b></td>\r
135<td align='left' class='boldbase' colspan='2'><b>$Lang::tr{'percentage'}</b></td>\r
136</tr>\r
137END\r
138;\r
139 } else {\r
140 if ($_ =~ m/^Mem:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)$/) {\r
141 ($ram,$size,$used,$free,$shared,$buffers,$cached) = ($1,$1,$2,$3,$4,$5,$6);\r
142 ($percent = ($used/$size)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;\r
143 print <<END\r
144<tr>\r
145<td class='boldbase'><b>$Lang::tr{'ram'}</b></td>\r
146<td align='right'>$size</td>\r
147END\r
148;\r
149 } elsif ($_ =~ m/^Swap:\s+(\d+)\s+(\d+)\s+(\d+)$/) {\r
150 ($size,$used,$free) = ($1,$2,$3);\r
151 if ($size != 0)\r
152 {\r
153 ($percent = ($used/$size)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;\r
154 } else {\r
155 ($percent = '');\r
156 }\r
157 print <<END\r
158<tr>\r
159<td class='boldbase'><b>$Lang::tr{'swap'}</b></td>\r
160<td align='right'>$size</td>\r
161END\r
162;\r
163 } elsif ($ram and $_ =~ m/^-\/\+ buffers\/cache:\s+(\d+)\s+(\d+)$/ ) {\r
164 ($used,$free) = ($1,$2);\r
165 ($percent = ($used/$ram)*100) =~ s/^(\d+)(\.\d+)?$/$1%/;\r
166 print "<tr><td colspan='2' class='boldbase'><b>$Lang::tr{'excluding buffers and cache'}</b></td>"\r
167 }\r
168 print <<END\r
169<td align='right'>$used</td>\r
170<td align='right'>$free</td>\r
171<td>\r
172END\r
173;\r
174 &percentbar($percent);\r
175 print <<END\r
176</td>\r
177<td align='right'>$percent</td>\r
178</tr>\r
179END\r
180;\r
181 }\r
182}\r
183close FREE;\r
184print <<END\r
185</table></td><td>\r
186<table>\r
187<tr><td class='boldbase'><b>$Lang::tr{'shared'}</b></td><td align='right'>$shared</td></tr>\r
188<tr><td class='boldbase'><b>$Lang::tr{'buffers'}</b></td><td align='right'>$buffers</td></tr>\r
189<tr><td class='boldbase'><b>$Lang::tr{'cached'}</b></td><td align='right'>$cached</td></tr>\r
190</table>\r
191</td></tr></table>\r
192END\r
193;\r
194&Header::closebox();\r
195\r
196print "<a name='disk'/>\n";\r
197&Header::openbox('100%', 'left', $Lang::tr{'disk usage'});\r
198print "<table>\n";\r
199open(DF,'/bin/df -B M -x rootfs|');\r
200while(<DF>)\r
201{\r
202 if ($_ =~ m/^Filesystem/ )\r
203 {\r
204 print <<END\r
205<tr>\r
206<td align='left' class='boldbase'><b>$Lang::tr{'device'}</b></td>\r
207<td align='left' class='boldbase'><b>$Lang::tr{'mounted on'}</b></td>\r
208<td align='center' class='boldbase'><b>$Lang::tr{'size'}</b></td>\r
209<td align='center' class='boldbase'><b>$Lang::tr{'used'}</b></td>\r
210<td align='center' class='boldbase'><b>$Lang::tr{'free'}</b></td>\r
211<td align='left' class='boldbase' colspan='2'><b>$Lang::tr{'percentage'}</b></td>\r
212</tr>\r
213END\r
214;\r
215 }\r
216 else\r
217 {\r
218 my ($device,$size,$used,$free,$percent,$mount) = split;\r
219 print <<END\r
220<tr>\r
221<td>$device</td>\r
222<td>$mount</td>\r
223<td align='right'>$size</td>\r
224<td align='right'>$used</td>\r
225<td align='right'>$free</td>\r
226<td>\r
227END\r
228;\r
229 &percentbar($percent);\r
230 print <<END\r
231</td>\r
232<td align='right'>$percent</td>\r
233</tr>\r
234END\r
235;\r
236 }\r
237}\r
238close DF;\r
239print "</table>\n";\r
240&Header::closebox();\r
241\r
242print "<a name='uptime'/>\n";\r
243&Header::openbox('100%', 'left', $Lang::tr{'uptime and users'});\r
244my $output = `/usr/bin/w`;\r
245$output = &Header::cleanhtml($output,"y");\r
246print "<pre>$output</pre>\n";\r
247&Header::closebox();\r
248\r
249print "<a name='modules'/>\n";\r
250&Header::openbox('100%', 'left', $Lang::tr{'loaded modules'});\r
251$output = qx+/sbin/lsmod+;\r
252($output = &Header::cleanhtml($output,"y")) =~ s/\[.*\]//g;\r
253print "<pre>\n$output\n</pre>\n";\r
254&Header::closebox();\r
255\r
256print "<a name='kernel'/>\n";\r
257&Header::openbox('100%', 'left', $Lang::tr{'kernel version'});\r
258print "<pre>\n";\r
259print `/bin/uname -a`;\r
260print "</pre>\n";\r
261&Header::closebox();\r
262\r
263&Header::closebigbox();\r
264\r
265&Header::closepage();\r
266\r
267sub isrunning\r
268{\r
269 my $cmd = $_[0];\r
270 my $status = "<td bgcolor='${Header::colourred}'><font color='white'><b>$Lang::tr{'stopped'}</b></font></td>";\r
271 my $pid = '';\r
272 my $testcmd = '';\r
273 my $exename;\r
274\r
275 $cmd =~ /(^[a-z]+)/;\r
276 $exename = $1;\r
277\r
278 if (open(FILE, "/var/run/${cmd}.pid"))\r
279 {\r
280 $pid = <FILE>; chomp $pid;\r
281 close FILE;\r
282 if (open(FILE, "/proc/${pid}/status"))\r
283 {\r
284 while (<FILE>)\r
285 {\r
286 if (/^Name:\W+(.*)/) {\r
287 $testcmd = $1; }\r
288 }\r
289 close FILE;\r
290 if ($testcmd =~ /$exename/)\r
291 {\r
292 $status = "<td bgcolor='${Header::colourgreen}'><font color='white'><b>$Lang::tr{'running'}</b></font></td>";\r
293 }\r
294 }\r
295 }\r
296\r
297 return $status;\r
298}\r
299\r
300sub percentbar\r
301{\r
302 my $percent = $_[0];\r
303 my $fg = '#a0a0a0';\r
304 my $bg = '#e2e2e2';\r
305\r
306 if ($percent =~ m/^(\d+)%$/ )\r
307 {\r
308 print <<END\r
309<table width='100' border='1' cellspacing='0' cellpadding='0' style='border-width:1px;border-style:solid;border-color:$fg;width:100px;height:10px;'>\r
310<tr>\r
311END\r
312;\r
313 if ($percent eq "100%") {\r
314 print "<td width='100%' bgcolor='$fg' style='background-color:$fg;border-style:solid;border-width:1px;border-color:$bg'>"\r
315 } elsif ($percent eq "0%") {\r
316 print "<td width='100%' bgcolor='$bg' style='background-color:$bg;border-style:solid;border-width:1px;border-color:$bg'>"\r
317 } else {\r
318 print "<td width='$percent' bgcolor='$fg' style='background-color:$fg;border-style:solid;border-width:1px;border-color:$bg'></td><td width='" . (100-$1) . "%' bgcolor='$bg' style='background-color:$bg;border-style:solid;border-width:1px;border-color:$bg'>"\r
319 }\r
320 print <<END\r
321<img src='/images/null.gif' width='1' height='1' alt='' /></td></tr></table>\r
322END\r
323;\r
324 }\r
325}\r