Mercurial > hg > freeDiameter
diff contrib/app_acct_tools/display_results.php @ 533:4cdf146f11d5
Added a set of example PHP scripts to parse the app_acct.fdx data.
author | Sebastien Decugis <sdecugis@nict.go.jp> |
---|---|
date | Tue, 07 Sep 2010 16:57:48 +0900 |
parents | |
children | ce3cacbbccc9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/app_acct_tools/display_results.php Tue Sep 07 16:57:48 2010 +0900 @@ -0,0 +1,141 @@ +<?php + +# The copyright of this file is the same as the freeDiameter project. Licence is BSD. + +# This file should no be called directly; +# instead it should be included from another script that sets its parameters as described bellow. + +## $USERS +# An array of the user names to display; the empty array will display all users. +# This parameter MUST be set. +if (!isset($USERS)) + die('Do not call this file directly'); + +## $START_TIME: +# If set, this restricts the displayed data to sessions starting after $START + +## $END_TIME: +# If set, this restricts the displayed data to sessions starting before $END + +## $LIMIT: +## $LIMIT_OFFSET: +# If set, these limit the number of accounting records displayed (for pagination purpose) + +#------------------------------------------------------------------------------------------ +# DATABASE: + +/* The Connection String used to access that database: + Example: "host=localhost dbname=app_acct user=freediameter password=foo" */ +$CONNSTR=""; + +/* The name of the table containing the processed data (from process_records.php script) */ +$PROCESSED="processed"; + +#------------------------------------------------------------------------------------------ + + +/* Connect to the database */ +$dbconn = pg_connect($CONNSTR) + or die('Could not connect: ' . pg_last_error() . "\n"); + +/* Function to format download size (from php.net) */ +function human_readable( $size ) +{ + $count = 0; + $format = array("B","KB","MB","GB","TB","PB","EB","ZB","YB"); + while(($size/1024)>1 && $count<8) + { + $size=$size/1024; + $count++; + } + if( $size >= 100 ) $decimals = 0; + elseif ($size >= 10 ) $decimals = 1; + else $decimals = 2; + $return = number_format($size,$decimals,'.',' ')." ".$format[$count]; + return $return; +} + +/* Build the SQL query */ +$sql = 'SELECT *, to_char(sess_start, \'YYYY-MM-DD HH24:MI:SS (TZ)\') as fmt_sess_start FROM "'.$PROCESSED.'"'; +$where=0; +if ($USERS) { + $USERS = array_map(pg_escape_bytea, $USERS); + $sql .= " WHERE user_name IN ('". join("', '", array_values($USERS))."') "; + $where = 1; +} + +if ($START_TIME) { + $START_TIME = pg_escape_string($START_TIME); + if ($where++) + $sql .= " AND "; + else + $sql .= " WHERE "; + $sql .= "sess_start >= '".$START_TIME."'"; +} +if ($END_TIME) { + $END_TIME = pg_escape_string($END_TIME); + if ($where++) + $sql .= " AND "; + else + $sql .= " WHERE "; + $sql .= "sess_start <= '".$END_TIME."'"; +} + +$sql .= " ORDER BY sess_start, sess_duration"; + +if ($LIMIT) + $sql .= " LIMIT $LIMIT"; +if ($LIMIT_OFFSET) + $sql .= " OFFSET $LIMIT_OFFSET"; + +/* Execute the query */ +$result = pg_query($dbconn, $sql) or die('Query failed: ' . pg_last_error() . "\n"); +$recs = pg_num_rows($result); +if ($recs == 0) { + echo "<p><em>Sorry, no data is available in this selection.</em></p>\n"; +} else { + echo "<p><strong>$recs</strong> records found.</p>\n"; +?> + <table> + <tr> + <th>Device identifier</th> + <th>Access Device information</th> + <th>Session started on</th> + <th>Duration</th> + <th>Downloaded</th> + <th>Uploaded</th> + </tr> +<?php + while ($record = pg_fetch_array($result, null, PGSQL_ASSOC)) { + echo " <tr title='".htmlentities(pg_unescape_bytea($record["user_name"]))."'>\n"; + echo " <td>"; + echo htmlentities(pg_unescape_bytea($record["user_device"])); + echo "</td>\n"; + echo " <td>"; + echo htmlentities(pg_unescape_bytea($record["nas_info"])); + echo "</td>\n"; + echo " <td>"; + echo $record["fmt_sess_start"]; + echo "</td>\n"; + echo " <td>"; + echo htmlentities($record["sess_duration"]); + echo "</td>\n"; + echo " <td>"; + echo human_readable( $record["downl_bytes"] )." (".$record["downl_packets"]."pckts)"; + echo "</td>\n"; + echo " <td>"; + echo human_readable( $record["upl_bytes"] )." (".$record["upl_packets"]."pckts)"; + echo "</td>\n"; + echo " </tr>\n"; + + } +} +pg_free_result($result); + + +/* Closing connection */ +pg_close($dbconn); + + + +?>