]>
git.ipfire.org Git - people/teissler/ipfire-2.x.git/blob - config/cfgroot/monitorTraffic.pl
4772150c6f8ff485288a17c344e755d23ebc89a2
3 # This code is distributed under the terms of the GPL
7 # $Id: monitorTraffic.pl,v 1.14 2006/12/15 14:43:57 dotzball Exp $
13 # enable only the following on debugging purpose
16 require '/var/ipfire/general-functions.pl';
17 require "${General::swroot}/lang.pl";
18 require "${General::swroot}/net-traffic/net-traffic-lib.pl";
19 require "${General::swroot}/net-traffic/net-traffic-admin.pl";
21 my @dummy = (${Traffic
::red_in
},${Traffic
::red_out
});
25 # 0 - send email (if enabled), no print
26 # 1 - send email (if enabled), print
32 $log{'CALC_VOLUME_TOTAL'} = 0;
33 $log{'CALC_VOLUME_IN'} = 0;
34 $log{'CALC_VOLUME_OUT'} = 0;
35 $log{'CALC_WEEK_TOTAL'} = 0;
36 $log{'CALC_WEEK_IN'} = 0;
37 $log{'CALC_WEEK_OUT'} = 0;
38 $log{'CALC_LAST_RUN'} = 0;
39 $log{'CALC_PERCENT'} = 0;
40 $log{'WARNMAIL_SEND'} = 'no';
42 # current time == endtime
43 my $currentTime = time;
45 # on force we don't load the log data
46 unless(defined($ARGV[0]) && $ARGV[0] eq '--force') {
47 &General
::readhash
($NETTRAFF::logfile
, \
%log);
52 if(defined($ARGV[0]) && ($ARGV[0] eq '--testEmail' || $ARGV[0] eq '--warnEmail'))
54 print "Send testmail\n" if($debugLevel > 0);
55 # send (test|warn) email
56 my $return = &sendEmail
($ARGV[0]);
62 # should we recalculate?
63 # calc seconds for one interval
64 my $intervalTime = $NETTRAFF::settings
{'CALC_INTERVAL'} * 60;
65 # next time, we have to calculate
66 my $nextRunTime = $log{'CALC_LAST_RUN'} + $intervalTime;
70 my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($log{'CALC_LAST_RUN'});
71 my $lastRun = sprintf("%04d-%02d-%02d, %02d:%02d", 1900+$year, $mon+1, $mday, $hour, $min);
72 print "last run: $lastRun\n";
74 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($nextRunTime);
75 my $nextRun = sprintf("%04d-%02d-%02d, %02d:%02d", 1900+$year, $mon+1, $mday, $hour, $min);
76 print "next run: $nextRun\n";
78 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($currentTime);
79 my $current = sprintf("%04d-%02d-%02d, %02d:%02d", 1900+$year, $mon+1, $mday, $hour, $min);
80 print "current time: $current\n";
83 # use a little time buffer in case the last run started some seconds earlier
84 if($currentTime < ($nextRunTime - 60) )
89 my $infoMsg = "Net-Traffic: nothing to do, do next calculation later.";
91 &General
::log($infoMsg);
95 elsif($debugLevel > 0)
97 my $infoMsg = "Net-Traffic: Calc traffic now.";
99 &General
::log($infoMsg);
106 $log{'CALC_LAST_RUN'} = $currentTime;
107 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($currentTime);
110 #####################
114 my $startMonth = $mon + 1;
115 my $startYear = $year + 1900;
117 if($NETTRAFF::settings
{'MONTHLY_VOLUME_ON'} eq 'on')
119 $startDay = $NETTRAFF::settings
{'STARTDAY'};
122 # this periode started last month
123 if ($mday < $startDay)
125 # when current month is january we start in last year december
126 if ($startMonth == 1) {
135 $startMonth = $startMonth < 10 ?
$startMonth = "0".$startMonth : $startMonth;
136 $startDay = $startDay < 10 ?
$startDay = "0".$startDay : $startDay;
138 my $start = "$startYear$startMonth$startDay";
140 my %month = &getTrafficData
($start, $currentTime);
142 $log{'CALC_VOLUME_TOTAL'} = $month{'TOTAL'};
143 $log{'CALC_VOLUME_IN'} = $month{'IN'};
144 $log{'CALC_VOLUME_OUT'} = $month{'OUT'};
145 #####################
148 #####################
152 $startYear = $year + 1900;
153 $startDay = $mday-($wday >0 ?
$wday-1 : 6);
154 # borrowed from ipacsum
155 my @mofg = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
159 if ($startMonth < 0) {
163 $startDay += $mofg[$startMonth];
166 # $mon starts at 0 but we have to start at 1
169 $startMonth = $startMonth < 10 ?
$startMonth = "0".$startMonth : $startMonth;
170 $startDay = $startDay < 10 ?
$startDay = "0".$startDay : $startDay;
172 $start = "$startYear$startMonth$startDay";
174 my %week = &getTrafficData
($start, $currentTime);
175 $log{'CALC_WEEK_TOTAL'} = $week{'TOTAL'};
176 $log{'CALC_WEEK_IN'} = $week{'IN'};
177 $log{'CALC_WEEK_OUT'} = $week{'OUT'};
182 my $infoMsg = "Reached: $log{'CALC_VOLUME_TOTAL'} MB\n";
183 $infoMsg .= "start: $start";
184 print "$infoMsg\n" if ($debugLevel > 0);
187 # monthly traffic volume?
188 if ($NETTRAFF::settings
{'MONTHLY_VOLUME_ON'} eq 'on')
190 $log{'CALC_PERCENT'} = sprintf("%d", ($log{'CALC_VOLUME_TOTAL'} / $NETTRAFF::settings
{'MONTHLY_VOLUME'} * 100));
192 my $infoMsg = "Used (\%): $log{'CALC_PERCENT'} \% - Max.: $NETTRAFF::settings{'MONTHLY_VOLUME'} MB";
193 print "$infoMsg\n" if ($debugLevel > 0);
196 if($NETTRAFF::settings
{'WARN_ON'} eq 'on'
197 && $log{'CALC_PERCENT'} >= $NETTRAFF::settings
{'WARN'})
199 # warnlevel is reached
202 my $warnMsg = "Net-Traffic warning: $infoMsg";
204 &General
::log($warnMsg);
209 if($NETTRAFF::settings
{'SEND_EMAIL_ON'} eq 'on'
210 && $log{'WARNMAIL_SEND'} ne 'yes')
213 my $return = &sendEmail
('--warnEmail');
215 if($return =~ /Email was sent successfully!/)
217 $log{'WARNMAIL_SEND'} = 'yes';
220 $log{'WARNMAIL_SEND'} = 'no';
228 # warnlevel not reached, reset warnmail send
229 $log{'WARNMAIL_SEND'} = 'no';
233 &General
::writehash
($NETTRAFF::logfile
, \
%log);
241 my $p_currentTime = shift;
245 print "----------------------\n";
246 print "start: $p_start\n";
247 print "current time: $p_currentTime\n";
250 #my $displayMode = "exactTimeframe";
251 my $displayMode = "exactEnd";
253 my %allDaysBytes = ();
254 my @allDays = &Traffic
::calcTraffic
(\
%allDaysBytes, $p_start, $p_currentTime, $displayMode);
261 foreach my $day (@allDays)
266 print "in: $allDaysBytes{$day}{${Traffic::red_in}}\n";
267 print "out: $allDaysBytes{$day}{${Traffic::red_out}}\n";
270 $traff{'IN'} += $allDaysBytes{$day}{${Traffic
::red_in
}};
271 $traff{'OUT'} += $allDaysBytes{$day}{${Traffic
::red_out
}};
274 $traff{'TOTAL'} = $traff{'IN'} + $traff{'OUT'};
277 $traff{'TOTAL'} = sprintf("%.2f", ($traff{'TOTAL'}/1048576));
278 $traff{'IN'} = sprintf("%.2f", ($traff{'IN'}/1048576));
279 $traff{'OUT'} = sprintf("%.2f", ($traff{'OUT'}/1048576));
283 print "IN: $traff{'IN'}\n";
284 print "OUT: $traff{'OUT'}\n";
285 print "TOTAL: $traff{'TOTAL'}\n";
286 print "----------------------\n";
299 my %ipfireSettings = ();
300 &General
::readhash
("${General::swroot}/main/settings", \
%ipfireSettings);
301 my $host = "$ipfireSettings{'HOSTNAME'}.$ipfireSettings{'DOMAINNAME'}";
303 my $subject = "[Net-Traffic] $host: ";
305 if($mailtyp eq '--warnEmail')
307 $subject .= $Lang::tr
{'subject warn'};
312 $subject .= $Lang::tr
{'subject test'};
316 if(-e
"${General::swroot}/net-traffic/templates/$template.${Lang::language}")
318 $template .= ".${Lang::language}";
326 open(FILE
, "${General::swroot}/net-traffic/templates/$template");
330 my $date_current = &NETTRAFF
::getFormatedDate
($currentTime);
331 my $date_lastrun = &NETTRAFF
::getFormatedDate
($log{'CALC_LAST_RUN'});
334 foreach my $line (@temp)
337 $line =~ s/__HOSTNAME__/$host/;
338 $line =~ s/__CALC_VOLUME_TOTAL__/$log{'CALC_VOLUME_TOTAL'}/;
339 $line =~ s/__CALC_PERCENT__/$log{'CALC_PERCENT'}/;
340 $line =~ s/__MONTHLY_VOLUME__/$NETTRAFF::settings{'MONTHLY_VOLUME'}/;
341 $line =~ s/__STARTDAY__/$NETTRAFF::settings{'STARTDAY'}/;
342 $line =~ s/__CURRENT_DATE__/$date_current/;
343 $line =~ s/__LAST_RUN__/$date_lastrun/;
345 $message .= "$line\n";
349 my $cmd = "/usr/local/bin/sendEmail_nettraffic -f $NETTRAFF::settings{'EMAIL_FROM'} ";
350 $cmd .= " -t $NETTRAFF::settings{'EMAIL_TO'} ";
351 $cmd .= " -u \"$subject\" ";
352 $cmd .= " -m \"$message\" ";
353 $cmd .= " -s $NETTRAFF::settings{'EMAIL_SERVER'} ";
355 if($NETTRAFF::settings
{'EMAIL_USR'} ne '') {
356 $cmd .= " -xu $NETTRAFF::settings{'EMAIL_USR'} ";
358 if($NETTRAFF::settings
{'EMAIL_PW'} ne '') {
359 $cmd .= " -xp $NETTRAFF::settings{'EMAIL_PW'} ";