<?php require_once("util.inc"); function vnstat_install_deinstall() { conf_mount_rw(); global $config; // Remove Vnstat package and files exec("rm -d -R /usr/local/www/vnstat2"); exec("rm -d -R /usr/local/www/vnstati"); exec("rm -d -R /usr/local/pkg/vnstat2"); exec("rm /usr/local/etc/vnstat.conf"); // Remove vnstat cron entry from config.xml vnstat2_install_cron(false); conf_mount_ro(); } function vnstat2_install_cron($vnstat_cron_value) { global $config; $is_installed = false; if(!$config['cron']['item']) return; $x=0; foreach($config['cron']['item'] as $item) { if(strstr($item['command'], "/usr/local/pkg/vnstat2/vnstat2.sh")) { $is_installed = true; break; } $x++; } switch($vnstat_cron_value) { case true: if(!$is_installed) { $cron_item = array(); $cron_item['minute'] = "*/1"; $cron_item['hour'] = "*"; $cron_item['mday'] = "*"; $cron_item['month'] = "*"; $cron_item['wday'] = "*"; $cron_item['who'] = "root"; $cron_item['command'] = "/usr/local/pkg/vnstat2/vnstat2.sh"; $config['cron']['item'][] = $cron_item; write_config(); configure_cron(); } break; case false: if($is_installed == true) { if($x > 0) { unset($config['cron']['item'][$x]); write_config(); } configure_cron(); } break; } } function change_vnstat_conf(){ conf_mount_rw(); global $config; $config['installedpackages']['vnstat2']['config'][0]['monthrotate'] = $_POST['monthrotate']; $config['installedpackages']['vnstat2']['config'][0]['vnstat_phpfrontend'] = $_POST['vnstat_phpfrontend']; write_conf_f(); write_config(); $no_vnstat_phpfrontend = $config['installedpackages']['vnstat2']['config'][0]['vnstat_phpfrontend']; if ($no_vnstat_phpfrontend == "on"){ vnstat_php_frontend(); } else { exec("[ -d /usr/local/www/vnstat2 ] && rm -d -R /usr/local/www/vnstat2"); } conf_mount_ro(); } function write_conf_f(){ global $config; $monthrotate = $config['installedpackages']['vnstat2']['config'][0]['monthrotate']; // ************ Write new vnstat.conf ***************** $vnstat_conf_file = <<<EOF # vnStat 1.10 config file ## # location of the database directory DatabaseDir "/conf/vnstat" # on which day should months change MonthRotate $monthrotate # vnstati ## # image colors CBackground "F0F0F0" CEdge "AEAEAE" CHeader "990000" CHeaderTitle "F0F0F0" CHeaderDate "FFFFFF" CText "000000" CLine "B0B0B0" CLineL "-" CRx "666666" CTx "990000" CRxD "-" CTxD "-" EOF; $hf2 = fopen("/usr/local/etc/vnstat.conf","w"); if(!$hf2) { log_error("could not open /usr/local/etc/vnstat.conf for writing"); exit; } fwrite($hf2, $vnstat_conf_file); fclose($hf2); vnstat_link_config(); vnstat_create_nic_dbs(); } function create_vnstati_image() { conf_mount_rw(); global $config; $vnstat_tmp = "/tmp/vnstat"; $iface = $_POST['vnstat_interface']; $ifaces_final = convert_friendly_interface_to_real_interface_name($iface); $config['installedpackages']['vnstat2']['config'][0]['vnstat_interface'] = $ifaces_final; @mkdir($vnstat_tmp); exec("/usr/local/bin/vnstati -i ". escapeshellarg($ifaces_final) ." -vs -o {$vnstat_tmp}/newpicture1.png"); exec("/usr/local/bin/vnstati -i ". escapeshellarg($ifaces_final) ." -m -o {$vnstat_tmp}/newpicture2.png"); exec("/usr/local/bin/vnstati -i ". escapeshellarg($ifaces_final) ." -d -o {$vnstat_tmp}/newpicture3.png"); exec("/usr/local/bin/vnstati -i ". escapeshellarg($ifaces_final) ." -t -o {$vnstat_tmp}/newpicture4.png"); write_config(); conf_mount_ro(); } function create_vnstat_output() { conf_mount_rw(); global $config; $iface2 = $_POST['vnstat_interface2']; $ifaces_final2 = convert_friendly_interface_to_real_interface_name($iface2); $config['installedpackages']['vnstat2']['config'][0]['vnstat_interface2'] = $ifaces_final2; write_config(); conf_mount_ro(); } function vnstat_link_config() { // Check for pbi install and arch type then create symlinks if (file_exists('/usr/pbi/vnstat-' . php_uname("m"))) { $conf_path = "/usr/local/etc/vnstat.conf"; $pbi_conf_path = "/usr/pbi/vnstat-" . php_uname("m") . "/etc/vnstat.conf"; unlink_if_exists($pbi_conf_path); symlink($conf_path, $pbi_conf_path); } } function vnstat_create_nic_dbs() { global $config; conf_mount_rw(); $vnstat_db_prefix = "/conf/vnstat"; @mkdir($vnstat_db_prefix); // Locate NICs and create associated databases $array_of_real_nic_names = array(); $array_of_custom_nic_names = array(); $ifdescrs = array('wan' => 'WAN', 'lan' => 'LAN'); for ($j = 1; isset($config['interfaces']['opt' . $j]); $j++) { $ifdescrs['opt' . $j] = $config['interfaces']['opt' . $j]['descr']; } foreach ($ifdescrs as $ifdescr => $ifname) { $real_nic_names = convert_friendly_interface_to_real_interface_name($ifdescr); array_push($array_of_real_nic_names, $real_nic_names); } $vnstat_nic = array_map('basename', glob($vnstat_db_prefix . '/*', GLOB_ONLYDIR)); // Compare real NICs with NICs assigned to vnstat $leftovers = array_diff($array_of_real_nic_names, $vnstat_nic); // Create database for each NIC foreach ($leftovers as $nic) { exec("/usr/local/bin/vnstat -u -i ". escapeshellarg($nic)); } conf_mount_ro(); } function vnstat_install_config() { $vnstat_db_prefix = "/conf/vnstat"; conf_mount_rw(); // Create vnstat database dir where it also will work for nanobsd if (is_dir("/usr/local/pkg/vnstat2/vnstat")) { @rename("/usr/local/pkg/vnstat2/vnstat", $vnstat_db_prefix); } if (!is_dir($vnstat_db_prefix)) { @mkdir($vnstat_db_prefix); } vnstat_link_config(); // Add MonthRotate value to config.xml and write /usr/local/etc/vnstat.conf $no_monthrotate = $config['installedpackages']['vnstat2']['config'][0]['monthrotate']; if ($no_monthrotate == ""){ $config['installedpackages']['vnstat2']['config'][0]['monthrotate'] = "1"; } $no_vnstat_phpfrontend = $config['installedpackages']['vnstat2']['config'][0]['vnstat_phpfrontend']; if ($no_vnstat_phpfrontend == "on"){ vnstat_php_frontend(); } write_conf_f(); // Add cron job to config.xml vnstat2_install_cron(true); vnstat_create_nic_dbs(); write_config(); conf_mount_ro(); } function vnstat_php_frontend(){ global $config; // Copy vnstat_php_frontend to www exec("cp -a /usr/local/pkg/vnstat2/vnstat_php_frontend/. /usr/local/www/vnstat2/"); // Find information to be writing in config.php // $iface_list_array_items exec("ls /conf/vnstat/ | grep -v '\.'", $vnstat_nic_in); $iface_list_array_items = implode("', '", $vnstat_nic_in); $iface_list_array = "\$iface_list = array('$iface_list_array_items');"; // $iface_title_array_items $iface_title_array_items = array(); $iface_title_array_items2 = array(); foreach ($vnstat_nic_in as $vnstat_nic_out) { $ifdescrs = array('wan' => 'WAN', 'lan' => 'LAN'); for ($j = 1; isset($config['interfaces']['opt' . $j]); $j++) { $ifdescrs['opt' . $j] = $config['interfaces']['opt' . $j]['descr']; } foreach ($ifdescrs as $ifdescr => $ifname): $real_nic_names3 = get_real_interface($ifdescr); If ($real_nic_names3 == $vnstat_nic_out) { $ifname_out = convert_friendly_interface_to_friendly_descr($ifdescr); $iface_title_array_items = "\$iface_title['$vnstat_nic_out'] = '$ifname_out';\n"; array_push($iface_title_array_items2, $iface_title_array_items); } endforeach; } $iface_title_array = implode($iface_title_array_items2); // php in php static items // added to new items for the front end version 1.5.1 $locale = "\$locale = 'en_US.UTF-8';"; $language = "\$language = 'en';"; $vnstat_bin2 = "\$vnstat_bin = '/usr/local/bin/vnstat';"; $data_dir2 = "\$data_dir = './dumps';"; $graph_format2 ="\$graph_format='svg';"; $colorscheme2 = "\$colorscheme['light'] = array("; $colorscheme3 = "\$colorscheme['red'] = array("; $colorscheme4 = "\$colorscheme['pfSense'] = array("; // ************ Write new config.php ****************** $config_file = <<<EOF <?php // // vnStat PHP frontend 1.5.1 (c)2006-2008 Bjorge Dijkstra (bjd@jooz.net) // // 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // // see file COPYING or at http://www.gnu.org/licenses/gpl.html // for more information. // //error_reporting(E_ALL | E_NOTICE); // // configuration parameters // // edit these to reflect your particular situation // $locale $language // list of network interfaces monitored by vnStat $iface_list_array // // optional names for interfaces // if there's no name set for an interface then the interface identifier // will be displayed instead $iface_title_array // // There are two possible sources for vnstat data. If the // variable is set then vnstat is called directly from the PHP script // to get the interface data. // // The other option is to periodically dump the vnstat interface data to // a file (e.g. by a cronjob). In that case the variable // must be cleared and set to the location where the dumps // are stored. Dumps must be named 'vnstat_dump_'. // // You can generate vnstat dumps with the command: // vnstat --dumpdb -i > /path/to/data_dir/vnstat_dump_ // $vnstat_bin2 $data_dir2 // graphics format to use: svg or png $graph_format2 // Font to use for PNG graphs define('GRAPH_FONT',dirname(__FILE__).'/VeraBd.ttf'); // Font to use for SVG graphs define('SVG_FONT', 'Verdana'); // color schemes // colors are defined as R,G,B,ALPHA quads where R, G and B range from 0-255 // and ALPHA from 0-127 where 0 is opaque and 127 completely transparent. // define('DEFAULT_COLORSCHEME', 'pfSense'); ?> EOF; $hf = fopen("/usr/local/www/vnstat2/config.php","w"); if(!$hf) { log_error("could not open /usr/local/www/vnstat2/config.php for writing"); exit; } fwrite($hf, $config_file); fclose($hf); } ?>