From 55b5367d76e32ce26f284913ae95f6bf17b97172 Mon Sep 17 00:00:00 2001 From: Robert Anderson <randerson@lbsd.net> Date: Fri, 27 Mar 2009 11:16:53 +0000 Subject: [PATCH] added search for logs using timestamp --- webui/user-logs.php | 240 ++++++++++++++++++++++++++++++++------------ 1 file changed, 177 insertions(+), 63 deletions(-) diff --git a/webui/user-logs.php b/webui/user-logs.php index 8b4628b4..7c7f8c95 100644 --- a/webui/user-logs.php +++ b/webui/user-logs.php @@ -32,62 +32,179 @@ printHeader(array( ), )); + + ?> <p class="pageheader">User Log</p> - -<form id="main_form" action="user-attributes.php" method="post"> - -<p /> - - <table class="results" style="width: 75%;"> - <tr class="resultstitle"> - <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">ActAuthentic</td> - <td class="textcenter">EventTimestamp</td> - <td class="textcenter">NASIdentifier</td> - <td class="textcenter">NASIPAddress</td> - <td class="textcenter">AcctDelayTime</td> - <td class="textcenter">AcctSessionTime</td> - <td class="textcenter">AcctInputOctets</td> - <td class="textcenter">AcctInputGigawords</td> - <td class="textcenter">AcctInputPackets</td> - <td class="textcenter">AcctOutputOctets</td> - <td class="textcenter">AcctOutputGigawords</td> - <td class="textcenter">AcctOutputPackets</td> - <td class="textcenter">AcctStatusType</td> - <td class="textcenter">AcctTerminateCause</td> - </tr> <?php - if (isset($_POST['user_id'])) { +if (isset($_POST['user_id'])) { - # Fetch username from id supplied + # 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; - $sql = "SELECT ServiceType, FramedProtocol, NASPort, NASPortType, CallingStationID, CalledStationID, NASPortID, AcctSessionID, FramedIPAddress, AcctAuthentic, EventTimestamp, NASIdentifier, NASIPAddress, AcctDelayTime, AcctSessionTime, AcctInputOctets, AcctInputGigawords, AcctInputPackets, AcctOutputOctets, AcctOutputGigawords, AcctOutputPackets, AcctStatusType, AcctTerminateCause FROM ${DB_TABLE_PREFIX}accounting WHERE Username = '$getuser'"; - $res = $db->query($sql); +?> + <form id="main_form" action="user-logs.php" method="post"> + <!-- Search things --> + <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']); + } - $rownums = 0; - while ($row = $res->fetchObject()) { - if ($row->framedipaddress != NULL) { - $rownums = $rownums + 1; - } else { - $rownums = $rownums - 1; + # 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); + + $rownums = 0; + while ($row = $res->fetchObject()) { + + if ($row->eventtimestamp != NULL) { + $rownums = $rownums + 1; + } else { + $rownums = $rownums - 1; + } + + # Data usage + # ========== + + # Input + $inputData = 0; + + if (!empty($row->acctinputoctets) && $row->acctinputoctets > 0) { + $inputData = ($row->accinputoctets / 1024 / 1024); + } + if (!empty($row->acctinputgigawords) && $row->inputgigawords > 0) { + $inputData = ($row->acctinputgigawords * 4096); + } + if ($inputData != 0) { + $inputDataDisplay = ceil($inputData * 100)/100; + } else { + $inputDataDisplay = 0; + } + + $totalInputData = $totalInputData + $inputData; + + # Output + $outputData = 0; + + if (!empty($row->acctoutputoctets) && $row->acctoutputoctets > 0) { + $outputData = ($row->acctoutputoctets / 1024 / 1024); + } + if (!empty($row->acctoutputgigawords) && $row->acctoutputgigawords > 0) { + $outputData = ($row->acctoutputgigawords * 4096); + } + if ($outputData != 0) { + $outputDataDisplay = ceil($outputData * 100)/100; + } else { + $outputDataDisplay = 0; + } + + $totalOutputData = $totalOutputData + $outputData; + ?> <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> @@ -98,44 +215,41 @@ printHeader(array( <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->eventtimestamp ?></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 $row->acctsessiontime ?></td> - <td class="textcenter"><?php echo $row->acctinputoctets ?></td> - <td class="textcenter"><?php echo $row->acctinputgigawords ?></td> - <td class="textcenter"><?php echo $row->acctinputpackets ?></td> - <td class="textcenter"><?php echo $row->acctoutputoctets ?></td> - <td class="textcenter"><?php echo $row->acctoutputgigawords ?></td> - <td class="textcenter"><?php echo $row->acctoutputpackets ?></td> + <td class="textcenter"><?php echo $inputDataDisplay ?> Mbytes</td> + <td class="textcenter"><?php echo $outputDataDisplay ?> Mbytes</td> <td class="textcenter"><?php echo $row->acctstatustype ?></td> <td class="textcenter"><?php echo $row->acctterminatecause ?></td> </tr> <?php - } - $res->closeCursor(); - if ($rownums <= 0) { + } + $res->closeCursor(); + + if ($rownums <= 0) { ?> - <p /> <tr> <td colspan="23" class="textcenter">No logs found for user: <?php echo $getuser ?></td> </tr> <?php - } - unset($rownums); - } else { + } + unset($rownums); + + +} else { ?> - <tr class="resultitem"> - <td colspan="5" class="textcenter">No User ID selected</td> - </tr> + <tr> + <td class="warning">No user ID selected</td> + </tr> <?php - } +} + + ?> - </table> -</form> + </table> <?php - printFooter(); -- GitLab