$maxbytesin) || ($outbytes < 0) || ($outbytes > $maxbytesout)) { $inbytes = 0; $outbytes = 0; if (file_exists($wandatalastfile)) unlink ($wandatalastfile); } $foundfile = 'null'; if (file_exists($wandataallfile)) $foundfile = $wandataallfile; else { if (file_exists($wandatabackupfile)) $foundfile = $wandatabackupfile; } //if no file is found, create new data, else read file and add to existing data if ($foundfile == 'null') { $wanwritedata = date("Y-m-d").'|'.$inbytes.'|'.$outbytes; } else { //read data file $wandataall = explode("\n", file_get_contents($foundfile)); $n = count($wandataall); //if last line of data date matchs current date, add to totals, else add new line $dataset = explode("|", $wandataall[$n-1]); if ($dataset[0] == date("Y-m-d")) { $dataset[1]=$dataset[1]+$inbytes; $dataset[2]=$dataset[2]+$outbytes; $wandataall[$n-1]=$dataset[0].'|'.$dataset[1].'|'.$dataset[2]; } else { $wandataall[$n] = date("Y-m-d").'|'.$inbytes.'|'.$outbytes; } //number of data entries (days) $n = count($wandataall); //if more than three years worth of data, trim data to 4 years (1460 days) $start = 0; if ($n > 1460) $start = $n - 1460; //generate file data to write for ($i=$start ; $i < ($n-1) ; $i++ ) $wanwritedata = $wanwritedata.$wandataall[$i]."\n"; $wanwritedata = $wanwritedata.$wandataall[$n-1]; } //write data file $fp = fopen($wandataallfile,"w") or die("Error Reading File"); fwrite($fp, $wanwritedata); fclose($fp); } else { if (file_exists($wandatalastfile)) unlink ($wandatalastfile); } } pcntl_signal(SIGTERM, 'sig_handler'); pcntl_signal(SIGINT, 'sig_handler'); pcntl_signal(SIGUSR1, 'sig_handler'); global $config; global $g; global $_MYDAEMON_SHOULD_STOP; global $_MYDAEMON_SHOULD_QUERY; //logging -> yes or no $logging = $config['installedpackages']['ifbwstats']['config'][0]['logging']; if ($logging == 'yes') { global $logfile; $logfile = fopen("/tmp/ifbwstats-daemon.log","a") or die("Error Reading File"); $parentpid = getmypid(); fwrite($logfile, date('Y-m-d H:i:s')." Startup - Parent PID is: ".$parentpid."\n"); } if ($g['platform'] == 'cdrom') { fwrite($logfile, date('Y-m-d H:i:s')." Daemon will not run on CD Rom platform, exiting... \n"); fclose ($logfile); exit (); } if (isLocked()) { if ($logging == 'yes') fwrite($logfile, date('Y-m-d H:i:s')." Daemon is already running, exiting second instance (".getmypid().") \n"); fclose ($logfile); exit (); } // endless loop while (1) { if (isset($_MYDAEMON_SHOULD_STOP) AND $_MYDAEMON_SHOULD_STOP) break; $pidA = pcntl_fork(); if($pidA) { // parent process runs here // wait until the child has finished processing then end the script pcntl_waitpid($pid, $status, WUNTRACED); //calc seconds to midnight $sleeptime = (mktime(23, 59, 55, date ('m, d, Y'))) - time(); //use whichever is less, seconds to midnight or interval, running script just prior to midnight insure accurate daily reporting as standard timing interval could be as great at 50min if (($sleeptime > $config['installedpackages']['ifbwstats']['config'][0]['intervalrun']) || ($sleeptime < 5)) $sleeptime = $config['installedpackages']['ifbwstats']['config'][0]['intervalrun']; if ($logging == 'yes') fwrite($logfile, date('Y-m-d H:i:s')." Parent (".$parentpid.") Sleep for: ".$sleeptime."\n"); for ($i=0; $i<$sleeptime; $i++) { if ((isset($_MYDAEMON_SHOULD_QUERY) AND $_MYDAEMON_SHOULD_QUERY) || (isset($_MYDAEMON_SHOULD_STOP) AND $_MYDAEMON_SHOULD_STOP)) { $_MYDAEMON_SHOULD_QUERY = false; break; } else sleep (1); } } else { //child process runs here if ($logging == 'yes') fwrite($logfile, date('Y-m-d H:i:s')." Child Process ". getmypid(). " Reading Interfaces... (Parent: ".$parentpid.")\n"); if ($config['installedpackages']['ifbwstats']['config'][0]['ifmon'] != 'all') interface_query($config['installedpackages']['ifbwstats']['config'][0]['ifmon']); else { foreach ($config[interfaces] as $if => $value) { interface_query($if); } } exit (0); } } //run query one last time if ($logging == 'yes') fwrite($logfile, date('Y-m-d H:i:s')." Parent Process ". getmypid(). " Reading Interfaces One Last Time... \n"); if ($config['installedpackages']['ifbwstats']['config'][0]['ifmon'] != 'all') interface_query($config['installedpackages']['ifbwstats']['config'][0]['ifmon']); else { foreach ($config[interfaces] as $if => $value) { interface_query($if); } } // backup data files to conf dir on exit if ($g['platform'] != 'pfSense') exec ('/etc/rc.conf_mount_rw'); exec('cp /tmp/ifbwstats-*.data /cf/conf/'); if ($g['platform'] != 'pfSense') exec ('/etc/rc.conf_mount_ro'); if ($logging == 'yes') { fwrite($logfile, date('Y-m-d H:i:s')." Shutdown Parent ".$parentpid." \n"); fclose ($logfile); } if( file_exists( LOCK_FILE ) ) unlink( LOCK_FILE ); exit (0); ?>