From d81292e0ec5c43a3095310a7c9a07c5df2be0423 Mon Sep 17 00:00:00 2001 From: maniacikarus Date: Wed, 30 May 2007 19:21:47 +0000 Subject: [PATCH] Net-Traffic aktualisiert git-svn-id: http://svn.ipfire.org/svn/ipfire/trunk@595 ea5c0bd1-69bd-2848-81d8-4f18e57aeed8 --- config/cfgroot/monitorTraffic.pl | 367 +++++++++++++++++++++++++ config/cfgroot/net-traffic-admin.pl | 257 ++++++++++++++++++ config/cfgroot/net-traffic-lib.pl | 90 +++--- config/cron/crontab | 3 + config/nettraffic/templates/test.de | 10 + config/nettraffic/templates/test.en | 10 + config/nettraffic/templates/test.pl | 11 + config/nettraffic/templates/warn.de | 9 + config/nettraffic/templates/warn.en | 9 + config/nettraffic/templates/warn.pl | 10 + config/rootfiles/common/misc-progs | 1 + doc/language_issues.de | 1 + doc/language_issues.en | 1 + html/cgi-bin/index.cgi | 54 ++++ html/cgi-bin/traffic.cgi | 373 +++++++++++++++++-------- html/cgi-bin/trafficadm.cgi | 407 ++++++++++++++++++++++++++++ html/cgi-bin/traffics.cgi | 186 +++++++------ langs/de/cgi-bin/de.pl | 33 +++ langs/en/cgi-bin/en.pl | 33 +++ lfs/configroot | 10 +- src/misc-progs/Makefile | 5 +- src/misc-progs/monitorTraff.c | 70 +++++ 22 files changed, 1698 insertions(+), 252 deletions(-) create mode 100644 config/cfgroot/monitorTraffic.pl create mode 100644 config/cfgroot/net-traffic-admin.pl create mode 100644 config/nettraffic/templates/test.de create mode 100644 config/nettraffic/templates/test.en create mode 100644 config/nettraffic/templates/test.pl create mode 100644 config/nettraffic/templates/warn.de create mode 100644 config/nettraffic/templates/warn.en create mode 100644 config/nettraffic/templates/warn.pl create mode 100644 html/cgi-bin/trafficadm.cgi create mode 100644 src/misc-progs/monitorTraff.c diff --git a/config/cfgroot/monitorTraffic.pl b/config/cfgroot/monitorTraffic.pl new file mode 100644 index 0000000000..4772150c6f --- /dev/null +++ b/config/cfgroot/monitorTraffic.pl @@ -0,0 +1,367 @@ +#!/usr/bin/perl +# +# This code is distributed under the terms of the GPL +# +# (c) Achim Weber 2006 +# +# $Id: monitorTraffic.pl,v 1.14 2006/12/15 14:43:57 dotzball Exp $ +# +# + +use strict; + +# enable only the following on debugging purpose +use warnings; + +require '/var/ipfire/general-functions.pl'; +require "${General::swroot}/lang.pl"; +require "${General::swroot}/net-traffic/net-traffic-lib.pl"; +require "${General::swroot}/net-traffic/net-traffic-admin.pl"; + +my @dummy = (${Traffic::red_in},${Traffic::red_out}); +undef(@dummy); + +# Debug level: +# 0 - send email (if enabled), no print +# 1 - send email (if enabled), print +# 2 - only print +my $debugLevel = 0; +# Debug + +my %log = (); +$log{'CALC_VOLUME_TOTAL'} = 0; +$log{'CALC_VOLUME_IN'} = 0; +$log{'CALC_VOLUME_OUT'} = 0; +$log{'CALC_WEEK_TOTAL'} = 0; +$log{'CALC_WEEK_IN'} = 0; +$log{'CALC_WEEK_OUT'} = 0; +$log{'CALC_LAST_RUN'} = 0; +$log{'CALC_PERCENT'} = 0; +$log{'WARNMAIL_SEND'} = 'no'; + +# current time == endtime +my $currentTime = time; + +# on force we don't load the log data +unless(defined($ARGV[0]) && $ARGV[0] eq '--force') { + &General::readhash($NETTRAFF::logfile, \%log); +} + + +# Only send email? +if(defined($ARGV[0]) && ($ARGV[0] eq '--testEmail' || $ARGV[0] eq '--warnEmail')) +{ + print "Send testmail\n" if($debugLevel > 0); + # send (test|warn) email + my $return = &sendEmail($ARGV[0]); + print "$return\n"; + exit 0; +} + + +# should we recalculate? +# calc seconds for one interval +my $intervalTime = $NETTRAFF::settings{'CALC_INTERVAL'} * 60; +# next time, we have to calculate +my $nextRunTime = $log{'CALC_LAST_RUN'} + $intervalTime; + +if ($debugLevel > 0) +{ + my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($log{'CALC_LAST_RUN'}); + my $lastRun = sprintf("%04d-%02d-%02d, %02d:%02d", 1900+$year, $mon+1, $mday, $hour, $min); + print "last run: $lastRun\n"; + + ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($nextRunTime); + my $nextRun = sprintf("%04d-%02d-%02d, %02d:%02d", 1900+$year, $mon+1, $mday, $hour, $min); + print "next run: $nextRun\n"; + + ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($currentTime); + my $current = sprintf("%04d-%02d-%02d, %02d:%02d", 1900+$year, $mon+1, $mday, $hour, $min); + print "current time: $current\n"; +} + +# use a little time buffer in case the last run started some seconds earlier +if($currentTime < ($nextRunTime - 60) ) +{ + # nothing to do + if ($debugLevel > 0) + { + my $infoMsg = "Net-Traffic: nothing to do, do next calculation later."; + print "$infoMsg\n"; + &General::log($infoMsg); + } + exit 0; +} +elsif($debugLevel > 0) +{ + my $infoMsg = "Net-Traffic: Calc traffic now."; + print "$infoMsg\n"; + &General::log($infoMsg); +} + +#### +# Calculate Traffic +# + +$log{'CALC_LAST_RUN'} = $currentTime; +my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($currentTime); + + +##################### +# this month traffic +### +my $startDay = '1'; +my $startMonth = $mon + 1; +my $startYear = $year + 1900; + +if($NETTRAFF::settings{'MONTHLY_VOLUME_ON'} eq 'on') +{ + $startDay = $NETTRAFF::settings{'STARTDAY'}; +} + +# this periode started last month +if ($mday < $startDay) +{ + # when current month is january we start in last year december + if ($startMonth == 1) { + $startYear--; + $startMonth = 12; + } + else + { + $startMonth--; + } +} +$startMonth = $startMonth < 10 ? $startMonth = "0".$startMonth : $startMonth; +$startDay = $startDay < 10 ? $startDay = "0".$startDay : $startDay; + +my $start = "$startYear$startMonth$startDay"; + +my %month = &getTrafficData($start, $currentTime); + +$log{'CALC_VOLUME_TOTAL'} = $month{'TOTAL'}; +$log{'CALC_VOLUME_IN'} = $month{'IN'}; +$log{'CALC_VOLUME_OUT'} = $month{'OUT'}; +##################### + + +##################### +# this week traffic +### +$startMonth = $mon; +$startYear = $year + 1900; +$startDay = $mday-($wday >0 ? $wday-1 : 6); +# borrowed from ipacsum +my @mofg = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); + +if ($startDay < 1) { + $startMonth--; + if ($startMonth < 0) { + $startMonth += 12; + $startYear--; + } + $startDay += $mofg[$startMonth]; +} + +# $mon starts at 0 but we have to start at 1 +$startMonth++; + +$startMonth = $startMonth < 10 ? $startMonth = "0".$startMonth : $startMonth; +$startDay = $startDay < 10 ? $startDay = "0".$startDay : $startDay; + +$start = "$startYear$startMonth$startDay"; + +my %week = &getTrafficData($start, $currentTime); +$log{'CALC_WEEK_TOTAL'} = $week{'TOTAL'}; +$log{'CALC_WEEK_IN'} = $week{'IN'}; +$log{'CALC_WEEK_OUT'} = $week{'OUT'}; +#################### + + + +my $infoMsg = "Reached: $log{'CALC_VOLUME_TOTAL'} MB\n"; +$infoMsg .= "start: $start"; +print "$infoMsg\n" if ($debugLevel > 0); + + +# monthly traffic volume? +if ($NETTRAFF::settings{'MONTHLY_VOLUME_ON'} eq 'on') +{ + $log{'CALC_PERCENT'} = sprintf("%d", ($log{'CALC_VOLUME_TOTAL'} / $NETTRAFF::settings{'MONTHLY_VOLUME'} * 100)); + + my $infoMsg = "Used (\%): $log{'CALC_PERCENT'} \% - Max.: $NETTRAFF::settings{'MONTHLY_VOLUME'} MB"; + print "$infoMsg\n" if ($debugLevel > 0); + + + if($NETTRAFF::settings{'WARN_ON'} eq 'on' + && $log{'CALC_PERCENT'} >= $NETTRAFF::settings{'WARN'}) + { + # warnlevel is reached + if ($debugLevel > 0) + { + my $warnMsg = "Net-Traffic warning: $infoMsg"; + print "$warnMsg\n"; + &General::log($warnMsg); + } + + if($debugLevel < 2) + { + if($NETTRAFF::settings{'SEND_EMAIL_ON'} eq 'on' + && $log{'WARNMAIL_SEND'} ne 'yes') + { + # send warn email + my $return = &sendEmail('--warnEmail'); + + if($return =~ /Email was sent successfully!/) + { + $log{'WARNMAIL_SEND'} = 'yes'; + } + else { + $log{'WARNMAIL_SEND'} = 'no'; + } + } + } + + } + else + { + # warnlevel not reached, reset warnmail send + $log{'WARNMAIL_SEND'} = 'no'; + } +} + +&General::writehash($NETTRAFF::logfile, \%log); + +exit 0; + + +sub getTrafficData +{ + my $p_start = shift; + my $p_currentTime = shift; + + if($debugLevel > 0) + { + print "----------------------\n"; + print "start: $p_start\n"; + print "current time: $p_currentTime\n"; + } + + #my $displayMode = "exactTimeframe"; + my $displayMode = "exactEnd"; + + my %allDaysBytes = (); + my @allDays = &Traffic::calcTraffic(\%allDaysBytes, $p_start, $p_currentTime, $displayMode); + + my %traff = (); + $traff{'IN'} = 0; + $traff{'OUT'} = 0; + $traff{'TOTAL'} = 0; + + foreach my $day (@allDays) + { + if($debugLevel > 0) + { + print "day: $day\n"; + print "in: $allDaysBytes{$day}{${Traffic::red_in}}\n"; + print "out: $allDaysBytes{$day}{${Traffic::red_out}}\n"; + } + + $traff{'IN'} += $allDaysBytes{$day}{${Traffic::red_in}}; + $traff{'OUT'} += $allDaysBytes{$day}{${Traffic::red_out}}; + } + + $traff{'TOTAL'} = $traff{'IN'} + $traff{'OUT'}; + + # formating + $traff{'TOTAL'} = sprintf("%.2f", ($traff{'TOTAL'}/1048576)); + $traff{'IN'} = sprintf("%.2f", ($traff{'IN'}/1048576)); + $traff{'OUT'} = sprintf("%.2f", ($traff{'OUT'}/1048576)); + + if($debugLevel > 0) + { + print "IN: $traff{'IN'}\n"; + print "OUT: $traff{'OUT'}\n"; + print "TOTAL: $traff{'TOTAL'}\n"; + print "----------------------\n"; + } + + return %traff; +} + + +sub sendEmail +{ + my $mailtyp = shift; + + my $template = ""; + + my %ipfireSettings = (); + &General::readhash("${General::swroot}/main/settings", \%ipfireSettings); + my $host = "$ipfireSettings{'HOSTNAME'}.$ipfireSettings{'DOMAINNAME'}"; + + my $subject = "[Net-Traffic] $host: "; + + if($mailtyp eq '--warnEmail') + { + $subject .= $Lang::tr{'subject warn'}; + $template = "warn"; + } + else + { + $subject .= $Lang::tr{'subject test'}; + $template = "test"; + } + + if(-e "${General::swroot}/net-traffic/templates/$template.${Lang::language}") + { + $template .= ".${Lang::language}"; + } + else + { + $template .= ".en"; + } + + # read template + open(FILE, "${General::swroot}/net-traffic/templates/$template"); + my @temp = ; + close(FILE); + + my $date_current = &NETTRAFF::getFormatedDate($currentTime); + my $date_lastrun = &NETTRAFF::getFormatedDate($log{'CALC_LAST_RUN'}); + + my $message = ""; + foreach my $line (@temp) + { + chomp($line); + $line =~ s/__HOSTNAME__/$host/; + $line =~ s/__CALC_VOLUME_TOTAL__/$log{'CALC_VOLUME_TOTAL'}/; + $line =~ s/__CALC_PERCENT__/$log{'CALC_PERCENT'}/; + $line =~ s/__MONTHLY_VOLUME__/$NETTRAFF::settings{'MONTHLY_VOLUME'}/; + $line =~ s/__STARTDAY__/$NETTRAFF::settings{'STARTDAY'}/; + $line =~ s/__CURRENT_DATE__/$date_current/; + $line =~ s/__LAST_RUN__/$date_lastrun/; + + $message .= "$line\n"; + } + + + my $cmd = "/usr/local/bin/sendEmail_nettraffic -f $NETTRAFF::settings{'EMAIL_FROM'} "; + $cmd .= " -t $NETTRAFF::settings{'EMAIL_TO'} "; + $cmd .= " -u \"$subject\" "; + $cmd .= " -m \"$message\" "; + $cmd .= " -s $NETTRAFF::settings{'EMAIL_SERVER'} "; + + if($NETTRAFF::settings{'EMAIL_USR'} ne '') { + $cmd .= " -xu $NETTRAFF::settings{'EMAIL_USR'} "; + } + if($NETTRAFF::settings{'EMAIL_PW'} ne '') { + $cmd .= " -xp $NETTRAFF::settings{'EMAIL_PW'} "; + } + + my $return = `$cmd`; + + return $return; +} + + diff --git a/config/cfgroot/net-traffic-admin.pl b/config/cfgroot/net-traffic-admin.pl new file mode 100644 index 0000000000..9638ad9f46 --- /dev/null +++ b/config/cfgroot/net-traffic-admin.pl @@ -0,0 +1,257 @@ +#!/usr/bin/perl +# +# This file is a library file for the Net-Traffic Addon. +# +# Copyright (C) 2006 Achim Weber +# +# $Id: net-traffic-admin.pl,v 1.13 2006/12/10 13:46:00 dotzball Exp $ +# +# 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 +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +package NETTRAFF; + +use strict; +use LWP::UserAgent; + +require '/var/ipfire/general-functions.pl'; +require "${General::swroot}/lang.pl"; +require "${General::swroot}/header.pl"; + +$|=1; # line buffering + +my $updateUrl = "http://blockouttraffic.de/version/Net-Traffic.latest"; +my $latestVersionFile = "${General::swroot}/net-traffic/latestVersion"; + +%NETTRAFF::settings; + + +$NETTRAFF::settingsfile = "${General::swroot}/net-traffic/settings"; +$NETTRAFF::versionfile = "${General::swroot}/net-traffic/version"; +$NETTRAFF::logfile = "/var/log/net-traffic.log"; +$NETTRAFF::colorOk = '#00FF00'; +$NETTRAFF::colorWarn = '#FFFF00'; +$NETTRAFF::colorMax = '#FF0000'; + + +#~ $NETTRAFF::settingsCGI = '/cgi-bin/fwrulesadm.cgi'; +#~ $NETTRAFF::configCGI = '/cgi-bin/fwrules.cgi'; +#~ $NETTRAFF::advConfCGI = '/cgi-bin/fwadvconf.cgi'; + + +@NETTRAFF::longmonths = ( $Lang::tr{'january'}, $Lang::tr{'february'}, $Lang::tr{'march'}, + $Lang::tr{'april'}, $Lang::tr{'may'}, $Lang::tr{'june'}, $Lang::tr{'july'}, $Lang::tr{'august'}, + $Lang::tr{'september'}, $Lang::tr{'october'}, $Lang::tr{'november'}, + $Lang::tr{'december'} ); + +@NETTRAFF::months = ( 0,1,2,3,4,5,6,7,8,9,10,11 ); + +@NETTRAFF::years=("2001","2002","2003","2004","2005","2006","2007","2008","2009"); + +#workaround to suppress a warning when a variable is used only once +my @dummy = ( $General::version ); +undef (@dummy); + + +# Init Settings +$NETTRAFF::settings{'MONTHLY_VOLUME_ON'} = 'off'; +$NETTRAFF::settings{'MONTHLY_VOLUME'} = '1'; +$NETTRAFF::settings{'STARTDAY'} = '1'; +$NETTRAFF::settings{'WARN_ON'} = 'off'; +$NETTRAFF::settings{'WARN'} = '80'; +$NETTRAFF::settings{'CALC_INTERVAL'} = '60'; +$NETTRAFF::settings{'SHOW_AT_HOME'} = 'on'; +$NETTRAFF::settings{'SEND_EMAIL_ON'} = 'off'; +$NETTRAFF::settings{'EMAIL_TO'} = ''; +$NETTRAFF::settings{'EMAIL_FROM'} = ''; +$NETTRAFF::settings{'EMAIL_USR'} = ''; +$NETTRAFF::settings{'EMAIL_PW'} = ''; +$NETTRAFF::settings{'EMAIL_SERVER'} = ''; +$NETTRAFF::settings{'VERSION_CHECK_ON'} = 'off'; + +&NETTRAFF::readSettings(); + + +sub readSettings +{ + &General::readhash($NETTRAFF::settingsfile, \%NETTRAFF::settings); +} + + +sub showNetTrafficVersion +{ + my %versionSettings = (); + + &General::readhash($NETTRAFF::versionfile, \%versionSettings); + + print < + Net-Traffic $versionSettings{'VERSION_INSTALLED'} + - +END + print "Build $versionSettings{'BUILD_INSTALLED'}"; + + if ($versionSettings{'IS_TESTVERSION'} == 1) { + print " - Testversion $versionSettings{'TESTVERSION'}"; + } + print "

\n"; + + # check for new version + &checkForNewVersion(); +} + +sub traffPercentbar +{ + my $percent = $_[0]; + my $fg = '#a0a0a0'; + my $bg = '#e2e2e2'; + + if ($percent =~ m/^(\d+)%$/ ) + { + print < + +END + + if ($percent eq "100%" || $1 > 100) + { + $fg = $NETTRAFF::colorMax; + print "" + } + elsif ($percent eq "0%") + { + print "" + } + else + { + if($NETTRAFF::settings{'WARN_ON'} eq 'on' + && $1 >= $NETTRAFF::settings{'WARN'}) + { + $fg = $NETTRAFF::colorWarn; + } + + print "" + } + print < + + + +END + + } +} + + +sub checkForNewVersion +{ + if ($NETTRAFF::settings{'VERSION_CHECK_ON'} ne 'on') + { + return; + } + + # download latest version + &downloadLatestVersionInfo(); + + if(-e $latestVersionFile) + { + my %versionSettings = (); + &General::readhash($NETTRAFF::versionfile, \%versionSettings); + + my %latestVersion = (); + &General::readhash($latestVersionFile, \%latestVersion); + + if( $versionSettings{'VERSION_INSTALLED'} lt $latestVersion{'VERSION_AVAILABLE'} + || ( $versionSettings{'VERSION_INSTALLED'} le $latestVersion{'VERSION_AVAILABLE'} + && $versionSettings{'BUILD_INSTALLED'} lt $latestVersion{'BUILD_AVAILABLE'} ) ) + { + &Header::openbox('100%', 'left', $Lang::tr{'info'}); + print < + + + $Lang::tr{'net traffic newversion'} + + $latestVersion{'URL_UPDATE'} + + + + + + v$latestVersion{'VERSION_AVAILABLE'} - Build $latestVersion{'BUILD_AVAILABLE'} + +END + + &Header::closebox(); + } + } +} + +sub downloadLatestVersionInfo +{ + # only check if we are online + if (! -e '/var/ipfire/red/active') + { + return; + } + + # download latest version file if it is not existing or outdated (i.e. 5 days old) + if((! -e $latestVersionFile) || (int(-M $latestVersionFile) > 5)) + { + my %versionSettings = (); + &General::readhash($NETTRAFF::versionfile, \%versionSettings); + + my $ua = LWP::UserAgent->new; + $ua->timeout(120); + $ua->agent("Mozilla/4.0 (compatible; IPFire $General::version; $versionSettings{'VERSION_INSTALLED'})"); + my $content = $ua->get($updateUrl); + + if ( $content->is_success ) + { +#~ open(FILE, ">$latestVersionFile") or die "Could not write file: $latestVersionFile"; +#~ flock (FILE, 2); +#~ print FILE "$content->content\n"; +#~ close(FILE); + + my %latestVersion = (); + + # latest versions, format is: MOD_VERSION="1.3.0" + $content->content =~ /MOD_VERSION="(.+?)"/; + $latestVersion{'VERSION_AVAILABLE'} = $1; + + # latest build, format is: MOD_BUILD="0" + $content->content =~ /MOD_BUILD="(.+?)"/; + $latestVersion{'BUILD_AVAILABLE'} = $1; + + # URL format is: MOD_URL="http://blockouttraffic.de/nt_index.php" + $content->content =~ /MOD_URL="(.+?)"/; + $latestVersion{'URL_UPDATE'} = $1; + + &General::writehash($latestVersionFile, \%latestVersion); + } + } +} + + +sub getFormatedDate +{ + my $time = shift; + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time); + + return sprintf("%04d-%02d-%02d, %02d:%02d", 1900+$year, $mon+1, $mday, $hour, $min);; + +} +# always return 1; +1; +# EOF diff --git a/config/cfgroot/net-traffic-lib.pl b/config/cfgroot/net-traffic-lib.pl index b354ff4244..37afdbf843 100644 --- a/config/cfgroot/net-traffic-lib.pl +++ b/config/cfgroot/net-traffic-lib.pl @@ -1,6 +1,6 @@ #!/usr/bin/perl # -# $Id: net-traffic-lib.pl,v 1.4 2005/03/17 11:43:55 dotzball Exp $ +# $Id: net-traffic-lib.pl,v 1.10 2007/01/09 19:00:35 dotzball Exp $ # # Summarize all IP accounting files from start to end time # @@ -40,29 +40,39 @@ use POSIX qw(strftime); use Time::Local; use Socket; use IO::Handle; +#use warnings; +#use strict; $|=1; # line buffering -@moff = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 ); +my @moff = (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 ); # =()<$datdelim="@@";>()= -$datdelim="#-#-#-#-#"; +my $datdelim="#-#-#-#-#"; # =()<$prefix="@@";>()= -$prefix="/usr"; +my $prefix="/usr"; # =()<$exec_prefix="@@";>()= -$exec_prefix="${prefix}"; +my $exec_prefix="${prefix}"; # =()<$INSTALLPATH="@@";>()= -$INSTALLPATH="${exec_prefix}/sbin"; -$datdir="/var/log/ip-acct"; +my $INSTALLPATH="${exec_prefix}/sbin"; +my $datdir="/var/log/ip-acct"; -$me=$0; +my $me=$0; $me =~ s|^.*/([^/]+)$|$1|; -$now = time; -$fetchipac="$INSTALLPATH/fetchipac"; -$rule_regex = ".*"; # match rules with this regex only +my $now = time; +my $fetchipac="$INSTALLPATH/fetchipac"; +my $rule_regex = ".*"; # match rules with this regex only +my $machine_name; +my $fetchipac_options; +my ($newest_timestamp_before_starttime, $oldest_timestamp_after_endtime); +my (%rule_firstfile, %rule_lastfile); +my $count; +my @timestamps; +my $rulenumber; +my ($starttime, $endtime); ## Net-Traffic variables ## -my %allDays = (); +my %allDays; my $allDaysBytes; my $tzoffset = 0; my $displayMode = "daily"; @@ -82,7 +92,9 @@ sub calcTraffic{ $starttime = shift; $endtime = shift; $displayMode = shift; - + + # init + %allDays = (); $starttime =~ /^(\d\d\d\d)(\d\d)/; $curYear = $1; $curMonth = $2; @@ -92,8 +104,13 @@ sub calcTraffic{ $tzoffset = time-timegm(localtime()); $machine_name = undef; - $starttime = makeunixtime($starttime); - $endtime = makeunixtime($endtime); + if($displayMode ne "exactTimeframe") + { + $starttime = makeunixtime($starttime); + if($displayMode ne 'exactEnd') { + $endtime = makeunixtime($endtime); + } + } $endtime -= 1; # options that we need to pass to fetchipac if we call it. @@ -101,9 +118,11 @@ sub calcTraffic{ $endtime = $now if ($endtime > $now); $starttime = 0 if ($starttime < 0); - $mystarttime = &makemydailytime($starttime); - $myendtime = &makemydailytime($endtime); - %rule_firstfile = %rule_lastfile = ( ); +#~ $mystarttime = &makemydailytime($starttime); +#~ $myendtime = &makemydailytime($endtime); + %rule_firstfile = ( ); + %rule_lastfile = ( ); + @timestamps = (); # find out which timestamps we need to read. # remember newest timestamp before starttime so we know when data for @@ -141,9 +160,9 @@ sub calcTraffic{ } close DATA; - push(@timestamps, $oldest_timestamp_after_endtime) + push(@timestamps, $oldest_timestamp_after_endtime) if ($oldest_timestamp_after_endtime); - unshift(@timestamps, $newest_timestamp_before_starttime) + unshift(@timestamps, $newest_timestamp_before_starttime) if ($newest_timestamp_before_starttime); $rulenumber = 0; @@ -151,7 +170,7 @@ sub calcTraffic{ # read all data we need and put the data into memory. &read_data; - @days_sorted = sort keys %allDays; + my @days_sorted = sort keys %allDays; return @days_sorted; } ########################## @@ -233,7 +252,7 @@ sub read_data { $curMonth = 1; $curYear++; } - my $newMonth = $curYear; + my $newMonth = $curYear; $newMonth .= $curMonth < 10 ? "0".$curMonth."01" : $curMonth."01"; $newMonth .= "01"; $curDay = &makeunixtime($newMonth); @@ -242,7 +261,7 @@ sub read_data { if ($timestamp < $starttime) { # this record is too old, we dont need the data. - # However, the timestamp gives us a clue on the + # However, the timestamp gives us a clue on the # time period the next item covers. $do_collect = 0; } @@ -256,7 +275,7 @@ sub read_data { # first one, split the data (if we know for how # long this data is valid, and if $laststamp is not # equal to $starttime in which case the split is - # redundant). If we don't have a clue about the + # redundant). If we don't have a clue about the # last file time before our first file was created, # we do not know how much of the file data is in our # time frame. we assume everything belongs to us. @@ -265,7 +284,7 @@ sub read_data { if ($laststamp && $laststamp != $newest_timestamp_before_starttime) { my $newdata = &split_data($data, $laststamp, $timestamp, $starttime); - $glb_data_before = $data; +#~ $glb_data_before = $data; $data = $newdata; $laststamp = $starttime; } @@ -279,8 +298,9 @@ sub read_data { if ($after_time == 0) { $after_time = 1; if ($laststamp) { - $glb_data_after = - &split_data($data,$laststamp,$timestamp,$endtime); +#~ $glb_data_after = +#~ &split_data($data,$laststamp,$timestamp,$endtime); + &split_data($data,$laststamp,$timestamp,$endtime); } else { $do_collect = 0; } @@ -334,8 +354,8 @@ sub split_data { # $fac1 now says us how much weight the first result has. # initialize the set we will return. my @ret = ( ); - - foreach $set (@$data) { + + foreach my $set (@$data) { my ($rule, $bytes, $pkts) = @$set; $$set[1] = int($bytes * $fac1 + 0.5); $$set[2] = int($pkts * $fac1 + 0.5); @@ -347,7 +367,7 @@ sub split_data { # put data from one file into global data structures # must be called in correct sorted file name order to set rules_lastfile # and rules_firstfile (which are currently useless) -# arguments: +# arguments: # $1=index number of file; $2 = reference to array with data from file sub collect_data { my($filedata, $ifile, $i, $day); @@ -368,7 +388,7 @@ sub collect_data { my $rule = $$set[0]; my $bytes = $$set[1]; my $pkts = $$set[2]; - + $_ = $rule; /^(.*) \(.*$/; $_ = $1; @@ -387,8 +407,8 @@ sub init_filter_id { my $newDay = &makemydailytime($s); $newDay =~ /^\d\d\d\d-(\d\d)-\d\d$/; - return 1 if ($1 > $curMonth && $displayMode ne "daily_multi"); - + return 1 if ($1 > $curMonth && $displayMode ne "daily_multi"); + $allDaysBytes->{$s}{'Day'} = $newDay; } else { @@ -408,7 +428,7 @@ sub init_filter_id { # read data record from filehandle $1 # number of records is $2 -# Return value: reference to array a of length n; +# Return value: reference to array a of length n; # n is the number of rules # each field in a is an array aa with 3 fields # the fields in arrays aa are: [0]=name of rule; [1]=byte count; @@ -452,7 +472,7 @@ sub read_data_record { # use time zone offset $tzoffset (input=wall clock time, output=UTC) sub makeunixtime { my($y, $m, $d, $h, $i, $e); - $s = shift; + my $s = shift; $h=0; $i=0; $e=0; if ($s =~ /^(\d\d\d\d)(\d\d)(\d\d)/) { diff --git a/config/cron/crontab b/config/cron/crontab index e0037fe01d..29fc635eda 100644 --- a/config/cron/crontab +++ b/config/cron/crontab @@ -56,3 +56,6 @@ HOME=/ # Reset Dialup Statistics bootrun 0 0 1 * * /usr/local/bin/dialctrl.pl reset + +# run traffic monitoring every 5 minutes +*/5 * * * * /usr/local/bin/monitorTraff > /dev/null diff --git a/config/nettraffic/templates/test.de b/config/nettraffic/templates/test.de new file mode 100644 index 0000000000..8f60f32fa5 --- /dev/null +++ b/config/nettraffic/templates/test.de @@ -0,0 +1,10 @@ +Dies ist eine Testemail von Net-Traffic auf Ihrem IPCop __HOSTNAME__. + +Verbrauchtes Monatsvolumen: __CALC_VOLUME_TOTAL__ MB (__CALC_PERCENT__ %) +Maximales Volumen pro Abrechnungsperiode: __MONTHLY_VOLUME__ MB + +Erste Tag der Abrechnungsperiode ist: __STARTDAY__ + +Aktuelles Datum: __CURRENT_DATE__ +Letzte Traffic Berechnung: __LAST_RUN__ + diff --git a/config/nettraffic/templates/test.en b/config/nettraffic/templates/test.en new file mode 100644 index 0000000000..3a84326982 --- /dev/null +++ b/config/nettraffic/templates/test.en @@ -0,0 +1,10 @@ +This is a testemail from Net-Traffic on your IPCop __HOSTNAME__. + +This months volume: __CALC_VOLUME_TOTAL__ MB (__CALC_PERCENT__ %) +Maximum volume per period: __MONTHLY_VOLUME__ MB + +Startday of periode is: __STARTDAY__ + +Current date is: __CURRENT_DATE__ +Last traffic calculation: __LAST_RUN__ + diff --git a/config/nettraffic/templates/test.pl b/config/nettraffic/templates/test.pl new file mode 100644 index 0000000000..5daa8b2fd5 --- /dev/null +++ b/config/nettraffic/templates/test.pl @@ -0,0 +1,11 @@ +To jest email testowy z Net-Traffic na Twoim IPCop __HOSTNAME__. + +Transfer w tym miesi¹cu: __CALC_VOLUME_TOTAL__ MB (__CALC_PERCENT__ %) +Maksymalny transfer w okresie: __MONTHLY_VOLUME__ MB + +Pocz¹tkowy dzieñ okresu: __STARTDAY__ + +Bie¿¹ca data: __CURRENT_DATE__ +Ostatnie obliczenia ruchu: __LAST_RUN__ + + diff --git a/config/nettraffic/templates/warn.de b/config/nettraffic/templates/warn.de new file mode 100644 index 0000000000..9602ca11e7 --- /dev/null +++ b/config/nettraffic/templates/warn.de @@ -0,0 +1,9 @@ +Der Traffic auf Ihrem IPCop __HOSTNAME__ hat das gewählte Warnlevel erreicht! + +Verbrauchtes Monatsvolumen: __CALC_VOLUME_TOTAL__ MB (__CALC_PERCENT__ %) +Maximales Volumen pro Abrechnungsperiode: __MONTHLY_VOLUME__ MB + +Erste Tag der Abrechnungsperiode ist: __STARTDAY__ + +Aktuelles Datum: __CURRENT_DATE__ + diff --git a/config/nettraffic/templates/warn.en b/config/nettraffic/templates/warn.en new file mode 100644 index 0000000000..e52d9a34e4 --- /dev/null +++ b/config/nettraffic/templates/warn.en @@ -0,0 +1,9 @@ +The traffic on your IPCop __HOSTNAME__ has reached the selected warnlevel! + +This months volume: __CALC_VOLUME_TOTAL__ MB (__CALC_PERCENT__ %) +Maximum volume per period: __MONTHLY_VOLUME__ MB + +Startday of periode is: __STARTDAY__ + +Current date is: __CURRENT_DATE__ + diff --git a/config/nettraffic/templates/warn.pl b/config/nettraffic/templates/warn.pl new file mode 100644 index 0000000000..093d8cf4d1 --- /dev/null +++ b/config/nettraffic/templates/warn.pl @@ -0,0 +1,10 @@ +Transfer na Twoim IPCop __HOSTNAME__ osi¹gn¹³ ustalony poziom ostrze¿eñ! + +Transfer w tym miesi¹cu: __CALC_VOLUME_TOTAL__ MB (__CALC_PERCENT__ %) +Maksymalny transfer w okresie: __MONTHLY_VOLUME__ MB + +Pocz¹tkowy dzieñ okresu: __STARTDAY__ + +Bie¿¹ca data: __CURRENT_DATE__ + + diff --git a/config/rootfiles/common/misc-progs b/config/rootfiles/common/misc-progs index 08c4febf25..6dddeb7652 100644 --- a/config/rootfiles/common/misc-progs +++ b/config/rootfiles/common/misc-progs @@ -10,6 +10,7 @@ usr/local/bin/openvpnctrl usr/local/bin/qosctrl usr/local/bin/rebuildhosts usr/local/bin/redctrl +usr/local/bin/monitorTraff #usr/local/bin/restartapplejuice usr/local/bin/restartsnort usr/local/bin/restartssh diff --git a/doc/language_issues.de b/doc/language_issues.de index 884ea57360..7f3c4de5f7 100644 --- a/doc/language_issues.de +++ b/doc/language_issues.de @@ -61,6 +61,7 @@ WARNING: translation string unused: cached memory WARNING: translation string unused: calamaris report interval (in minutes) WARNING: translation string unused: capsinactive WARNING: translation string unused: cfg restart +WARNING: translation string unused: check for net traffic update WARNING: translation string unused: choose config WARNING: translation string unused: clear cache WARNING: translation string unused: compression diff --git a/doc/language_issues.en b/doc/language_issues.en index 5be82cbe0b..8ff0118741 100644 --- a/doc/language_issues.en +++ b/doc/language_issues.en @@ -77,6 +77,7 @@ WARNING: translation string unused: cached memory WARNING: translation string unused: calamaris report interval (in minutes) WARNING: translation string unused: capsinactive WARNING: translation string unused: cfg restart +WARNING: translation string unused: check for net traffic update WARNING: translation string unused: choose config WARNING: translation string unused: choose media WARNING: translation string unused: clear cache diff --git a/html/cgi-bin/index.cgi b/html/cgi-bin/index.cgi index 30d66c3355..9135b75f8b 100644 --- a/html/cgi-bin/index.cgi +++ b/html/cgi-bin/index.cgi @@ -293,6 +293,60 @@ print <
+ + + + + + + + + + + + + + + + + + + + + + + +END + + if($NETTRAFF::settings{'MONTHLY_VOLUME_ON'} eq 'on') + { +print ""; + } + print "
$Lang::tr{'traffic monitor'} ($Lang::tr{'traffic calc time'} $calctime)
$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficsum'}
$Lang::tr{'this weeks volume'} (MB):$calc{'CALC_WEEK_IN'}$calc{'CALC_WEEK_OUT'}$calc{'CALC_WEEK_TOTAL'}
$Lang::tr{'this months volume'} (MB):$calc{'CALC_VOLUME_IN'}$calc{'CALC_VOLUME_OUT'}$calc{'CALC_VOLUME_TOTAL'}
max. $NETTRAFF::settings{'MONTHLY_VOLUME'} MB"; +&NETTRAFF::traffPercentbar("$calc{'CALC_PERCENT'}%"); +print "  $calc{'CALC_PERCENT'}%
"; +} + &Header::closebox(); &Header::closebigbox(); diff --git a/html/cgi-bin/traffic.cgi b/html/cgi-bin/traffic.cgi index 2fe1ea76e3..892854b4cf 100644 --- a/html/cgi-bin/traffic.cgi +++ b/html/cgi-bin/traffic.cgi @@ -6,6 +6,16 @@ # # (c) The SmoothWall Team # +# $Id: traffic.cgi,v 1.19 2007/01/09 18:59:23 dotzball Exp $ +# +# traffic.cgi, v1.1.0 2003/10/18 +# supports now: +# * IPCop v1.3.0 +# * choosing year +# +# 18 June 2004 Achim Weber +# - added functionality to work with IPCop 1.4.0 +# - use some functions from ipacsum use strict; @@ -16,111 +26,128 @@ use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; -require '/var/ipfire/net-traffic/net-traffic-lib.pl'; +require "${General::swroot}/net-traffic/net-traffic-admin.pl"; +require "${General::swroot}/net-traffic/net-traffic-lib.pl"; 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; +my @dummy = (@NETTRAFF::months, @NETTRAFF::longmonths, $NETTRAFF::colorOk, $NETTRAFF::colorWarn, $NETTRAFF::colorMax); +undef(@dummy); + +my %cgiparams; my %pppsettings; my %netsettings; &General::readhash("${General::swroot}/ppp/settings", \%pppsettings); &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); -my ($s, $min, $h, $d, $m,$y) = localtime(time); -$y+=1900; -$m+=1; -$m = $m < 10 ? $m = "0".$m : $m; +my @now = localtime(time); + +$now[5] = $now[5]+1900; + +$cgiparams{'STARTYEAR'} = $now[5]; +$cgiparams{'STARTMONTH'} = $now[4]; + +my $startDay = '1'; +my $endDay = '1'; + +if($NETTRAFF::settings{'MONTHLY_VOLUME_ON'} eq 'on') +{ + $startDay = $NETTRAFF::settings{'STARTDAY'}; + $endDay = $NETTRAFF::settings{'STARTDAY'}; +} + +# this periode started last month +if ($now[3] < $startDay) +{ + # when current month is january we start in last year december + if ($now[4] == 0) { + $cgiparams{'STARTYEAR'} = $now[5]-1; + $cgiparams{'STARTMONTH'} = 11; + } + else + { + $cgiparams{'STARTYEAR'} = $now[5]; + $cgiparams{'STARTMONTH'} = $now[4]-1; + } +} -$cgiparams{'MONTH'} = $m; -&Header::getcgihash(\%cgiparams); -$cgiparams{'YEAR'} = $y; &Header::getcgihash(\%cgiparams); -&Header::showhttpheaders(); +my $selectYearALL = ""; +$selectYearALL = 'selected=\'selected\'' if($cgiparams{'STARTYEAR'} eq '????'); -my %selectYear; -$selectYear{'YEAR'}{'2007'} = ''; -$selectYear{'YEAR'}{'2008'} = ''; -$selectYear{'YEAR'}{'2009'} = ''; -$selectYear{'YEAR'}{'2010'} = ''; -$selectYear{'YEAR'}{'2011'} = ''; -$selectYear{'YEAR'}{'2012'} = ''; -$selectYear{'YEAR'}{'????'} = ''; -$selectYear{'YEAR'}{$cgiparams{'YEAR'}} = 'selected=\'selected\''; - - -my %selected; - -$selected{'MONTH'}{'01'} = ''; -$selected{'MONTH'}{'02'} = ''; -$selected{'MONTH'}{'03'} = ''; -$selected{'MONTH'}{'04'} = ''; -$selected{'MONTH'}{'05'} = ''; -$selected{'MONTH'}{'06'} = ''; -$selected{'MONTH'}{'07'} = ''; -$selected{'MONTH'}{'08'} = ''; -$selected{'MONTH'}{'09'} = ''; -$selected{'MONTH'}{'10'} = ''; -$selected{'MONTH'}{'11'} = ''; -$selected{'MONTH'}{'12'} = ''; -$selected{'MONTH'}{'??'} = ''; -$selected{'MONTH'}{$cgiparams{'MONTH'}} = 'selected=\'selected\''; +my $selectMonthALL = ""; +$selectMonthALL = 'selected=\'selected\'' if($cgiparams{'STARTMONTH'} eq '??'); +&Header::showhttpheaders(); &Header::openpage($Lang::tr{'sstraffic'}, 1, ''); - &Header::openbigbox('100%', 'left'); +&Header::openbox('100%', 'left', ""); -&Header::openbox('100%', 'left', $Lang::tr{'settings'}); +my $firstDayTxt = ''; + +if($NETTRAFF::settings{'MONTHLY_VOLUME_ON'} eq 'on') +{ + $firstDayTxt = " ($Lang::tr{'monthly volume start day short'}: $NETTRAFF::settings{'STARTDAY'}.)"; +} print < + - + + +
+
- $Lang::tr{'selecttraffic'} - +END + +foreach my $month (@NETTRAFF::months) +{ + print "\t\n"; +} + +print <$Lang::tr{'allmsg'} - +END + +for (my $index=0; $index<=$#NETTRAFF::years; $index++) { + print "\t\n"; +} + +print <$Lang::tr{'allmsg'} -
+
+ +
+
-
END &Header::closebox(); -&Header::openbox('100%', 'left', $Lang::tr{'traffics'}); +&Header::openbox('100%', 'left', "$Lang::tr{'traffics'}"); my $dateWidth = '20%'; my $netWidth = '34%'; @@ -154,36 +181,36 @@ if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) { print "$Lang::tr{'trafficorange'}"; } -if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) { - print "$Lang::tr{'trafficred'}"; - } +if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) { + print "$Lang::tr{'trafficred'}"; +} print < - - + + END if ($netsettings{'CONFIG_TYPE'} =~ /^(3|4)$/) -{ +{ print ""; print ""; -} +} if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) -{ - print ""; - print ""; -} +{ + print ""; + print ""; +} if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) { - print ""; - print ""; +print ""; +print ""; } - print""; +print ""; my $total_blue_in=0; my $total_blue_out=0; @@ -195,68 +222,156 @@ my $total_red_in=0; my $total_red_out=0; my $lines=0; -my $displayMode = "daily"; -my $startMonth = $cgiparams{'MONTH'}; -my $endMonth = $cgiparams{'MONTH'}; -if ($cgiparams{'MONTH'} eq '??') { + +my $startYear = $cgiparams{'STARTYEAR'}; +my $endYear = $cgiparams{'STARTYEAR'}; +my $startMonth = $cgiparams{'STARTMONTH'}; +my $endMonth = $cgiparams{'STARTMONTH'}; +my $displayMode = "daily_multi"; +$startDay = '1'; +$endDay = '1'; +my $selectedMonth = '0'; + +if($NETTRAFF::settings{'MONTHLY_VOLUME_ON'} eq 'on') +{ + $startDay = $NETTRAFF::settings{'STARTDAY'}; + $endDay = $NETTRAFF::settings{'STARTDAY'}; +} + +# "show All ? +if ($cgiparams{'STARTYEAR'} eq '????') +{ + # 'show all month' + 'show all years' + # OR + 'show all years' + + # if we have a , we read all traffic but display only the selected month + if($cgiparams{'STARTMONTH'} ne '??') + { + $selectedMonth = $cgiparams{'STARTMONTH'} + 1; + $selectedMonth = $selectedMonth < 10 ? $selectedMonth = "0".$selectedMonth : $selectedMonth; + } + + $displayMode = "monthly"; + # start with 1970-01-01 + $startYear = 1970; + $startMonth = '1'; + $startDay = '1'; + # end with next year: 20xx-01-01 + $endYear = $now[5] + 1; + $endMonth = '1'; + $endDay = '1'; +} +elsif ($cgiparams{'STARTMONTH'} eq '??') +{ + # 'show all month' + 200x $displayMode = "monthly"; - $startMonth = '01'; - $endMonth = '12'; + # start with 200x-01-01 + $startMonth = '1'; + $startDay = '1'; + # end with (200x+1)-01-01 + $endYear = $startYear + 1; + $endMonth = '1'; + $endDay = '1'; +} +else +{ + # no "Show All" + $startMonth++; + $endMonth = $endMonth + 2; + + # this periode started last month + if ($now[3] < $startDay) + { + # when current month is january we start in last year december + if ($endMonth == 1) { + $startYear--; + $startMonth = 12; + } + } + else + { + # when we are in december, this periode ends next year january + if ($startMonth == 12) { + $endYear++; + $endMonth = 1; + } + } } -my $start = "$cgiparams{'YEAR'}$startMonth"."01"; -my $end = "$cgiparams{'YEAR'}$endMonth"."32"; + + +$startMonth = $startMonth < 10 ? $startMonth = "0".$startMonth : $startMonth; +$endMonth = $endMonth < 10 ? $endMonth = "0".$endMonth : $endMonth; +$startDay = $startDay < 10 ? $startDay = "0".$startDay : $startDay; +$endDay = $endDay < 10 ? $endDay = "0".$endDay : $endDay; + +my $start = "$startYear$startMonth$startDay"; +my $end = "$endYear$endMonth$endDay"; + my %allDaysBytes = (); my @allDays = &Traffic::calcTraffic(\%allDaysBytes,$start,$end, $displayMode); -foreach (@allDays) { +foreach (@allDays) +{ + # special code for: + 'show all years' + if($cgiparams{'STARTMONTH'} ne '??' && $cgiparams{'STARTYEAR'} eq '????') + { + # show only those traffic in the selected month + if($allDaysBytes{$_}{'Day'} !~ /^\d\d\d\d-$selectedMonth$/) + { + next; + } + } + $total_green_in += $allDaysBytes{$_}{${Traffic::green_in}}; $total_green_out += $allDaysBytes{$_}{${Traffic::green_out}}; - + if ($netsettings{'CONFIG_TYPE'} =~ /^(3|4)$/) { $total_blue_in += $allDaysBytes{$_}{${Traffic::blue_in}}; $total_blue_out += $allDaysBytes{$_}{${Traffic::blue_out}}; } - + if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) { $total_orange_in += $allDaysBytes{$_}{${Traffic::orange_in}}; $total_orange_out += $allDaysBytes{$_}{${Traffic::orange_out}}; } - + if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) - { + { $total_red_in += $allDaysBytes{$_}{${Traffic::red_in}}; $total_red_out += $allDaysBytes{$_}{${Traffic::red_out}}; - } - + } + if ($lines % 2) { print ""; } else { - print ""; } - + print ""; } + printf "\n", $allDaysBytes{$_}{'Day'}; printf "\n", ($allDaysBytes{$_}{${Traffic::green_in}}/1048576); printf "\n", ($allDaysBytes{$_}{${Traffic::green_out}}/1048576); - + if ($netsettings{'CONFIG_TYPE'} =~ /^(3|4)$/) - { + { printf "\n", ($allDaysBytes{$_}{${Traffic::blue_in}}/1048576); printf "\n", ($allDaysBytes{$_}{${Traffic::blue_out}}/1048576); - } + } if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) - { + { printf "\n", ($allDaysBytes{$_}{${Traffic::orange_in}}/1048576); printf "\n", ($allDaysBytes{$_}{${Traffic::orange_out}}/1048576); - } - if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) + } + + if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) { printf "\n", ($allDaysBytes{$_}{${Traffic::red_in}}/1048576); printf "\n", ($allDaysBytes{$_}{${Traffic::red_out}}/1048576); - } + } + $lines++; } @@ -265,42 +380,62 @@ $total_green_out=sprintf("%.2f", ($total_green_out/1048576)); $total_blue_in=sprintf("%.2f", ($total_blue_in/1048576)); $total_blue_out=sprintf("%.2f", ($total_blue_out/1048576)); $total_orange_in=sprintf("%.2f", ($total_orange_in/1048576)); -$total_orange_out=sprintf("%.2f", ($total_orange_out/1048576)); +$total_orange_out=sprintf("%.2f", ($total_orange_out/1048576)); $total_red_in=sprintf("%.2f", ($total_red_in/1048576)); $total_red_out=sprintf("%.2f", ($total_red_out/1048576)); - + if ($lines % 2) {print ""; } else {print ""; } - + print <$Lang::tr{'trafficsum'} END - + if ($netsettings{'CONFIG_TYPE'} =~ /^(3|4)$/) -{ +{ print ""; print ""; } if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) -{ +{ print ""; print ""; } if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) { - print ""; - print ""; -} -print < -
$Lang::tr{'trafficdate'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}
%s%.3f%.3f%.3f%.3f%.3f%.3f%.3f%.3f
$total_green_in MB $total_green_out MB$total_blue_in MB$total_blue_out MB$total_orange_in MB$total_orange_out MB$total_red_in MB$total_red_out MB
+print "$total_red_in MB"; +print "$total_red_out MB"; +} +print ""; + +if($NETTRAFF::settings{'MONTHLY_VOLUME_ON'} eq 'on') +{ + my $total_red_all = sprintf("%.2f", ($total_red_in + $total_red_out)); + + my $color = $NETTRAFF::colorOk; + + my $warnTraff = ($NETTRAFF::settings{'MONTHLY_VOLUME'} * $NETTRAFF::settings{'WARN'} / 100); + if($NETTRAFF::settings{'WARN_ON'} eq 'on' + && $warnTraff < $total_red_all) + { + $color = $NETTRAFF::colorWarn; + } + if($NETTRAFF::settings{'MONTHLY_VOLUME'} < $total_red_all) + { + $color = $NETTRAFF::colorMax; + } + + print < + $Lang::tr{'monthly volume'} ($NETTRAFF::settings{'MONTHLY_VOLUME'} MB) + $total_red_all MB + END +} &Header::closebox(); - &Header::closebigbox(); - &Header::closepage(); diff --git a/html/cgi-bin/trafficadm.cgi b/html/cgi-bin/trafficadm.cgi new file mode 100644 index 0000000000..2ad242a8d4 --- /dev/null +++ b/html/cgi-bin/trafficadm.cgi @@ -0,0 +1,407 @@ +#!/usr/bin/perl +# +# This code is distributed under the terms of the GPL +# +# Copyright (c) 2005 Achim Weber +# +# $Id: trafficadm.cgi,v 1.21 2006/12/31 14:33:18 dotzball Exp $ +# + +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}/net-traffic/net-traffic-admin.pl"; + +my %cgiparams; +my $errormessage = ''; +my $infomessage = ''; +my $saveerror = 0; +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 ); +my @warnLevels = ( 50,60,70,80,90,100 ); + +my @dummy = ($NETTRAFF::settingsfile, ${Header::colourred}); +undef(@dummy); + +&Header::showhttpheaders(); + +# Init parameters +$cgiparams{'MONTHLY_VOLUME_ON'} = 'off'; +$cgiparams{'MONTHLY_VOLUME'} = ''; +$cgiparams{'STARTDAY'} = '1'; +$cgiparams{'WARN_ON'} = 'off'; +$cgiparams{'WARN'} = '80'; +$cgiparams{'CALC_INTERVAL'} = '60'; +$cgiparams{'SHOW_AT_HOME'} = 'off'; +$cgiparams{'SEND_EMAIL_ON'} = 'off'; +$cgiparams{'EMAIL_TO'} = ''; +$cgiparams{'EMAIL_FROM'} = ''; +$cgiparams{'EMAIL_USR'} = ''; +$cgiparams{'EMAIL_PW'} = ''; +$cgiparams{'EMAIL_SERVER'} = ''; +$cgiparams{'VERSION_CHECK_ON'} = 'off'; + + +&Header::getcgihash(\%cgiparams); + +if ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) +{ + &validSave(); + + if ($errormessage) { + $saveerror = 1; + } + else { # no error, all right, save new settings + &General::writehash($NETTRAFF::settingsfile, \%cgiparams); + # calculate traffic + `/usr/local/bin/monitorTraff --force < /dev/null > /dev/null 2>&1 &`; + } +} # end if ($cgiparams{'ACTION'} eq $Lang::tr{'save'}) + + +# if user want to save settings and get a errormessage, we don´t +# overwrite users input +unless ($saveerror) { + + &NETTRAFF::readSettings(); + + $cgiparams{'MONTHLY_VOLUME_ON'} = $NETTRAFF::settings{'MONTHLY_VOLUME_ON'}; + $cgiparams{'MONTHLY_VOLUME'} = $NETTRAFF::settings{'MONTHLY_VOLUME'}; + $cgiparams{'STARTDAY'} = $NETTRAFF::settings{'STARTDAY'}; + $cgiparams{'WARN_ON'} = $NETTRAFF::settings{'WARN_ON'}; + $cgiparams{'WARN'} = $NETTRAFF::settings{'WARN'}; + $cgiparams{'CALC_INTERVAL'} = $NETTRAFF::settings{'CALC_INTERVAL'}; + $cgiparams{'SHOW_AT_HOME'} = $NETTRAFF::settings{'SHOW_AT_HOME'}; + $cgiparams{'SEND_EMAIL_ON'} = $NETTRAFF::settings{'SEND_EMAIL_ON'}; + $cgiparams{'EMAIL_TO'} = $NETTRAFF::settings{'EMAIL_TO'}; + $cgiparams{'EMAIL_FROM'} = $NETTRAFF::settings{'EMAIL_FROM'}; + $cgiparams{'EMAIL_USR'} = $NETTRAFF::settings{'EMAIL_USR'}; + $cgiparams{'EMAIL_PW'} = $NETTRAFF::settings{'EMAIL_PW'}; + $cgiparams{'EMAIL_SERVER'} = $NETTRAFF::settings{'EMAIL_SERVER'}; + $cgiparams{'VERSION_CHECK_ON'} = $NETTRAFF::settings{'VERSION_CHECK_ON'}; + +} # end unless ($saveerror) + + +if ($cgiparams{'ACTION'} eq $Lang::tr{'send test mail'}) +{ + # send test email + my $return = `/usr/local/bin/monitorTraff --testEmail`; + + if($return =~ /Email was sent successfully!/) + { + $infomessage = "$Lang::tr{'test email was sent'}
"; + } + else + { + $errormessage = "$Lang::tr{'test email could not be sent'}:
"; + $errormessage .= "$return
"; + } + + +} # end if ($cgiparams{'ACTION'} eq $Lang::tr{'send test mail'}) + + + +my %selected; +$selected{'CALC_INTERVAL'}{'5'} = ''; +$selected{'CALC_INTERVAL'}{'10'} = ''; +$selected{'CALC_INTERVAL'}{'15'} = ''; +$selected{'CALC_INTERVAL'}{'30'} = ''; +$selected{'CALC_INTERVAL'}{'60'} = ''; +$selected{'CALC_INTERVAL'}{$cgiparams{'CALC_INTERVAL'}} = "selected='selected'"; + +my %checked; +$checked{'MONTHLY_VOLUME_ON'}{'off'} = ''; +$checked{'MONTHLY_VOLUME_ON'}{'on'} = ''; +$checked{'MONTHLY_VOLUME_ON'}{$cgiparams{'MONTHLY_VOLUME_ON'}} = "checked='checked'"; + +$checked{'WARN_ON'}{'off'} = ''; +$checked{'WARN_ON'}{'on'} = ''; +$checked{'WARN_ON'}{$cgiparams{'WARN_ON'}} = "checked='checked'"; + +$checked{'SHOW_AT_HOME'}{'off'} = ''; +$checked{'SHOW_AT_HOME'}{'on'} = ''; +$checked{'SHOW_AT_HOME'}{$cgiparams{'SHOW_AT_HOME'}} = "checked='checked'" ; + +$checked{'SEND_EMAIL_ON'}{'off'} = ''; +$checked{'SEND_EMAIL_ON'}{'on'} = ''; +$checked{'SEND_EMAIL_ON'}{$cgiparams{'SEND_EMAIL_ON'}} = "checked='checked'" ; + +$checked{'VERSION_CHECK_ON'}{'off'} = ''; +$checked{'VERSION_CHECK_ON'}{'on'} = ''; +$checked{'VERSION_CHECK_ON'}{$cgiparams{'VERSION_CHECK_ON'}} = "checked='checked'" ; + + +my $btnTestmailDisabled = ""; +$btnTestmailDisabled = "disabled='disabled'" if($cgiparams{'SEND_EMAIL_ON'} ne 'on'); + +&Header::openpage($Lang::tr{'traffic monitor'}, 1, ''); +&Header::openbigbox('100%', 'left'); + +if ($errormessage) { + &Header::openbox('100%', 'left', $Lang::tr{'error messages'}); + print "$errormessage\n"; + print " \n"; + &Header::closebox(); +} + +if($infomessage) { + &Header::openbox('100%', 'left', "$Lang::tr{'traffic info messages'}:"); + print "$infomessage\n"; + print " \n"; + &Header::closebox(); +} + +&Header::openbox('100%', 'left', "$Lang::tr{'net-traffic configuration'}:"); + +print < + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+   + + $Lang::tr{'display traffic at home'} +
+   + + $Lang::tr{'monthly volume'} (MByte):   + + +
+ $Lang::tr{'monthly volume start day'}:   + +
+   + + $Lang::tr{'warn when traffic reaches'}:   + +
+ $Lang::tr{'calc traffic all x minutes'}:   + + +
+   + + $Lang::tr{'send email notification'}: +
+ $Lang::tr{'to email adr'}:   + +   +
+ $Lang::tr{'from email adr'}:   + +   +
+ $Lang::tr{'from email user'}:   + + +   * +
+ $Lang::tr{'from email pw'}:   + + +   * +
+ $Lang::tr{'from email server'}:   + +   +
+ +
+
+ + + + + +
+ *   + $Lang::tr{'this field may be blank'}   + +     +END + + # if user input cause an error + # and user want a reset, we re-read settings from settingsfile + if ($errormessage ne '') { + print ""; + } + else { + print ""; + } + +print < +
+ +
+ + + + + +
+   + +
+ +
+
+END + +&Header::closebox(); +&Header::closebigbox(); +&Header::closepage(); + + +sub validSave +{ + if ($cgiparams{'SHOW_AT_HOME'} ne 'on' ) { + $cgiparams{'SHOW_AT_HOME'} = 'off'; + } + + if ($cgiparams{'MONTHLY_VOLUME_ON'} ne 'on' ) { + $cgiparams{'MONTHLY_VOLUME_ON'} = 'off'; + } + + if($cgiparams{'MONTHLY_VOLUME_ON'} eq 'on') + { + if($cgiparams{'MONTHLY_VOLUME'} !~ /^\d+$/ || $cgiparams{'MONTHLY_VOLUME'} < 1) { + $errormessage .= "$Lang::tr{'monthly traffic bad'}
"; + } + + if($cgiparams{'STARTDAY'} < 1 || 31 < $cgiparams{'STARTDAY'}) { + $errormessage .= "$Lang::tr{'monthly start day bad'}
"; + } + + if ($cgiparams{'WARN_ON'} ne 'on' ) { + $cgiparams{'WARN_ON'} = 'off'; + } + + if($cgiparams{'WARN_ON'} eq 'on' && $cgiparams{'WARN'} !~ /^\d+$/) { + $errormessage .= "$Lang::tr{'traffic warn level bad'}
"; + } + + if($cgiparams{'CALC_INTERVAL'} < 5 || 60 < $cgiparams{'CALC_INTERVAL'}) { + $errormessage .= "$Lang::tr{'traffic calc time bad'}
"; + } + + if ($cgiparams{'SEND_EMAIL_ON'} ne 'on' ) { + $cgiparams{'SEND_EMAIL_ON'} = 'off'; + } + + if($cgiparams{'SEND_EMAIL_ON'} eq 'on' ) + { + if($cgiparams{'EMAIL_TO'} eq '' || (! &General::validemail($cgiparams{'EMAIL_TO'})) ) { + $errormessage .= "$Lang::tr{'to warn email bad'}
"; + } + + if($cgiparams{'EMAIL_FROM'} eq '' || (! &General::validemail($cgiparams{'EMAIL_FROM'}))) { + $errormessage .= "$Lang::tr{'from warn email bad'}
"; + } + + if($cgiparams{'EMAIL_SERVER'} eq '') { + $errormessage .= "$Lang::tr{'email server can not be empty'}
"; + } + } + } # monthly volumne == on + + if ($cgiparams{'VERSION_CHECK_ON'} ne 'on' ) { + $cgiparams{'VERSION_CHECK_ON'} = 'off'; + } +} diff --git a/html/cgi-bin/traffics.cgi b/html/cgi-bin/traffics.cgi index 92e7314078..26e4a134b6 100644 --- a/html/cgi-bin/traffics.cgi +++ b/html/cgi-bin/traffics.cgi @@ -6,6 +6,12 @@ # # (c) The SmoothWall Team # +# $Id: traffics.cgi,v 1.12 2006/11/15 21:14:02 dotzball Exp $ +# +# traffics.cgi, v1.1.0 2003/10/18 +# supports now: +# * IPCop v1.3.0 +# * choosing year use strict; @@ -16,94 +22,89 @@ use CGI::Carp 'fatalsToBrowser'; require '/var/ipfire/general-functions.pl'; require "${General::swroot}/lang.pl"; require "${General::swroot}/header.pl"; -require '/var/ipfire/net-traffic/net-traffic-lib.pl'; +require "${General::swroot}/net-traffic/net-traffic-admin.pl"; +require "${General::swroot}/net-traffic/net-traffic-lib.pl"; 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; +my %cgiparams; my %netsettings; &General::readhash("${General::swroot}/ethernet/settings", \%netsettings); -my @years=("2007","2008","2009","2010","2011","2012","2013","2014","2015"); - -my @longmonths = ( $Lang::tr{'january'}, $Lang::tr{'february'}, $Lang::tr{'march'}, - $Lang::tr{'april'}, $Lang::tr{'may'}, $Lang::tr{'june'}, $Lang::tr{'july'}, $Lang::tr{'august'}, - $Lang::tr{'september'}, $Lang::tr{'october'}, $Lang::tr{'november'}, - $Lang::tr{'december'} ); - -my @months = ( 0,1,2,3,4,5,6,7,8,9,10,11 ); 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 ); -my @now = localtime(time); +my @now = localtime(time); $now[5] = $now[5]+1900; -$cgiparams{'STARTDAY'} = 10; -$cgiparams{'STOPDAY'} = 11; -$cgiparams{'STARTYEAR'} = $now[5]; -$cgiparams{'STOPYEAR'} = $now[5]; +$cgiparams{'STARTDAY'} = 10; +$cgiparams{'STOPDAY'} = 11; +$cgiparams{'STARTYEAR'} = $now[5]; +$cgiparams{'STOPYEAR'} = $now[5]; + +if($NETTRAFF::settings{'MONTHLY_VOLUME_ON'} eq 'on') +{ + $cgiparams{'STARTDAY'} = $NETTRAFF::settings{'STARTDAY'}; + $cgiparams{'STOPDAY'} = $NETTRAFF::settings{'STARTDAY'}; +} # this periode started last month -if ($now[3] < 10) { +if ($now[3] < $cgiparams{'STARTDAY'}) { $cgiparams{'STARTMONTH'} = $now[4]-1; $cgiparams{'STOPMONTH'} = $now[4]; # when current month is january we start in last year december - if ($now[4] == 0) { + if ($cgiparams{'STOPMONTH'} == 0) { $cgiparams{'STARTYEAR'} = $now[5]-1; - $cgiparams{'STARTMONTH'} = 11; + $cgiparams{'STARTMONTH'} = 11; } } else { $cgiparams{'STARTMONTH'} = $now[4]; $cgiparams{'STOPMONTH'} = $now[4]+1; - # when we are december, this periode ends next year january - if ($now[4] == 11) { - $cgiparams{'STOPYEAR'} = $now[5]+1; + # when we are in december, this periode ends next year january + if ($cgiparams{'STARTMONTH'} == 11) { + $cgiparams{'STOPYEAR'} = $now[5]+1; $cgiparams{'STOPMONTH'} = 0; } } - -&Header::getcgihash(\%cgiparams); +&Header::getcgihash(\%cgiparams); &Header::showhttpheaders(); - &Header::openpage($Lang::tr{'sstraffic'}, 1, ''); - &Header::openbigbox('100%', 'left'); - -&Header::openbox('100%', 'left', $Lang::tr{'settings'}); +&Header::openbox('100%', 'left', ""); print < - +
$Lang::tr{'trafficfrom'} END -foreach (@months) +foreach my $month (@NETTRAFF::months) { print "\t\n"; + print "value='$month'>$NETTRAFF::longmonths[$month]\n"; } print < END -for (my $index=0; $index<=$#years; $index++) { +foreach my $year (@NETTRAFF::years) { print "\t\n"; + print "value='$year'>$year\n"; } print < END -foreach (@days) +foreach my $day (@days) { print "\t\n"; + print "value='$day'>$day\n"; } print < END -foreach (@months) +foreach my $month (@NETTRAFF::months) { print "\t\n"; + print "value='$month'>$NETTRAFF::longmonths[$month]\n"; } print < END -for (my $index = 0; $index <=$#years; $index++) { +foreach my $year (@NETTRAFF::years) { print "\t\n"; + print "value='$year'>$year\n"; } print < - - + +
- + END &Header::closebox(); -&Header::openbox('100%', 'left', $Lang::tr{'traffics'}); +&Header::openbox('100%', 'left', "$Lang::tr{'traffics'}"); my $dateWidth = '20%'; my $netWidth = '34%'; @@ -209,38 +210,37 @@ if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) { print "$Lang::tr{'trafficorange'}"; } -if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) { - print "$Lang::tr{'trafficred'}"; - } - +if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) +{ +print "$Lang::tr{'trafficred'}"; +} print <$Lang::tr{'trafficred'} - - + + END if ($netsettings{'CONFIG_TYPE'} =~ /^(3|4)$/) -{ +{ print ""; print ""; -} +} if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) -{ - print ""; - print ""; -} +{ + print ""; + print ""; +} if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) -{ - print ""; - print ""; +{ +print ""; +print ""; } - print""; +print ""; my $total_blue_in=0; my $total_blue_out=0; @@ -279,49 +279,49 @@ my @allDays = &Traffic::calcTraffic(\%allDaysBytes,$start,$end, $displayMode); foreach (@allDays) { $total_green_in += $allDaysBytes{$_}{${Traffic::green_in}}; $total_green_out += $allDaysBytes{$_}{${Traffic::green_out}}; - + if ($netsettings{'CONFIG_TYPE'} =~ /^(3|4)$/) { $total_blue_in += $allDaysBytes{$_}{${Traffic::blue_in}}; $total_blue_out += $allDaysBytes{$_}{${Traffic::blue_out}}; } - + if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) { $total_orange_in += $allDaysBytes{$_}{${Traffic::orange_in}}; $total_orange_out += $allDaysBytes{$_}{${Traffic::orange_out}}; } - + if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) { $total_red_in += $allDaysBytes{$_}{${Traffic::red_in}}; $total_red_out += $allDaysBytes{$_}{${Traffic::red_out}}; } - + if ($lines % 2) { print ""; } else { print ""; } - + printf "\n", $allDaysBytes{$_}{'Day'}; printf "\n", ($allDaysBytes{$_}{${Traffic::green_in}}/1048576); printf "\n", ($allDaysBytes{$_}{${Traffic::green_out}}/1048576); - + if ($netsettings{'CONFIG_TYPE'} =~ /^(3|4)$/) - { + { printf "\n", ($allDaysBytes{$_}{${Traffic::blue_in}}/1048576); printf "\n", ($allDaysBytes{$_}{${Traffic::blue_out}}/1048576); - } + } if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) - { + { printf "\n", ($allDaysBytes{$_}{${Traffic::orange_in}}/1048576); printf "\n", ($allDaysBytes{$_}{${Traffic::orange_out}}/1048576); - } - if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) + } + if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) { printf "\n", ($allDaysBytes{$_}{${Traffic::red_in}}/1048576); printf "\n", ($allDaysBytes{$_}{${Traffic::red_out}}/1048576); - } + } $lines++; } @@ -330,42 +330,38 @@ $total_green_out=sprintf("%.2f", ($total_green_out/1048576)); $total_blue_in=sprintf("%.2f", ($total_blue_in/1048576)); $total_blue_out=sprintf("%.2f", ($total_blue_out/1048576)); $total_orange_in=sprintf("%.2f", ($total_orange_in/1048576)); -$total_orange_out=sprintf("%.2f", ($total_orange_out/1048576)); +$total_orange_out=sprintf("%.2f", ($total_orange_out/1048576)); $total_red_in=sprintf("%.2f", ($total_red_in/1048576)); $total_red_out=sprintf("%.2f", ($total_red_out/1048576)); - -if ($lines % 2) {print ""; } + +if ($lines % 2) {print ""; } else {print ""; } - + print <$Lang::tr{'trafficsum'} END - + if ($netsettings{'CONFIG_TYPE'} =~ /^(3|4)$/) -{ +{ print ""; print ""; } if ($netsettings{'CONFIG_TYPE'} =~ /^(2|4)$/) -{ +{ print ""; print ""; } + if ($netsettings{'CONFIG_TYPE'} =~ /^(1|2|3|4)$/) { - print ""; - print ""; -} -print < -
$Lang::tr{'trafficdate'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}$Lang::tr{'trafficin'}$Lang::tr{'trafficout'}
%s%.3f%.3f%.3f%.3f%.3f%.3f%.3f%.3f
$total_green_in MB $total_green_out MB$total_blue_in MB$total_blue_out MB$total_orange_in MB$total_orange_out MB$total_red_in MB$total_red_out MB
-END +print "$total_red_in MB"; +print "$total_red_out MB"; +} +print ""; &Header::closebox(); - &Header::closebigbox(); - &Header::closepage(); diff --git a/langs/de/cgi-bin/de.pl b/langs/de/cgi-bin/de.pl index 7cbab640a0..d7d8e6452c 100644 --- a/langs/de/cgi-bin/de.pl +++ b/langs/de/cgi-bin/de.pl @@ -388,6 +388,7 @@ 'calamaris unlimited' => 'unbegrenzt', 'calamaris view' => 'Anzeigen', 'calamaris view report' => 'Bericht anzeigen', +'calc traffic all x minutes' => 'Berechne den Traffic alle x Minuten', 'cancel' => 'Abbrechen', 'cancel-adv-options' => 'Abbrechen', 'cannot enable both nat traversal and compression' => 'NAT Traversal und Kompression können nicht gleichzeitig aktiviert sein.', @@ -413,6 +414,7 @@ 'chain' => 'Verknüpfung', 'change passwords' => 'Passwörter Ã¤ndern', 'change share' => 'Freigabeeinstellungen ändern', +'check for net traffic update' => 'Prüfe auf Net-Traffic Updates', 'check vpn lr' => 'Überprüfen', 'choose config' => 'Konfiguration auswaehlen', 'cipher' => 'Verschlüsselung', @@ -569,6 +571,7 @@ 'disk usage' => 'Festplattenbelegung:', 'display' => 'Anzeige', 'display hostname in window title' => 'Hostname im Fenstertitel anzeigen', +'display traffic at home' => 'Berechneten Traffic auf der Startseite anzeigen', 'display webinterface effects' => 'Überblendeffekte einschalten', 'dl client arch' => 'Client Paket herunterladen (zip)', 'dmz' => 'DMZ', @@ -626,6 +629,7 @@ 'edit share' => 'Freigabe bearbeiten', 'editor' => 'Editor', 'eg' => 'z.B.:', +'email server can not be empty' => 'Email Server darf nicht leer sein', 'emailreportlevel' => 'Email Reportlevel', 'empty' => 'Dieses Feld kann leer bleiben', 'empty profile' => 'Unbenannt', @@ -700,6 +704,11 @@ 'fritzdsl help' => 'Um eines der folgenden Fritz!DSL Modems (Fritz!Card DSL=fcdsl / Fritz!CardDSL SL=fcdslsl / Fritz!Card DSL V2.0=fcdsl2 / Fritz!Card DSL USB=fcdslusb / Fritz!Card DSL USB SL=fcdslslusb) nutzen zu können, müssen Sie ein Paket auf Ihre IPFire-Box laden. Bitte laden Sie den tarball entsprechend Ihrer Version von der IPFire-Webseite herunter und laden Sie dann die gesamte fcdsl-(ihre_version).tgz mit dem folgenden Formular hoch.', 'fritzdsl upload' => 'Fritz!DSL-Treiber hochladen', 'from' => 'Von', +'from email adr' => 'Von Email Adresse', +'from email pw' => 'Von Email Passwort', +'from email server' => 'Von Email Server', +'from email user' => 'Von Email Benutzer', +'from warn email bad' => 'Von Email Adresse ist nicht gültig', 'gateway' => 'Gateway', 'gateway ip' => 'Gateway-IP', 'gen static key' => 'Statischen Schlüssel erzeugen', @@ -992,6 +1001,11 @@ 'monday' => 'Montag', 'month' => 'Monat', 'monthly firewallhits' => 'monatliche Firewalltreffer', +'monthly start day bad' => 'Monatlicher Starttag ist nicht gültig', +'monthly traffic bad' => 'Monatliches Volumen ist nicht gültig', +'monthly volume' => 'Monatliches Volumen', +'monthly volume start day' => 'Erster Tag der Monatlichen Abrechnungsperiode', +'monthly volume start day short' => 'Erste Tag', 'months' => 'Monate', 'more' => 'weitere', 'mount' => 'Einbinden', @@ -1008,6 +1022,8 @@ 'net config type' => 'Netzwerk-Konfigurations-Typ', 'net config type help' => 'GREEN ist das lokale Netzwerk, RED ist das Internet, BLUE ist WLAN, ORANGE ist die DMZ.', 'net to net vpn' => 'Netz-zu-Netz Virtual Private Network', +'net traffic newversion' => 'Es ist eine neue Net-Traffic Version verfügbar:', +'net-traffic configuration' => 'Net-Traffic Konfiguration', 'netbios name' => 'Netbios Name', 'netmask' => 'Netzwerkmaske', 'network' => 'Netzwerk', @@ -1266,6 +1282,8 @@ 'select source net' => 'Auswahl Quell-Netz', 'selecttraffic' => 'Trafficübersicht auswählen:', 'send cr' => 'ISP verlangt Zeilenrücklaufzeichen:', +'send email notification' => 'Aktiviert, Email Benachrichtigung senden', +'send test mail' => 'Sende Testemail', 'september' => 'September', 'serial' => 'serielle', 'server reserved' => 'The connection name server is reserved and not allowed', @@ -1369,6 +1387,8 @@ 'stop ovpn server' => 'Stoppe OpenVPN Server', 'stopped' => 'ANGEHALTEN', 'subject' => 'Betreff', +'subject test' => 'Testemail', +'subject warn' => 'Warnung - Warnlevel erreicht', 'subnet' => 'Subnet', 'subnet is invalid' => 'Netzmaske ist ungültig', 'subscripted user rules' => 'Sourcefire VRT Regeln mit Abonnement', @@ -1386,6 +1406,8 @@ 'system status information' => 'System-Statusinformationen', 'telephone not set' => 'Telefonnummer nicht angegeben.', 'test' => 'test', +'test email could not be sent' => 'Könnte Testemail nicht senden', +'test email was sent' => 'Testemail wurde erfolgreich versand', 'the following update was successfully installed' => 'Das folgende Update wurde erfolgreich installiert', 'the statistics were last updated at' => 'Die Statistik wurde zuletzt aktualisiert am', 'theme' => 'Style', @@ -1396,7 +1418,9 @@ 'this field may be blank' => 'Dieses Feld kann leer bleiben.', 'this is not a valid archive' => 'Dies ist kein gültiges Archiv.', 'this is not an authorised update' => 'Dies ist kein autorisiertes Update.', +'this months volume' => 'Diesen Monat', 'this update is already installed' => 'Dieses Update wurde bereits installiert.', +'this weeks volume' => 'Diese Woche', 'thursday' => 'Donnerstag', 'time' => 'Uhrzeit', 'time date manually reset' => 'Datum/Zeit wurden manuell zurückgesetzt.', @@ -1404,15 +1428,23 @@ 'timeout must be a number' => 'Wartezeit muss eine Zahl sein.', 'title' => 'Titel', 'to' => 'Bis', +'to email adr' => 'An Email Adresse', 'to install an update' => 'Um ein Update zu installieren, laden Sie zuerst die folgende .tgz.gpg Datei hoch:', +'to warn email bad' => 'An Email Adresse ist nicht gültig', 'toggle enable disable' => 'Aktivieren oder Deaktivieren', 'tone' => 'Ton', 'tone dial' => 'Tonwahl:', 'too long 80 char max' => ' ist zu lang, es sind maximal 80 Zeichen erlaubt', 'total hits for log section' => 'Gesamte Treffer für Log Sektion', +'traffic back' => 'Zurück', +'traffic calc time' => 'Berechnungszeitpunkt', +'traffic calc time bad' => 'Berechnungsintervall ist nicht gültig', +'traffic info messages' => 'Info', +'traffic monitor' => 'Traffic Monitor', 'traffic on' => 'Verkehr auf', 'traffic shaping' => 'Traffic Shaping', 'traffic shaping settings' => 'Einstellungen der Datenflußkontrolle', +'traffic warn level bad' => 'Warnlevel ist nicht gültig', 'trafficblue' => 'WLAN', 'trafficdate' => 'Datum', 'trafficfrom' => 'Von', @@ -1765,6 +1797,7 @@ 'vpn vhost' => 'Roadwarrior virtuelle IP (manchmal auch Inner-IP genannt)', 'vpn watch' => 'Netz-zu-Netz VPN neu starten, wenn sich Remote-IP ändert (DynDNS). Dies hilft DPD (Dead Peer Detection)', 'waiting to synchronize clock' => 'Bitte warten, die Uhr wird synchronisiert', +'warn when traffic reaches' => 'Warnen wenn Traffic x % erreicht', 'warning messages' => 'Warnhinweise', 'web hits' => 'Gesamtanzahl der Websites zum ausgewählten Kriterium', 'web proxy' => 'Web-Proxy', diff --git a/langs/en/cgi-bin/en.pl b/langs/en/cgi-bin/en.pl index f3130b0b08..2d784fc5b4 100644 --- a/langs/en/cgi-bin/en.pl +++ b/langs/en/cgi-bin/en.pl @@ -404,6 +404,7 @@ 'calamaris unlimited' => 'unlimited', 'calamaris view' => 'View', 'calamaris view report' => 'View report', +'calc traffic all x minutes' => 'Calculate traffic all x minutes', 'cancel' => 'Cancel', 'cancel-adv-options' => 'Cancel', 'cannot enable both nat traversal and compression' => 'Cannot enable both NAT Traversal and Compression.', @@ -429,6 +430,7 @@ 'chain' => 'Chain', 'change passwords' => 'Change passwords', 'change share' => 'edit share options', +'check for net traffic update' => 'Check for Net-Traffic updates', 'check vpn lr' => 'Check', 'choose config' => 'Choose Config', 'choose media' => 'Choose media', @@ -579,6 +581,7 @@ 'disk usage' => 'Disk usage:', 'display' => 'Display', 'display hostname in window title' => 'Display hostname in window title', +'display traffic at home' => 'Display calculated traffic on startpage', 'display webinterface effects' => 'Activate effects', 'dl client arch' => 'Download Client Package (zip)', 'dmz' => 'DMZ', @@ -635,6 +638,7 @@ 'edit share' => 'edit share', 'editor' => 'Editor', 'eg' => 'e.g:', +'email server can not be empty' => 'Email server can not be empty', 'emailreportlevel' => 'Emailreportlevel', 'empty' => 'This field may be left blank', 'empty profile' => 'empty', @@ -708,6 +712,11 @@ 'fritzdsl help' => 'To utilise one of Fritz!DSL fcdsl / fcdslsl / fcdsl2 / fcdslusb / fcdslslusb modem, you must upload a package to your IPFire box. Please download the tarball corresponding to your version from the IPFire Website and then upload the entire fcdsl-(your_version).tgz using the form below.', 'fritzdsl upload' => 'Upload Fritz!DSL Driver', 'from' => 'From', +'from email adr' => 'From Email address', +'from email pw' => 'From Email password', +'from email server' => 'From Email server', +'from email user' => 'From Email user', +'from warn email bad' => 'From email address is not valid', 'g.dtm' => 'TO BE REMOVED', 'g.lite' => 'TO BE REMOVED', 'gateway' => 'Gateway', @@ -1003,6 +1012,11 @@ 'monday' => 'Monday', 'month' => 'Month', 'monthly firewallhits' => 'monthly firewallhits', +'monthly start day bad' => 'Monthly start day is not correct', +'monthly traffic bad' => 'Monthly volume is not correct', +'monthly volume' => 'Monthly volume', +'monthly volume start day' => 'First day of monthly period', +'monthly volume start day short' => 'First day', 'months' => 'months', 'more' => 'more', 'mount' => 'Mount', @@ -1019,6 +1033,8 @@ 'net config type' => 'kind of network configuration', 'net config type help' => 'GREEN is the local network, RED is the internet, BLUE is WLAN, ORANGE is the DMZ.', 'net to net vpn' => 'Net-to-Net Virtual Private Network', +'net traffic newversion' => 'New Net-Traffic version is available:', +'net-traffic configuration' => 'Net-Traffic Configuration', 'netbios name' => 'Netbios Name', 'netmask' => 'Netmask', 'network' => 'Network', @@ -1271,6 +1287,8 @@ 'select source net' => 'Select a source net. If you have no Orange or Blue net configured, you need no DMZ Pinholes.', 'selecttraffic' => 'Select utilization-overview:', 'send cr' => 'ISP requires Carriage Return:', +'send email notification' => 'Enabled, send email notification', +'send test mail' => 'Send Testemail', 'september' => 'September', 'serial' => 'Serial', 'server reserved' => 'The connection name server is reserved and not allowed', @@ -1375,6 +1393,8 @@ 'stop ovpn server' => 'Stop OpenVPN Server', 'stopped' => 'STOPPED', 'subject' => 'Subject', +'subject test' => 'Testemail', +'subject warn' => 'Warning - warnlevel reached', 'subnet' => 'Subnet', 'subnet is invalid' => 'Netmask is invalid', 'subscripted user rules' => 'Sourcefire VRT rules with subscription', @@ -1392,6 +1412,8 @@ 'system status information' => 'System Status Information', 'telephone not set' => 'Telephone not set.', 'test' => 'test', +'test email could not be sent' => 'Could not sent Testemail', +'test email was sent' => 'Testemail was send successfully', 'the following update was successfully installed' => 'The following update was successfully installed', 'the statistics were last updated at' => 'The statistics were last updated at', 'theme' => 'Theme', @@ -1402,7 +1424,9 @@ 'this field may be blank' => 'This field may be blank.', 'this is not a valid archive' => 'This is not a valid archive.', 'this is not an authorised update' => 'This is not an authorised update.', +'this months volume' => 'This months volume', 'this update is already installed' => 'This update is already installed.', +'this weeks volume' => 'This weeks volume', 'thursday' => 'Thursday', 'time' => 'Time', 'time date manually reset' => 'Time/Date manually reset.', @@ -1410,14 +1434,22 @@ 'timeout must be a number' => 'Timeout must be a number.', 'title' => 'Title', 'to' => 'To', +'to email adr' => 'To Email address', 'to install an update' => 'To install an update please upload the .tgz.gpg file below:', +'to warn email bad' => 'To email address is not valid', 'toggle enable disable' => 'Enable or Disable', 'tone' => 'Tone', 'tone dial' => 'Tone dial:', 'total hits for log section' => 'Total Hits for Log Section', +'traffic back' => 'Back', +'traffic calc time' => 'Time of calculation', +'traffic calc time bad' => 'Calculation time is not correct', +'traffic info messages' => 'Info messages', +'traffic monitor' => 'Traffic Monitor', 'traffic on' => 'Traffic on', 'traffic shaping' => 'Traffic Shaping', 'traffic shaping settings' => 'Traffic Shaping Settings', +'traffic warn level bad' => 'Warnlevel is not correct', 'trafficblue' => 'WLAN', 'trafficdate' => 'Date', 'trafficfrom' => 'From', @@ -1769,6 +1801,7 @@ 'vpn vhost' => 'Roadwarrior virtual IP (sometimes called Inner-IP)', 'vpn watch' => 'Restart net-to-net vpn when remote peer IP changes (dyndns), it helps DPD', 'waiting to synchronize clock' => 'Waiting to synchronize clock', +'warn when traffic reaches' => 'Warn when traffic reaches x %', 'warning messages' => 'Warning messages', 'web hits' => 'Total number of websites matching selected criteria for', 'web proxy' => 'Web proxy', diff --git a/lfs/configroot b/lfs/configroot index e5d33e7d10..d5c26fa725 100644 --- a/lfs/configroot +++ b/lfs/configroot @@ -54,7 +54,7 @@ $(TARGET) : # Create all directories for i in addon-lang auth backup ca certs connscheduler crls ddns dhcp dhcpc dmzholes \ ethernet extrahd/bin fwlogs isdn key langs logging main mbmon menu.d modem net-traffic \ - nfs optionsfw outgoing/bin patches pakfire portfw \ + net-traffic\templates nfs optionsfw outgoing/bin patches pakfire portfw \ ppp private proxy/advanced/cre proxy/calamaris/bin qos/bin red remote snort time tripwire/report \ updatexlrator/bin updatexlrator/autocheck urlfilter/autoupdate urlfilter/bin upnp vpn \ wakeonlan wireless xtaccess ; do \ @@ -66,7 +66,7 @@ $(TARGET) : certs/index.txt ddns/config ddns/noipsettings ddns/settings ddns/ipcache dhcp/settings \ dhcp/fixleases dhcp/advoptions dmzholes/config ethernet/aliases ethernet/settings ethernet/known_nics ethernet/scanned_nics \ extrahd/scan extrahd/devices extrahd/partitions extrahd/settings fwlogs/ipsettings fwlogs/portsettings\ - isdn/settings main/hosts main/settings optionsfw/settings outgoing/settings outgoing/rules pakfire/settings \ + isdn/settings main/hosts main/settings net-traffic\settings optionsfw/settings outgoing/settings outgoing/rules pakfire/settings \ portfw/config ppp/settings-1 ppp/settings-2 ppp/settings-3 ppp/settings-4 \ ppp/settings-5 ppp/settings proxy/settings proxy/advanced/settings proxy/advanced/cre/enable remote/settings qos/settings qos/classes qos/subclasses qos/level7config qos/portconfig \ qos/tosconfig snort/settings tripwire/settings upnp/settings vpn/config vpn/settings vpn/ipsec.conf \ @@ -92,6 +92,8 @@ $(TARGET) : cp $(DIR_SRC)/config/cfgroot/modem-defaults $(CONFIG_ROOT)/modem/defaults cp $(DIR_SRC)/config/cfgroot/modem-settings $(CONFIG_ROOT)/modem/settings cp $(DIR_SRC)/config/cfgroot/net-traffic-lib.pl $(CONFIG_ROOT)/net-traffic/net-traffic-lib.pl + cp $(DIR_SRC)/config/cfgroot/net-traffic-admin.pl $(CONFIG_ROOT)/net-traffic/net-traffic-admin.pl + cp $(DIR_SRC)/config/cfgroot/monitorTraffic.pl /usr/local/bin/monitorTraffic.pl cp $(DIR_SRC)/config/cfgroot/nfs-server $(CONFIG_ROOT)/nfs/nfs-server cp $(DIR_SRC)/config/cfgroot/p2protocols $(CONFIG_ROOT)/outgoing/p2protocols cp $(DIR_SRC)/config/outgoingfw/outgoingfw.pl $(CONFIG_ROOT)/outgoing/bin/ @@ -129,6 +131,10 @@ $(TARGET) : # Language files cp $(DIR_SRC)/langs/de/cgi-bin/de.pl $(CONFIG_ROOT)/langs/ cp $(DIR_SRC)/langs/en/cgi-bin/en.pl $(CONFIG_ROOT)/langs/ + + # Copy Net-Traffic Templates + cp $(DIR_SRC)/config/nettraffic/templates/* $(CONFIG_ROOT)/net-traffic/templates/ + touch /var/log/net-traffic.log # Configroot permissions chown -R nobody:nobody $(CONFIG_ROOT) diff --git a/src/misc-progs/Makefile b/src/misc-progs/Makefile index c28fd6a6a9..b134606d06 100644 --- a/src/misc-progs/Makefile +++ b/src/misc-progs/Makefile @@ -7,7 +7,7 @@ PROGS = iowrap SUID_PROGS = setdmzholes setportfw setfilters setxtaccess \ squidctrl restartssh ipfirereboot setaliases \ ipsecctrl timectrl dhcpctrl restartsnort \ - restartapplejuice rebuildhosts \ + monitorTraff restartapplejuice rebuildhosts \ restartsyslogd logwatch openvpnctrl \ restartwireless getipstat qosctrl launch-ether-wake \ redctrl extrahdctrl sambactrl upnpctrl tripwirectrl \ @@ -61,6 +61,9 @@ tripwirectrl: tripwirectrl.c setuid.o ../install+setup/libsmooth/varval.o smartctrl: smartctrl.c setuid.o ../install+setup/libsmooth/varval.o $(COMPILE) -I../install+setup/libsmooth/ smartctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ +monitorTraff: monitorTraff.c setuid.o ../install+setup/libsmooth/varval.o + $(COMPILE) -I../install+setup/libsmooth/ monitorTraff.c setuid.o ../install+setup/libsmooth/varval.o -o $@ + clamavctrl: clamavctrl.c setuid.o ../install+setup/libsmooth/varval.o $(COMPILE) -I../install+setup/libsmooth/ clamavctrl.c setuid.o ../install+setup/libsmooth/varval.o -o $@ diff --git a/src/misc-progs/monitorTraff.c b/src/misc-progs/monitorTraff.c new file mode 100644 index 0000000000..2bb8546b74 --- /dev/null +++ b/src/misc-progs/monitorTraff.c @@ -0,0 +1,70 @@ +/* Addon helper program - monitorTraff + * + * This program is distributed under the terms of the GNU General Public + * Licence. See the file COPYING for details. + * + * Copyright (c) Achim Weber 2 November 2006 + * + * Wrapper for Perl Monitoring script + * + * $Id: monitorTraff.c,v 1.4 2006/11/15 17:53:43 dotzball Exp $ + * + */ + +#include +#include +#include +#include "setuid.h" + +/* define parameters */ +#define PARA_TEST "--testEmail" +#define PARA_WARN "--warnEmail" +#define PARA_FORCE "--force" + +struct keyvalue *kv = NULL; + +void usage() +{ + fprintf (stderr, "Usage:\n"); + fprintf (stderr, "\tmonitorTraff [PARAMETER]\n"); + fprintf (stderr, "\t\tWhen called without parameter, monitorTraff calculates the traffic.\n"); + fprintf (stderr, "\t\tPARAMETER:\n"); + fprintf (stderr, "\t\t\t--testEmail : Send a test email\n"); + fprintf (stderr, "\t\t\t--warnEmail : Send a warn email\n"); + fprintf (stderr, "\t\t\t--force : Force re-calculation\n"); +} + +int main(int argc, char *argv[]) +{ + char buffer[STRING_SIZE]; + + if (!(initsetuid())) + return 1; + + // What should we do? + if (argc==1) + { + // calc traffic + safe_system("/usr/local/bin/monitorTraffic.pl"); + } + else if (argc==2 + && (strcmp(argv[1], PARA_TEST)==0 + || strcmp(argv[1], PARA_WARN)==0 + || strcmp(argv[1], PARA_FORCE)==0) ) + { + // send (test|warn) Email or force re-calc + memset(buffer, 0, STRING_SIZE); + if ( snprintf(buffer, STRING_SIZE - 1, "/usr/local/bin/monitorTraffic.pl %s", argv[1]) >= STRING_SIZE ) + { + fprintf(stderr, "Command too long\n"); + exit(1); + } + safe_system(buffer); + } + else + { + usage(); + } + + return 0; +} -- 2.39.2