diff options
author | jim-p <jimp@pfsense.org> | 2010-10-20 18:37:48 -0400 |
---|---|---|
committer | jim-p <jimp@pfsense.org> | 2010-10-20 18:37:48 -0400 |
commit | 41681e0a817aaabf930357543bde94c838d0c40b (patch) | |
tree | f1279459af96282aab838466c222cc476d4b2eba /config/ifbwstats/ifbwstats.inc | |
parent | ce9654bdb28fe7c6cec42097774e56aa6c4eeb41 (diff) | |
download | pfsense-packages-41681e0a817aaabf930357543bde94c838d0c40b.tar.gz pfsense-packages-41681e0a817aaabf930357543bde94c838d0c40b.tar.bz2 pfsense-packages-41681e0a817aaabf930357543bde94c838d0c40b.zip |
Add contributed ifbwstats package from Zorac on the forum.
Diffstat (limited to 'config/ifbwstats/ifbwstats.inc')
-rw-r--r-- | config/ifbwstats/ifbwstats.inc | 392 |
1 files changed, 392 insertions, 0 deletions
diff --git a/config/ifbwstats/ifbwstats.inc b/config/ifbwstats/ifbwstats.inc new file mode 100644 index 00000000..be07e8cc --- /dev/null +++ b/config/ifbwstats/ifbwstats.inc @@ -0,0 +1,392 @@ +<?php +/* + /usr/local/pkg/ifbwstats.inc + + Contributed - 2010 - Zorac + + cron restart code as identifed below from + /usr/local/pkg/cron.inc + Copyright (C) 2008 Mark J Crane + All rights reserved. + + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. +*/ + +//require_once("/usr/local/www/guiconfig.inc"); + +define( 'LOCK_FILE', "/var/run/ifbwstats.lock" ); + +function ifbwstats_add_cron() +{ + global $config; + + $i = count($config['cron']['item']); + $cif = -1; //cron interval entry + for ($n=0; $n<$i; $n++) + { + //find cron interval run + if ((strstr($config['cron']['item'][$n]['hour'], '*/3')) && (strstr($config['cron']['item'][$n]['command'], 'ifbwstats_daemon.php'))) + { + $cif = $n; + } + } + + //daily restart + if ($cif < 0) //if entry not found, add it + { + $config['cron']['item'][$i]['minute'] = '0'; + $config['cron']['item'][$i]['hour'] = '1'; + $config['cron']['item'][$i]['mday'] = '*'; + $config['cron']['item'][$i]['month'] = '*'; + $config['cron']['item'][$i]['wday'] = '*'; + $config['cron']['item'][$i]['who'] = 'root'; + $config['cron']['item'][$i]['command'] = 'kill -INT `cat /var/run/ifbwstats.lock` ; sleep 5 ; /usr/local/etc/rc.d/ifbwstats.sh start'; + $i++; + } + + //restart cron so changes are running + //----------start insert from /usr/local/pkg/cron.inc---------- + configure_cron(); + $handle = popen("/usr/local/etc/rc.d/cron.sh stop", "r"); + pclose($handle); + $handle = popen("/usr/local/etc/rc.d/cron.sh start", "r"); + pclose($handle); + //----------end insert from /usr/local/pkg/cron.inc---------- + + write_config(); +} + +function ifbwstats_remove_cron() +{ + global $config; + + //find and erase cron entries + $i = count($config['cron']['item']); + for ($n=0; $n<$i; $n++) + { + //find cron interval run + if ((strstr($config['cron']['item'][$n]['hour'], '1')) && (strstr($config['cron']['item'][$n]['command'], 'ifbwstats'))) unset ($config['cron']['item'][$n]); + } + + //restart cron so changes are running + //----------start insert from /usr/local/pkg/cron.inc---------- + configure_cron(); + $handle = popen("/usr/local/etc/rc.d/cron.sh stop", "r"); + pclose($handle); + $handle = popen("/usr/local/etc/rc.d/cron.sh start", "r"); + pclose($handle); + //----------end insert from /usr/local/pkg/cron.inc---------- + + write_config(); +} + +function ifbwstats_set_var() +{ + global $config; + + $config['installedpackages']['ifbwstats']['config'][0]['firstday'] = 1; + $config['installedpackages']['ifbwstats']['config'][0]['intervalrun'] = 280; + $config['installedpackages']['ifbwstats']['config'][0]['logging'] = 'no'; + $config['installedpackages']['ifbwstats']['config'][0]['ifmon'] = 'wan'; + write_config(); +} + +function ifbwstats_remove_var() +{ + global $config; + + unset ($config['installedpackages']['ifbwstats']); + write_config(); +} + +function start_php_script() +{ + $handle = popen("/usr/local/etc/rc.d/ifbwstats.sh start", "r"); + sleep (1); + pclose($handle); +} + +function usr1_php_script() +{ + if( file_exists( LOCK_FILE ) ) + { + //force interface read via daemon + $handle = popen("kill -USR1 `cat /var/run/ifbwstats.lock`", "r"); + //while (!feof($handle)) sleep (1); + sleep (1); + pclose($handle); + } +} + +function kill_php_script() +{ + //if lock file exists, process must be running, therefore kill it and remove lock file + if( file_exists( LOCK_FILE ) ) + { + $handle = popen("kill -INT `cat /var/run/ifbwstats.lock`", "r"); + //while (!feof($handle)) sleep (1); + sleep (1); + pclose($handle); + } +} +/* +function file_put_contents($filename, $data, $file_append = false) +{ + $fp = fopen($filename, (!$file_append ? 'w+' : 'a+')); + if(!$fp) + { + trigger_error('file_put_contents cannot write in file.', E_USER_ERROR); + return; + } + fputs($fp, $data); + fclose($fp); +} +*/ + +function ifbwstats_add_rc() +{ + //add shutdown entry + $fp = fopen('/etc/rc.shutdown',"r") or die("Error Reading File"); + $data = fread($fp, filesize('/etc/rc.shutdown')); + fclose($fp); + $fpdata = explode("\n", $data); + $fpwrite = ''; + $i = count($fpdata); + $fndentry = -1; //found shutdown entry + for ($n=0; $n<$i; $n++) if (strstr($fpdata[$n], '# ifBWStats:')) $fndentry = $n; + if ($fndentry < 0) + { + for ($n=0; $n<$i; $n++) if (strstr($fpdata[$n], 'HOME=/; export HOME')) $fndentry = $n-2; + for ($n=0; $n<$fndentry+1; $n++) $fpwrite .= $fpdata[$n]."\n"; + $fpwrite .= "\n".'# ifBWStats: shut down script'."\n".'kill -INT `cat /var/run/ifbwstats.lock`'."\n".'sleep 1'."\n".'# ifBWStats: remove last reading as some platforms may not erase tmp files'."\n".'rm /tmp/ifbwstats-*.last'."\n"; + for ($n=$fndentry+1; $n<$i-1; $n++) $fpwrite .= $fpdata[$n]."\n"; + $fpwrite .= $fpdata[$i-1]; + $fp = fopen('/etc/rc.shutdown',"w") or die("Error Reading File"); + fwrite($fp, $fpwrite); + fclose($fp); + } + + //add reboot entry + $fp = fopen('/etc/rc.reboot',"r") or die("Error Reading File"); + $data = fread($fp, filesize('/etc/rc.reboot')); + fclose($fp); + $fpdata = explode("\n", $data); + $fpwrite = ''; + $i = count($fpdata); + $fndentry = -1; //found reboot entry + for ($n=0; $n<$i; $n++) if (strstr($fpdata[$n], '# ifBWStats:')) $fndentry = $n; + if ($fndentry < 0) + { + for ($n=0; $n<$i; $n++) if (strstr($fpdata[$n], '# If PLATFORM is pfSense then remove')) $fndentry = $n-2; + for ($n=0; $n<$fndentry+1; $n++) $fpwrite .= $fpdata[$n]."\n"; + $fpwrite .= "\n".'# ifBWStats: shut down script'."\n".'kill -INT `cat /var/run/ifbwstats.lock`'."\n".'sleep 1'."\n".'# ifBWStats: remove last reading as some platforms may not erase tmp files'."\n".'rm /tmp/ifbwstats-*.last'."\n"; + for ($n=$fndentry+1; $n<$i-1; $n++) $fpwrite .= $fpdata[$n]."\n"; + $fpwrite .= $fpdata[$i-1]; + $fp = fopen('/etc/rc.reboot',"w") or die("Error Reading File"); + fwrite($fp, $fpwrite); + fclose($fp); + } + + //add halt entry + $fp = fopen('/etc/rc.halt',"r") or die("Error Reading File"); + $data = fread($fp, filesize('/etc/rc.halt')); + fclose($fp); + $fpdata = explode("\n", $data); + $fpwrite = ''; + $i = count($fpdata); + $fndentry = -1; //found halt entry + for ($n=0; $n<$i; $n++) if (strstr($fpdata[$n], '# ifBWStats:')) $fndentry = $n; + if ($fndentry < 0) + { + for ($n=0; $n<$i; $n++) if (strstr($fpdata[$n], 'sleep 1')) $fndentry = $n-2; + for ($n=0; $n<$fndentry+1; $n++) $fpwrite .= $fpdata[$n]."\n"; + $fpwrite .= "\n".'# ifBWStats: shut down script'."\n".'kill -INT `cat /var/run/ifbwstats.lock`'."\n".'sleep 1'."\n".'# ifBWStats: remove last reading as some platforms may not erase tmp files'."\n".'rm /tmp/ifbwstats-*.last'."\n"; + for ($n=$fndentry+1; $n<$i-1; $n++) $fpwrite .= $fpdata[$n]."\n"; + $fpwrite .= $fpdata[$i-1]; + $fp = fopen('/etc/rc.halt',"w") or die("Error Reading File"); + fwrite($fp, $fpwrite); + fclose($fp); + } +} + +function ifbwstats_remove_rc() +{ + //remove shutdown entry + $fp = fopen('/etc/rc.shutdown',"r") or die("Error Reading File"); + $data = fread($fp, filesize('/etc/rc.shutdown')); + fclose($fp); + $fpdata = explode("\n", $data); + $fpwrite = ''; + $i = count($fpdata); + $fndentry = -1; //found shutdown entry + for ($n=0; $n<$i; $n++) if ((strstr($fpdata[$n], '# ifBWStats:'))&&($fndentry < 0)) $fndentry = $n; + if ($fndentry >= 0) + { + for ($n=0; $n<$fndentry; $n++) $fpwrite .= $fpdata[$n]."\n"; + for ($n=$fndentry+6; $n<$i-1; $n++) $fpwrite .= $fpdata[$n]."\n"; + $fpwrite .= $fpdata[$i-1]; + $fp = fopen('/etc/rc.shutdown',"w") or die("Error Reading File"); + fwrite($fp, $fpwrite); + fclose($fp); + } + + //remove reboot entry + $fp = fopen('/etc/rc.reboot',"r") or die("Error Reading File"); + $data = fread($fp, filesize('/etc/rc.reboot')); + fclose($fp); + $fpdata = explode("\n", $data); + $fpwrite = ''; + $i = count($fpdata); + $fndentry = -1; //found reboot entry + for ($n=0; $n<$i; $n++) if ((strstr($fpdata[$n], '# ifBWStats:'))&&($fndentry < 0)) $fndentry = $n; + if ($fndentry >= 0) + { + for ($n=0; $n<$fndentry; $n++) $fpwrite .= $fpdata[$n]."\n"; + for ($n=$fndentry+6; $n<$i-1; $n++) $fpwrite .= $fpdata[$n]."\n"; + $fpwrite .= $fpdata[$i-1]; + $fp = fopen('/etc/rc.reboot',"w") or die("Error Reading File"); + fwrite($fp, $fpwrite); + fclose($fp); + } + + //remove halt entry + $fp = fopen('/etc/rc.halt',"r") or die("Error Reading File"); + $data = fread($fp, filesize('/etc/rc.halt')); + fclose($fp); + $fpdata = explode("\n", $data); + $fpwrite = ''; + $i = count($fpdata); + $fndentry = -1; //found halt entry + for ($n=0; $n<$i; $n++) if ((strstr($fpdata[$n], '# ifBWStats:'))&&($fndentry < 0)) $fndentry = $n; + if ($fndentry >= 0) + { + for ($n=0; $n<$fndentry; $n++) $fpwrite .= $fpdata[$n]."\n"; + for ($n=$fndentry+6; $n<$i-1; $n++) $fpwrite .= $fpdata[$n]."\n"; + $fpwrite .= $fpdata[$i-1]; + $fp = fopen('/etc/rc.halt',"w") or die("Error Reading File"); + fwrite($fp, $fpwrite); + fclose($fp); + } +} + +function cleanup_data_file ($readfile, $writefile) +{ + //----------------------------------------maintain file incase of errors in the file---------------------------------------- + $wandataall = array(); + $wandataarray = array(); + + //read data file + $fp = fopen($readfile,"r") or die("Error Reading File"); + $data = fread($fp, filesize($readfile)); + fclose($fp); + $wandataall = explode("\n", $data); + $n = count($wandataall); + + //expode data into two dim. array + for ($x=0; $x<$n; $x++) + { + $line = explode('|',$wandataall[$x]); + + // save it by coulmns otherwise it will saved like rows + for ($i=0; $i<=2; $i++) + { + if ($i==0) $wandataarray[$x][$i] = date("Y-m-d", strtotime($line[$i])); + else $wandataarray[$x][$i] = $line[$i]; + } + } + + //sort array into chronological order + sort ($wandataarray); + + $m=$n; + //check for multiple entries, and if so add them + for ($x=0; $x<$n; $x++) + { + if (($wandataarray[$x][0] == $wandataarray[$x+1][0]) && ($x+1<$m)) + { + $wandataarray[$x][1] = $wandataarray[$x][1] + $wandataarray[$x+1][1]; + $wandataarray[$x][2] = $wandataarray[$x][2] + $wandataarray[$x+1][2]; + for ($i = $x+1; $i<$n; $i++) + { + if (!is_null($wandataarray[$i+1][0])) $wandataarray[$i][0]=$wandataarray[$i+1][0]; + if (!is_null($wandataarray[$i+1][1])) $wandataarray[$i][1]=$wandataarray[$i+1][1]; + if (!is_null($wandataarray[$i+1][2])) $wandataarray[$i][2]=$wandataarray[$i+1][2]; + } + $x--; + $m--; + } + } + + //check for missing entries + $nextday=$wandataarray[0][0]; + $x=0; + while ($x<$m) + { + //missing entry between days + if ($nextday != $wandataarray[$x][0]) + { + $m++; + for ($i=$m; $i>$x; $i--) + { + + $wandataarray[$i][0] = $wandataarray[$i-1][0]; + $wandataarray[$i][1] = $wandataarray[$i-1][1]; + $wandataarray[$i][2] = $wandataarray[$i-1][2]; + $wandataarray[$i][3] = $wandataarray[$i-1][3]; + $wandataarray[$i][4] = $wandataarray[$i-1][4]; + } + //fill in 0 bytes transfered for missing days + $wandataarray[$x][0] = $nextday; + $wandataarray[$x][1] = 0; + $wandataarray[$x][2] = 0; + } + $x++; + + //add one day to the date + $nextday = date("Y-m-d", strtotime(date("Y-m-d", strtotime($nextday)) . " +1 day")); + + //echo 'x: '.$x.' m: '.$m.' array date: '.strtotime($wandataarray[$x-1][0]).' current date: '.strtotime(date("Y-m-d")).'<br>'; + //add missing entries at end of file if required + if (($x==$m)&&(strtotime($wandataarray[$x-1][0] ) < strtotime(date("Y-m-d")))) + { + $wandataarray[$x][0] = $nextday; + $wandataarray[$x][1] = 0; + $wandataarray[$x][2] = 0; + $m++; + } + } + + //put array data into variable for wirting + $writedata = ''; + for ($x=0; $x<$m-1; $x++) $writedata .= $wandataarray[$x][0].'|'.$wandataarray[$x][1].'|'.$wandataarray[$x][2]."\n"; + $writedata .= $wandataarray[$m-1][0].'|'.$wandataarray[$m-1][1].'|'.$wandataarray[$m-1][2]; + + //write data file + $fp = fopen($writefile,"w") or die("Error Reading File"); + fwrite($fp, $writedata); + fclose($fp); + //----------------------------------------end of file maintaince---------------------------------------- +} + + +?>
\ No newline at end of file |