]> git.ipfire.org Git - ipfire-2.x.git/blob - html/cgi-bin/trafficadm.cgi
Net-Traffic aktualisiert
[ipfire-2.x.git] / html / cgi-bin / trafficadm.cgi
1 #!/usr/bin/perl
2 #
3 # This code is distributed under the terms of the GPL
4 #
5 # Copyright (c) 2005 Achim Weber
6 #
7 # $Id: trafficadm.cgi,v 1.21 2006/12/31 14:33:18 dotzball Exp $
8 #
9
10 use strict;
11
12 # enable only the following on debugging purpose
13 use warnings;
14 use CGI::Carp 'fatalsToBrowser';
15
16 require '/var/ipfire/general-functions.pl';
17 require "${General::swroot}/lang.pl";
18 require "${General::swroot}/header.pl";
19 require "${General::swroot}/net-traffic/net-traffic-admin.pl";
20
21 my %cgiparams;
22 my $errormessage = '';
23 my $infomessage = '';
24 my $saveerror = 0;
25 my @days = ( 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 );
26 my @warnLevels = ( 50,60,70,80,90,100 );
27
28 my @dummy = ($NETTRAFF::settingsfile, ${Header::colourred});
29 undef(@dummy);
30
31 &Header::showhttpheaders();
32
33 # Init parameters
34 $cgiparams{'MONTHLY_VOLUME_ON'} = 'off';
35 $cgiparams{'MONTHLY_VOLUME'} = '';
36 $cgiparams{'STARTDAY'} = '1';
37 $cgiparams{'WARN_ON'} = 'off';
38 $cgiparams{'WARN'} = '80';
39 $cgiparams{'CALC_INTERVAL'} = '60';
40 $cgiparams{'SHOW_AT_HOME'} = 'off';
41 $cgiparams{'SEND_EMAIL_ON'} = 'off';
42 $cgiparams{'EMAIL_TO'} = '';
43 $cgiparams{'EMAIL_FROM'} = '';
44 $cgiparams{'EMAIL_USR'} = '';
45 $cgiparams{'EMAIL_PW'} = '';
46 $cgiparams{'EMAIL_SERVER'} = '';
47 $cgiparams{'VERSION_CHECK_ON'} = 'off';
48
49
50 &Header::getcgihash(\%cgiparams);
51
52 if ($cgiparams{'ACTION'} eq $Lang::tr{'save'})
53 {
54 &validSave();
55
56 if ($errormessage) {
57 $saveerror = 1;
58 }
59 else { # no error, all right, save new settings
60 &General::writehash($NETTRAFF::settingsfile, \%cgiparams);
61 # calculate traffic
62 `/usr/local/bin/monitorTraff --force < /dev/null > /dev/null 2>&1 &`;
63 }
64 } # end if ($cgiparams{'ACTION'} eq $Lang::tr{'save'})
65
66
67 # if user want to save settings and get a errormessage, we donĀ“t
68 # overwrite users input
69 unless ($saveerror) {
70
71 &NETTRAFF::readSettings();
72
73 $cgiparams{'MONTHLY_VOLUME_ON'} = $NETTRAFF::settings{'MONTHLY_VOLUME_ON'};
74 $cgiparams{'MONTHLY_VOLUME'} = $NETTRAFF::settings{'MONTHLY_VOLUME'};
75 $cgiparams{'STARTDAY'} = $NETTRAFF::settings{'STARTDAY'};
76 $cgiparams{'WARN_ON'} = $NETTRAFF::settings{'WARN_ON'};
77 $cgiparams{'WARN'} = $NETTRAFF::settings{'WARN'};
78 $cgiparams{'CALC_INTERVAL'} = $NETTRAFF::settings{'CALC_INTERVAL'};
79 $cgiparams{'SHOW_AT_HOME'} = $NETTRAFF::settings{'SHOW_AT_HOME'};
80 $cgiparams{'SEND_EMAIL_ON'} = $NETTRAFF::settings{'SEND_EMAIL_ON'};
81 $cgiparams{'EMAIL_TO'} = $NETTRAFF::settings{'EMAIL_TO'};
82 $cgiparams{'EMAIL_FROM'} = $NETTRAFF::settings{'EMAIL_FROM'};
83 $cgiparams{'EMAIL_USR'} = $NETTRAFF::settings{'EMAIL_USR'};
84 $cgiparams{'EMAIL_PW'} = $NETTRAFF::settings{'EMAIL_PW'};
85 $cgiparams{'EMAIL_SERVER'} = $NETTRAFF::settings{'EMAIL_SERVER'};
86 $cgiparams{'VERSION_CHECK_ON'} = $NETTRAFF::settings{'VERSION_CHECK_ON'};
87
88 } # end unless ($saveerror)
89
90
91 if ($cgiparams{'ACTION'} eq $Lang::tr{'send test mail'})
92 {
93 # send test email
94 my $return = `/usr/local/bin/monitorTraff --testEmail`;
95
96 if($return =~ /Email was sent successfully!/)
97 {
98 $infomessage = "$Lang::tr{'test email was sent'}<br/>";
99 }
100 else
101 {
102 $errormessage = "$Lang::tr{'test email could not be sent'}:<br/>";
103 $errormessage .= "$return <br />";
104 }
105
106
107 } # end if ($cgiparams{'ACTION'} eq $Lang::tr{'send test mail'})
108
109
110
111 my %selected;
112 $selected{'CALC_INTERVAL'}{'5'} = '';
113 $selected{'CALC_INTERVAL'}{'10'} = '';
114 $selected{'CALC_INTERVAL'}{'15'} = '';
115 $selected{'CALC_INTERVAL'}{'30'} = '';
116 $selected{'CALC_INTERVAL'}{'60'} = '';
117 $selected{'CALC_INTERVAL'}{$cgiparams{'CALC_INTERVAL'}} = "selected='selected'";
118
119 my %checked;
120 $checked{'MONTHLY_VOLUME_ON'}{'off'} = '';
121 $checked{'MONTHLY_VOLUME_ON'}{'on'} = '';
122 $checked{'MONTHLY_VOLUME_ON'}{$cgiparams{'MONTHLY_VOLUME_ON'}} = "checked='checked'";
123
124 $checked{'WARN_ON'}{'off'} = '';
125 $checked{'WARN_ON'}{'on'} = '';
126 $checked{'WARN_ON'}{$cgiparams{'WARN_ON'}} = "checked='checked'";
127
128 $checked{'SHOW_AT_HOME'}{'off'} = '';
129 $checked{'SHOW_AT_HOME'}{'on'} = '';
130 $checked{'SHOW_AT_HOME'}{$cgiparams{'SHOW_AT_HOME'}} = "checked='checked'" ;
131
132 $checked{'SEND_EMAIL_ON'}{'off'} = '';
133 $checked{'SEND_EMAIL_ON'}{'on'} = '';
134 $checked{'SEND_EMAIL_ON'}{$cgiparams{'SEND_EMAIL_ON'}} = "checked='checked'" ;
135
136 $checked{'VERSION_CHECK_ON'}{'off'} = '';
137 $checked{'VERSION_CHECK_ON'}{'on'} = '';
138 $checked{'VERSION_CHECK_ON'}{$cgiparams{'VERSION_CHECK_ON'}} = "checked='checked'" ;
139
140
141 my $btnTestmailDisabled = "";
142 $btnTestmailDisabled = "disabled='disabled'" if($cgiparams{'SEND_EMAIL_ON'} ne 'on');
143
144 &Header::openpage($Lang::tr{'traffic monitor'}, 1, '');
145 &Header::openbigbox('100%', 'left');
146
147 if ($errormessage) {
148 &Header::openbox('100%', 'left', $Lang::tr{'error messages'});
149 print "<class name='base'><font color='${Header::colourred}'>$errormessage\n</font>";
150 print "&nbsp;</class>\n";
151 &Header::closebox();
152 }
153
154 if($infomessage) {
155 &Header::openbox('100%', 'left', "$Lang::tr{'traffic info messages'}:");
156 print "<class name='base'>$infomessage\n";
157 print "&nbsp;</class>\n";
158 &Header::closebox();
159 }
160
161 &Header::openbox('100%', 'left', "$Lang::tr{'net-traffic configuration'}:");
162
163 print <<END;
164 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
165 <table width='100%'>
166 <tr>
167 <td align='left' class='base' width='1%'>
168 <input type="checkbox" name="SHOW_AT_HOME" $checked{'SHOW_AT_HOME'}{'on'} />&nbsp;
169 </td>
170 <td align='left' class='base' nowrap='nowrap' colspan="3">
171 $Lang::tr{'display traffic at home'}
172 </td>
173 </tr>
174 <tr>
175 <td align='left' class='base'>
176 <input type="checkbox" name="MONTHLY_VOLUME_ON" $checked{'MONTHLY_VOLUME_ON'}{'on'} />&nbsp;
177 </td>
178 <td align='left' class='base' nowrap='nowrap' colspan="2">
179 $Lang::tr{'monthly volume'} (MByte): &nbsp;
180 </td>
181 <td align='left' class='base' >
182 <input type='text' name='MONTHLY_VOLUME' value='$cgiparams{'MONTHLY_VOLUME'}' size='20' maxlength='17' />
183 </td>
184 </tr>
185 <tr>
186 <td align='left' class='base' colspan="2"></td>
187 <td align='left' class='base' nowrap='nowrap' >
188 $Lang::tr{'monthly volume start day'}: &nbsp;
189 </td>
190 <td align='left' class='base' >
191 <select name='STARTDAY'>
192 END
193
194 foreach my $day (@days)
195 {
196 print " <option ";
197 if ($day == $cgiparams{'STARTDAY'}) {
198 print 'selected=\'selected\' '; }
199 print "value='$day'>$day</option>\n";
200 }
201 print <<END;
202 </select>
203 </td>
204 </tr>
205 <tr>
206 <td align='left' class='base' width='1%'></td>
207 <td align='left' class='base' width='1%'>
208 <input type="checkbox" name="WARN_ON" $checked{'WARN_ON'}{'on'} />&nbsp;
209 </td>
210 <td align='left' class='base' width='20%' nowrap='nowrap'>
211 $Lang::tr{'warn when traffic reaches'}: &nbsp;
212 </td>
213 <td align='left' class='base' width='78%'>
214 <select name='WARN'>
215 END
216
217 foreach my $level (@warnLevels)
218 {
219 print " <option ";
220 if ($level == $cgiparams{'WARN'}) {
221 print 'selected=\'selected\' '; }
222 print "value='$level'>$level</option>\n";
223 }
224 print <<END;
225 </select>
226 </td>
227 </tr>
228 <tr>
229 <td align='left' class='base' colspan="2"></td>
230 <td align='left' class='base' nowrap='nowrap' >
231 $Lang::tr{'calc traffic all x minutes'}: &nbsp;
232 </td>
233 <td align='left' class='base' >
234 <select name='CALC_INTERVAL'>
235 <option value='5' $selected{'CALC_INTERVAL'}{'5'} > 5</option>
236 <option value='10' $selected{'CALC_INTERVAL'}{'10'}>10</option>
237 <option value='15' $selected{'CALC_INTERVAL'}{'15'}>15</option>
238 <option value='30' $selected{'CALC_INTERVAL'}{'30'}>30</option>
239 <option value='60' $selected{'CALC_INTERVAL'}{'60'}>60</option>
240 </select>
241 </td>
242 </tr>
243 <tr>
244 <td align='left' class='base'> </td>
245 <td align='left' class='base'>
246 <input type="checkbox" name="SEND_EMAIL_ON" $checked{'SEND_EMAIL_ON'}{'on'} />&nbsp;
247 </td>
248 <td align='left' class='base' colspan="2" nowrap='nowrap' >
249 $Lang::tr{'send email notification'}:
250 </td>
251 </tr>
252 <tr>
253 <td align='left' class='base' colspan="2"> </td>
254 <td align='left' class='base' nowrap='nowrap'>
255 $Lang::tr{'to email adr'}: &nbsp;
256 </td>
257 <td align='left' class='base' >
258 <input type='text' name='EMAIL_TO' value='$cgiparams{'EMAIL_TO'}' size='25' />&nbsp;
259 </td>
260 </tr>
261 <tr>
262 <td align='left' class='base' colspan="2"> </td>
263 <td align='left' class='base' nowrap='nowrap'>
264 $Lang::tr{'from email adr'}: &nbsp;
265 </td>
266 <td align='left' class='base' >
267 <input type='text' name='EMAIL_FROM' value='$cgiparams{'EMAIL_FROM'}' size='25' />&nbsp;
268 </td>
269 </tr>
270 <tr>
271 <td align='left' class='base' colspan="2"> </td>
272 <td align='left' class='base' nowrap='nowrap'>
273 $Lang::tr{'from email user'}: &nbsp;
274 </td>
275 <td align='left' class='base' >
276 <input type='text' name='EMAIL_USR' value='$cgiparams{'EMAIL_USR'}' size='25' />
277 &nbsp; <img src='/blob.gif' alt='*' />
278 </td>
279 </tr>
280 <tr>
281 <td align='left' class='base' colspan="2"> </td>
282 <td align='left' class='base' nowrap='nowrap'>
283 $Lang::tr{'from email pw'}: &nbsp;
284 </td>
285 <td align='left' class='base' >
286 <input type='password' name='EMAIL_PW' value='$cgiparams{'EMAIL_PW'}' size='25' />
287 &nbsp; <img src='/blob.gif' alt='*' />
288 </td>
289 </tr>
290 <tr>
291 <td align='left' class='base' colspan="2"> </td>
292 <td align='left' class='base' nowrap='nowrap'>
293 $Lang::tr{'from email server'}: &nbsp;
294 </td>
295 <td align='left' class='base' >
296 <input type='text' name='EMAIL_SERVER' value='$cgiparams{'EMAIL_SERVER'}' size='25' />&nbsp;
297 </td>
298 </tr>
299 <tr>
300 <td align='left' class='base' colspan="2"> </td>
301 <td align='left' class='base' colspan="2">
302 <input type='submit' name='ACTION' value='$Lang::tr{'send test mail'}' $btnTestmailDisabled />
303 </td>
304 </tr>
305 </table>
306 <hr />
307 <table width='100%'>
308 <tr>
309 <td align='left' class='base' nowrap='nowrap' width='2%'>
310 <img src='/blob.gif' alt ='*' align='top' /> &nbsp;
311 <font class='base'>$Lang::tr{'this field may be blank'}</font> &nbsp;
312 </td>
313 <td align='center' class='base' width='48%'>
314 &nbsp; <input type='submit' name='ACTION' value='$Lang::tr{'save'}' /> &nbsp;
315 END
316
317 # if user input cause an error
318 # and user want a reset, we re-read settings from settingsfile
319 if ($errormessage ne '') {
320 print "<input type='submit' name='ACTION' value='$Lang::tr{'reset'}' />";
321 }
322 else {
323 print "<input type='reset' name='ACTION' value='$Lang::tr{'reset'}' />";
324 }
325
326 print <<END;
327 </td>
328 <td align='left' class='base' nowrap='nowrap' width='50%'> </td>
329 </tr>
330 </table>
331 </form>
332 <hr />
333 <table width='100%'>
334 <tr>
335 <td align='left' class='base' width='2%'>
336 &nbsp;
337 </td>
338 <td align='left' class='base' width='98%'>
339 <form method='post' action='/cgi-bin/traffic.cgi'>
340 <input type='submit' name='ACTION' value='$Lang::tr{'traffic back'}' />
341 </form>
342 </td>
343 </tr>
344 </table>
345 END
346
347 &Header::closebox();
348 &Header::closebigbox();
349 &Header::closepage();
350
351
352 sub validSave
353 {
354 if ($cgiparams{'SHOW_AT_HOME'} ne 'on' ) {
355 $cgiparams{'SHOW_AT_HOME'} = 'off';
356 }
357
358 if ($cgiparams{'MONTHLY_VOLUME_ON'} ne 'on' ) {
359 $cgiparams{'MONTHLY_VOLUME_ON'} = 'off';
360 }
361
362 if($cgiparams{'MONTHLY_VOLUME_ON'} eq 'on')
363 {
364 if($cgiparams{'MONTHLY_VOLUME'} !~ /^\d+$/ || $cgiparams{'MONTHLY_VOLUME'} < 1) {
365 $errormessage .= "$Lang::tr{'monthly traffic bad'}<br/>";
366 }
367
368 if($cgiparams{'STARTDAY'} < 1 || 31 < $cgiparams{'STARTDAY'}) {
369 $errormessage .= "$Lang::tr{'monthly start day bad'}<br/>";
370 }
371
372 if ($cgiparams{'WARN_ON'} ne 'on' ) {
373 $cgiparams{'WARN_ON'} = 'off';
374 }
375
376 if($cgiparams{'WARN_ON'} eq 'on' && $cgiparams{'WARN'} !~ /^\d+$/) {
377 $errormessage .= "$Lang::tr{'traffic warn level bad'}<br/>";
378 }
379
380 if($cgiparams{'CALC_INTERVAL'} < 5 || 60 < $cgiparams{'CALC_INTERVAL'}) {
381 $errormessage .= "$Lang::tr{'traffic calc time bad'}<br/>";
382 }
383
384 if ($cgiparams{'SEND_EMAIL_ON'} ne 'on' ) {
385 $cgiparams{'SEND_EMAIL_ON'} = 'off';
386 }
387
388 if($cgiparams{'SEND_EMAIL_ON'} eq 'on' )
389 {
390 if($cgiparams{'EMAIL_TO'} eq '' || (! &General::validemail($cgiparams{'EMAIL_TO'})) ) {
391 $errormessage .= "$Lang::tr{'to warn email bad'}<br/>";
392 }
393
394 if($cgiparams{'EMAIL_FROM'} eq '' || (! &General::validemail($cgiparams{'EMAIL_FROM'}))) {
395 $errormessage .= "$Lang::tr{'from warn email bad'}<br/>";
396 }
397
398 if($cgiparams{'EMAIL_SERVER'} eq '') {
399 $errormessage .= "$Lang::tr{'email server can not be empty'}<br/>";
400 }
401 }
402 } # monthly volumne == on
403
404 if ($cgiparams{'VERSION_CHECK_ON'} ne 'on' ) {
405 $cgiparams{'VERSION_CHECK_ON'} = 'off';
406 }
407 }