From 6807b3a3ba5d0ad413141c2d6ac2603c94ab5b1c Mon Sep 17 00:00:00 2001 From: Robert Anderson <randerson@lbsd.net> Date: Mon, 6 Apr 2009 09:49:33 +0000 Subject: [PATCH] Added view for wisp user logs --- webui/wisp-user-logs.php | 313 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 313 insertions(+) create mode 100644 webui/wisp-user-logs.php diff --git a/webui/wisp-user-logs.php b/webui/wisp-user-logs.php new file mode 100644 index 00000000..1b349773 --- /dev/null +++ b/webui/wisp-user-logs.php @@ -0,0 +1,313 @@ +<?php +# Module: Policy delete +# Copyright (C) 2008, LinuxRulz +# +# 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., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + + +include_once("includes/header.php"); +include_once("includes/footer.php"); +include_once("includes/db.php"); +include("includes/radiuscodes.php"); + +$db = connect_db(); + + +printHeader(array( + "Tabs" => array( + "Back to user list" => "wisp-user-list.php" + ), +)); + + + +?> + +<p class="pageheader">WiSP User Log</p> + +<?php + +if (isset($_POST['user_id'])) { + + # Which user in the accounting table should we look for? + $stmt = $db->prepare("SELECT Username FROM ${DB_TABLE_PREFIX}users WHERE ID = ?"); + $stmt->execute(array($_POST['user_id'])); + $row = $stmt->fetchObject(); + $stmt->closeCursor(); + $getuser = $row->username; + +?> + + <form id="main_form" action="wisp-user-logs.php" method="post"> + <!-- User input from and to dates --> + <div> + <table> + <tr> + <td>From (yyyy-mm-dd)</td> + </tr> + <tr> + <td><input type="text" name="date_from" /></td> + </tr> + <tr> + <td>To (yyyy-mm-dd)</td> + </tr> + <tr> + <td><input type="text" name="date_to" /></td> + </tr> + <tr> + <input type="hidden" name="user_id" value=<?php echo $_POST['user_id']; ?> /> + <td><input type="submit" value="Get results" /></td> + </tr> + </table> + </div> + </form> + + <p /> + + <!-- Tables headings --> + <table class="results" style="width: 75%;"> + <tr class="resultstitle"> + <td class="textcenter">EventTimestamp</td> + <td class="textcenter">ServiceType</td> + <td class="textcenter">FramedProtocol</td> + <td class="textcenter">NASPort</td> + <td class="textcenter">NASPortType</td> + <td class="textcenter">CallingSationID</td> + <td class="textcenter">CalledStationID</td> + <td class="textcenter">NASPortID</td> + <td class="textcenter">AcctSessionID</td> + <td class="textcenter">FramedIPAddress</td> + <td class="textcenter">AcctAuthentic</td> + <td class="textcenter">NASIdentifier</td> + <td class="textcenter">NASIPAddress</td> + <td class="textcenter">AcctDelayTime</td> + <td class="textcenter">AcctSessionTime</td> + <td class="textcenter">Data-Input</td> + <td class="textcenter">Data-Output</td> + <td class="textcenter">AcctStatusType</td> + <td class="textcenter">AcctTerminateCause</td> + </tr> + +<?php + + # Extra SQL + $extraSQL = ""; + $extraSQLVals = array(); + $limitSQL = ""; + + # Do we have a from date?, if so add it to our query + if (isset($_POST['date_from'])) { + $extraSQL .= " AND EventTimestamp >= ?"; + array_push($extraSQLVals,$_POST['date_from']); + } + # Do we have a from date?, if so add it to our query + if (isset($_POST['date_to'])) { + $extraSQL .= " AND EventTimestamp <= ?"; + array_push($extraSQLVals,$_POST['date_to']); + } + + # Modify if we had a partial search or no search + if (count($extraSQLVals) < 2) { + $limitSQL = "LIMIT 50"; + } + + # Query to get all default data + $sql = " + SELECT + EventTimestamp, + ServiceType, + FramedProtocol, + NASPort, + NASPortType, + CallingStationID, + CalledStationID, + NASPortID, + AcctSessionID, + FramedIPAddress, + AcctAuthentic, + NASIdentifier, + NASIPAddress, + AcctDelayTime, + AcctSessionTime, + AcctInputOctets, + AcctInputGigawords, + AcctOutputOctets, + AcctOutputGigawords, + AcctStatusType, + AcctTerminateCause + FROM + ${DB_TABLE_PREFIX}accounting + WHERE + Username = '$getuser' + $extraSQL + ORDER BY + EventTimestamp + DESC + $limitSQL + "; + + $res = $db->prepare($sql); + $res->execute($extraSQLVals); + + $totalInputData = 0; + $totalOutputData = 0; + $totalSessionTime = 0; + $rownums = 0; + + while ($row = $res->fetchObject()) { + + if ($row->eventtimestamp != NULL) { + $rownums = $rownums + 1; + } else { + $rownums = $rownums - 1; + } + + # Data usage + # ========== + + # Input + $inputDataItem = 0; + + if (!empty($row->acctinputoctets) && $row->acctinputoctets > 0) { + $inputDataItem = ($row->accinputoctets / 1024 / 1024); + } + if (!empty($row->acctinputgigawords) && $row->inputgigawords > 0) { + $inputDataItem = ($row->acctinputgigawords * 4096); + } + if ($inputDataItem != 0) { + $inputDataItemDisplay = ceil($inputDataItem * 100)/100; + } else { + $inputDataItemDisplay = 0; + } + + $totalInputData = $totalInputData + $inputDataItem; + + # Output + $outputDataItem = 0; + + if (!empty($row->acctoutputoctets) && $row->acctoutputoctets > 0) { + $outputDataItem = ($row->acctoutputoctets / 1024 / 1024); + } + if (!empty($row->acctoutputgigawords) && $row->acctoutputgigawords > 0) { + $outputDataItem = ($row->acctoutputgigawords * 4096); + } + if ($outputDataItem != 0) { + $outputDataItem = ceil($outputDataItem * 100)/100; + } else { + $outputDataItem = 0; + } + + $totalOutputData = $totalOutputData + $outputDataItem; + + # Add up time + if (!empty($row->acctsessiontime) && $row->acctsessiontime > 0) { + $sessionTimeItem = $row->acctsessiontime / 60; + $sessionTimeItem = ceil($sessionTimeItem * 100)/100; + } + + $totalSessionTime = $totalSessionTime + $sessionTimeItem; + $totalSessionTime = ceil($totalSessionTime * 100)/100; + +?> + + <tr class="resultsitem"> + <td class="textcenter"><?php echo $row->eventtimestamp; ?></td> + <td class="textcenter"><?php echo $row->servicetype; ?></td> + <td class="textcenter"><?php echo $row->framedprotocol; ?></td> + <td class="textcenter"><?php echo $row->nasport; ?></td> + <td class="textcenter"><?php echo $row->nasporttype; ?></td> + <td class="textcenter"><?php echo $row->callingstationid; ?></td> + <td class="textcenter"><?php echo $row->calledstationid; ?></td> + <td class="textcenter"><?php echo $row->nasportid; ?></td> + <td class="textcenter"><?php echo $row->acctsessionid; ?></td> + <td class="textcenter"><?php echo $row->framedipaddress; ?></td> + <td class="textcenter"><?php echo $row->acctauthentic; ?></td> + <td class="textcenter"><?php echo $row->nasidentifier; ?></td> + <td class="textcenter"><?php echo $row->nasipaddress; ?></td> + <td class="textcenter"><?php echo $row->acctdelaytime; ?></td> + <td class="textcenter"><?php echo $sessionTimeItem; ?> Min</td> + <td class="textcenter"><?php echo $inputDataItem; ?> MB</td> + <td class="textcenter"><?php echo $outputDataItem; ?> MB</td> + <td class="textcenter"><?php echo $row->acctstatustype; ?></td> + <td class="textcenter"><?php echo strRadiusTermCode($row->acctterminatecause); ?></td> + </tr> + +<?php + + } + $res->closeCursor(); + + if ($rownums <= 0) { + +?> + + <tr> + <td colspan="23" class="textcenter">No logs found for user: <?php echo $getuser ?></td> + </tr> + +<?php + + } else { + +?> + + <tr class="resultsitem"> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter"></td> + <td class="textcenter" style="font-weight: bold;"><? echo $totalSessionTime ?> Min</td> + <td class="textcenter" style="font-weight: bold;"><? echo $totalInputData ?> MB</td> + <td class="textcenter" style="font-weight: bold;"><? echo $totalOutputData ?> MB</td> + <td class="textcenter"></td> + <td class="textcenter"></td> + </tr> + +<?php + + } +?> + </table> +<?php + +} else { + +?> + <div class="warning">No user selected</div> +<?php + +} + +?> + + +<?php + +printFooter(); + + +# vim: ts=4 +?> -- GitLab