summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgnhb <gnoahb@gmail.com>2010-04-10 22:07:48 +0700
committergnhb <gnoahb@gmail.com>2010-04-10 22:07:48 +0700
commit632921995c58c6dadced140ca4f2aed2932e3b74 (patch)
tree5636313589460fcc625b7fa9ecb86ab51737fb0b
parent73ee49f20460fe724258153aabcd61be8bc4f52f (diff)
downloadpfsense-632921995c58c6dadced140ca4f2aed2932e3b74.zip
pfsense-632921995c58c6dadced140ca4f2aed2932e3b74.tar.gz
Implement reporting and logging of historical PPP uptime with data persistent through reboot.
Also, change the way uptime is captured. The mpd console is no longer used to get PPP uptime data, which will prevent spamming of PPP logs with console access messages. This means we no longer have to write out mpd_<interface>.query files to /var/etc. Now, a simple calculation of the age of the /tmp/<interface>up file is used. This gives the same data within the second as the console data so it seems acceptable. I removed some "rm -f" calls from ppp-linkdown as there was already code in interfaces.inc interface_bring_down function that unlinks the <interface>up and <interface>_router files. There is still the rm -r nameserver_<interface> call in the linkdown script. Maybe this should be moved to the interfac_bring_down function for consistency? Also, I commented out the ngctl shutdown <interface>: call. I think it's probably not necessary any more.
-rw-r--r--etc/inc/interfaces.inc19
-rw-r--r--etc/inc/pfsense-utils.inc61
-rwxr-xr-xusr/local/sbin/ppp-linkdown11
-rw-r--r--usr/local/sbin/ppp-log-uptime.sh5
-rw-r--r--usr/local/sbin/ppp-uptime.sh3
5 files changed, 36 insertions, 63 deletions
diff --git a/etc/inc/interfaces.inc b/etc/inc/interfaces.inc
index 9dc9f9b..8bf674f 100644
--- a/etc/inc/interfaces.inc
+++ b/etc/inc/interfaces.inc
@@ -1033,25 +1033,6 @@ EOD;
fwrite($fd, $mpdconf);
fclose($fd);
- $fdlnkq = fopen("{$g['varetc_path']}/mpd_{$interface}.query", "w");
- if (!$fdlnkq) {
- /* NOTE: It is not fatal if we cannot write the query.") */
- log_error("Error: cannot open mpd_{$interface}.query in interface_ppp_configure().\n");
- } else {
- $linkquery = <<<EOD
-admin
-pfsense
-link lnk{$interface}
-show iface
-exit
-
-EOD;
-
- // Write out linkquery file for each configured PPP interface.
- fwrite($fdlnkq, $linkquery);
- fclose($fdlnkq);
- }
-
// Launch specified ppp instance
if (file_exists("{$ppp['port']}")) {
/* fire up mpd */
diff --git a/etc/inc/pfsense-utils.inc b/etc/inc/pfsense-utils.inc
index 7a27a81..9be78e8 100644
--- a/etc/inc/pfsense-utils.inc
+++ b/etc/inc/pfsense-utils.inc
@@ -1141,43 +1141,8 @@ function is_dhcp_server_enabled()
return $dhcpdenable;
}
-/* Compute the total uptime from the ppp uptime log file in the conf directory */
-/* Written by: gnoahb@gmail.com */
-
-function get_ppp_uptime($serialport){
- if (file_exists("/conf/ppp-up.".$serialport . ".log")){
- $saved_time = file_get_contents("/conf/ppp-up." . $serialport . ".log");
- $uptime_data = explode("\n",$saved_time);
- $sec=0;
- $min=0;
- $hrs=0;
- foreach($uptime_data as $upt) {
- $time = substr($upt, 1 + strpos($upt, " "));
- if ($time != "00:00:00"){
- $hms = explode(":",$time);
- $hrs += $hms[0];
- $min += $hms[1];
- $sec += $hms[2];
- }
- }
- if ($sec != 0){
- $min += floor($sec/60);
- $sec %= 60;
- }
- if($min !=0){
- $hrs += floor($min/60);
- $min %= 60;
- }
- $total_time = $hrs.":".$min.":".$sec;
- return $total_time;
-
- } else {
- $total_time = "No session history data found!";
- return $total_time;
- }
-}
-
function convert_seconds_to_hms($sec){
+ $min=$hrs=0;
if ($sec != 0){
$min = floor($sec/60);
$sec %= 60;
@@ -1196,6 +1161,25 @@ function convert_seconds_to_hms($sec){
return $result;
}
+/* Compute the total uptime from the ppp uptime log file in the conf directory */
+/* Written by: gnoahb@gmail.com */
+
+function get_ppp_uptime($port){
+ if (file_exists("/conf/{$port}.log")){
+ $saved_time = file_get_contents("/conf/{$port}.log");
+ $uptime_data = explode("\n",$saved_time);
+ $sec=0;
+ $min=0;
+ $hrs=0;
+ foreach($uptime_data as $upt) {
+ $sec += substr($upt, 1 + strpos($upt, " "));
+ }
+ return convert_seconds_to_hms($sec);
+ } else {
+ $total_time = "No session history data found!";
+ return $total_time;
+ }
+}
//returns interface information
function get_interface_info($ifdescr) {
@@ -1329,8 +1313,7 @@ function get_interface_info($ifdescr) {
if (file_exists("/dev/{$dev}")) {
if (file_exists("{$g['varrun_path']}/ppp_{$if}.pid") && file_exists("{$g['varetc_path']}/mpd_{$if}.query")) {
$ifinfo['pppinfo'] = "{$ifinfo['if']}";
- $pppid = substr($ifinfo['if'], 3);
- $sec = trim(`/usr/bin/nc 127.0.0.1 500{$pppid} < {$g['varetc_path']}/mpd_{$if}.query | grep 'Session time' | cut -f7 -d ' '`);
+ $sec = trim(`/usr/local/sbin/ppp-uptime.sh {$ifinfo['if']}`);
$ifinfo['ppp_uptime'] = convert_seconds_to_hms($sec);
}
} else {
@@ -1338,7 +1321,7 @@ function get_interface_info($ifdescr) {
$ifinfo['pppinfo'] = $dev . " device not present! Is the modem attached to the system?";
}
// Calculate cumulative uptime for PPP link. Useful for connections that have per minute/hour contracts so you don't go over!
- $ifinfo['ppp_uptime_accumulated'] = get_ppp_uptime($dev);
+ $ifinfo['ppp_uptime_accumulated'] = get_ppp_uptime($ifinfo['if']);
break;
default:
diff --git a/usr/local/sbin/ppp-linkdown b/usr/local/sbin/ppp-linkdown
index 83d1790..420216f 100755
--- a/usr/local/sbin/ppp-linkdown
+++ b/usr/local/sbin/ppp-linkdown
@@ -1,7 +1,8 @@
#!/bin/sh
-
+if [ -f /tmp/$1up ] && [ -f /conf/$1.log ]; then
+ seconds=$((`date -j +%s` - `/usr/bin/stat -f %m /tmp/$1up`))
+ /usr/local/sbin/ppp-log-uptime.sh $seconds $1 &
+fi
# delete the node just in case mpd cannot do that
-/usr/sbin/ngctl shutdown $1:
-/bin/rm -f /var/etc/nameserver_$1
-/bin/rm -f /tmp/$1_router
-/bin/rm -f /tmp/$1up
+#/usr/sbin/ngctl shutdown $1:
+/bin/rm -f /var/etc/nameserver_$1 \ No newline at end of file
diff --git a/usr/local/sbin/ppp-log-uptime.sh b/usr/local/sbin/ppp-log-uptime.sh
new file mode 100644
index 0000000..6fd8def
--- /dev/null
+++ b/usr/local/sbin/ppp-log-uptime.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+#write the uptime in seconds to the persistent log in /conf/
+/etc/rc.conf_mount_rw
+/bin/echo `date -j +%Y.%m.%d-%H:%M:%S` $1 >> /conf/$2.log
+/etc/rc.conf_mount_ro
diff --git a/usr/local/sbin/ppp-uptime.sh b/usr/local/sbin/ppp-uptime.sh
new file mode 100644
index 0000000..d7a8441
--- /dev/null
+++ b/usr/local/sbin/ppp-uptime.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+#get ppp uptime from age of /tmp/{interface}up file
+[ -f /tmp/$1up ] && /bin/echo $((`date -j +%s` - `/usr/bin/stat -f %m /tmp/$1up`)) \ No newline at end of file
OpenPOWER on IntegriCloud