mirror of
https://github.com/manuelkasper/AS-Stats.git
synced 2025-02-20 11:44:12 +08:00
Merge pull request #59 from JackSlateur/master
Allow links selection on graphs
This commit is contained in:
commit
1e27922c1d
@ -41,6 +41,8 @@ Prerequisites
|
|||||||
- File::Find::Rule module (CPAN)
|
- File::Find::Rule module (CPAN)
|
||||||
- if using sFlow: the Net::sFlow module (CPAN)
|
- if using sFlow: the Net::sFlow module (CPAN)
|
||||||
- web server with PHP 5
|
- web server with PHP 5
|
||||||
|
- php-sqlite3
|
||||||
|
- libdbd-sqlite3-perl
|
||||||
- one or more routers than can generate NetFlow v8/v9 AS aggregation records
|
- one or more routers than can generate NetFlow v8/v9 AS aggregation records
|
||||||
or sFlow samples
|
or sFlow samples
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ read_knownlinks();
|
|||||||
my @links = values %knownlinks;
|
my @links = values %knownlinks;
|
||||||
|
|
||||||
# walk through all RRD files in the given path and extract stats for all links
|
# walk through all RRD files in the given path and extract stats for all links
|
||||||
# from them; write the stats to a text file, sorted by total traffic
|
# from them; write the stats to an sqlite database
|
||||||
|
|
||||||
my @rrdfiles = File::Find::Rule->maxdepth(2)->file->in($rrdpath);
|
my @rrdfiles = File::Find::Rule->maxdepth(2)->file->in($rrdpath);
|
||||||
|
|
||||||
@ -51,45 +51,34 @@ foreach my $rrdfile (@rrdfiles) {
|
|||||||
}
|
}
|
||||||
print "\n";
|
print "\n";
|
||||||
|
|
||||||
# now sort the keys in order of descending total traffic
|
my $query = 'create table stats(asn int';
|
||||||
my @asorder = sort {
|
|
||||||
my $total_a = 0;
|
|
||||||
|
|
||||||
foreach my $t (values %{$astraffic->{$a}}) {
|
|
||||||
$total_a += $t;
|
|
||||||
}
|
|
||||||
my $total_b = 0;
|
|
||||||
foreach my $t (values %{$astraffic->{$b}}) {
|
|
||||||
$total_b += $t;
|
|
||||||
}
|
|
||||||
return $total_b <=> $total_a;
|
|
||||||
} keys %$astraffic;
|
|
||||||
|
|
||||||
open(STATSFILE, ">$statsfile.tmp");
|
|
||||||
|
|
||||||
# print header line
|
|
||||||
print STATSFILE "as";
|
|
||||||
foreach my $link (@links) {
|
foreach my $link (@links) {
|
||||||
print STATSFILE "\t${link}_in\t${link}_out\t${link}_v6_in\t${link}_v6_out";
|
$query .= ", ${link}_in int, ${link}_out int, ${link}_v6_in int, ${link}_v6_out int";
|
||||||
}
|
}
|
||||||
print STATSFILE "\n";
|
$query .= ');';
|
||||||
|
|
||||||
|
use DBI;
|
||||||
|
my $db = DBI->connect("dbi:SQLite:dbname=$statsfile.tmp", '', '');
|
||||||
|
$db->do('PRAGMA synchronous = OFF');
|
||||||
|
$db->do('drop table if exists stats');
|
||||||
|
$db->do($query);
|
||||||
|
|
||||||
# print data
|
# print data
|
||||||
foreach my $as (@asorder) {
|
foreach my $as (keys %{ $astraffic }) {
|
||||||
print STATSFILE "$as";
|
|
||||||
|
$query = "insert into stats values('$as'";
|
||||||
|
|
||||||
foreach my $link (@links) {
|
foreach my $link (@links) {
|
||||||
print STATSFILE "\t" . undefaszero($astraffic->{$as}->{"${link}_in"});
|
$query .= ", '" . undefaszero($astraffic->{$as}->{"${link}_in"}) . "'";
|
||||||
print STATSFILE "\t" . undefaszero($astraffic->{$as}->{"${link}_out"});
|
$query .= ", '" . undefaszero($astraffic->{$as}->{"${link}_out"}) . "'";
|
||||||
print STATSFILE "\t" . undefaszero($astraffic->{$as}->{"${link}_v6_in"});
|
$query .= ", '" . undefaszero($astraffic->{$as}->{"${link}_v6_in"}) . "'";
|
||||||
print STATSFILE "\t" . undefaszero($astraffic->{$as}->{"${link}_v6_out"});
|
$query .= ", '" . undefaszero($astraffic->{$as}->{"${link}_v6_out"}) . "'";
|
||||||
}
|
}
|
||||||
|
$query .= ');';
|
||||||
print STATSFILE "\n";
|
$db->do($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
close(STATSFILE);
|
$db->disconnect();
|
||||||
|
|
||||||
rename("$statsfile.tmp", $statsfile);
|
rename("$statsfile.tmp", $statsfile);
|
||||||
|
|
||||||
sub undefaszero {
|
sub undefaszero {
|
||||||
|
@ -17,7 +17,6 @@ $show95th = true;
|
|||||||
$ntop = 20;
|
$ntop = 20;
|
||||||
$showv6 = true;
|
$showv6 = true;
|
||||||
$showtitledetail = true;
|
$showtitledetail = true;
|
||||||
$hidelinkusagename = true; # $showtitledetail will need to be true to allow this
|
|
||||||
$vertical_label = true; # vertical IN/OUT label in graph
|
$vertical_label = true; # vertical IN/OUT label in graph
|
||||||
$brighten_negative = true; # brighten the "negative" part of graphs
|
$brighten_negative = true; # brighten the "negative" part of graphs
|
||||||
|
|
||||||
|
@ -10,10 +10,6 @@ $default_graph_height = 360;
|
|||||||
$top_graph_width = 600;
|
$top_graph_width = 600;
|
||||||
$top_graph_height = 220;
|
$top_graph_height = 220;
|
||||||
|
|
||||||
/* Size of graphs on link usage page */
|
|
||||||
$linkusage_graph_width = 600;
|
|
||||||
$linkusage_graph_height = 480;
|
|
||||||
|
|
||||||
/* Size of graphs on AS-Set page */
|
/* Size of graphs on AS-Set page */
|
||||||
$asset_graph_width = 600;
|
$asset_graph_width = 600;
|
||||||
$asset_graph_height = 200;
|
$asset_graph_height = 200;
|
||||||
|
83
www/func.inc
83
www/func.inc
@ -95,49 +95,52 @@ function getknownlinks() {
|
|||||||
return $knownlinks;
|
return $knownlinks;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getasstats_top($ntop, $statfile) {
|
function getasstats_top($ntop, $statfile, $selected_links) {
|
||||||
/* first step: walk the data for all ASes to determine the top 5 for the given link */
|
try{
|
||||||
$fd = fopen($statfile, "r");
|
$db = new SQLite3($statfile);
|
||||||
if (!$fd)
|
}catch(Exception $e){
|
||||||
return array();
|
return array();
|
||||||
$cols = explode("\t", trim(fgets($fd)));
|
}
|
||||||
|
|
||||||
/* read in up to $ntop AS stats, sum up columns */
|
if(sizeof($selected_links) == 0){
|
||||||
while (!feof($fd)) {
|
$selected_links = array();
|
||||||
$line = trim(fgets($fd));
|
foreach(getknownlinks() as $link)
|
||||||
if (!$line)
|
$selected_links[] = $link['tag'];
|
||||||
continue;
|
}
|
||||||
|
|
||||||
$els = explode("\t", $line);
|
$nlinks = 0;
|
||||||
|
$query_total = '0';
|
||||||
/* first element is the AS */
|
$query_links = '';
|
||||||
$as = $els[0];
|
foreach($selected_links as $tag){
|
||||||
|
$query_links .= "${tag}_in, ${tag}_out, ${tag}_v6_in, ${tag}_v6_out, ";
|
||||||
|
$nlinks += 4;
|
||||||
|
$query_total .= " + ${tag}_in + ${tag}_out + ${tag}_v6_in + ${tag}_v6_out";
|
||||||
|
}
|
||||||
|
$query = "select asn, $query_links $query_total as total from stats order by total desc limit $ntop";
|
||||||
|
|
||||||
|
$asn = $db->query($query);
|
||||||
|
$asstats = array();
|
||||||
|
while($row = $asn->fetchArray()){
|
||||||
$tot_in = 0;
|
$tot_in = 0;
|
||||||
$tot_out = 0;
|
$tot_out = 0;
|
||||||
$tot_v6_in = 0;
|
$tot_v6_in = 0;
|
||||||
$tot_v6_out = 0;
|
$tot_v6_out = 0;
|
||||||
|
foreach($row as $key => $value){
|
||||||
for ($i = 1; $i < count($els); $i++) {
|
if (strpos($key, '_in') !== false) {
|
||||||
if (strpos($cols[$i], "_in") !== false) {
|
if (strpos($key, '_v6_') !== false)
|
||||||
if (strpos($cols[$i], "_v6_") !== false)
|
$tot_v6_in += $value;
|
||||||
$tot_v6_in += $els[$i];
|
|
||||||
else
|
else
|
||||||
$tot_in += $els[$i];
|
$tot_in += $value;
|
||||||
} else {
|
} else if (strpos($key, '_out') !== false) {
|
||||||
if (strpos($cols[$i], "_v6_") !== false)
|
if (strpos($key, '_v6_') !== false)
|
||||||
$tot_v6_out += $els[$i];
|
$tot_v6_out += $value;
|
||||||
else
|
else
|
||||||
$tot_out += $els[$i];
|
$tot_out += $value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$asstats[$as] = array($tot_in, $tot_out, $tot_v6_in, $tot_v6_out);
|
$asstats[$row['asn']] = array($tot_in, $tot_out, $tot_v6_in, $tot_v6_out);
|
||||||
|
|
||||||
if (count($asstats) >= $ntop)
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
fclose($fd);
|
|
||||||
|
|
||||||
return $asstats;
|
return $asstats;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,14 +227,14 @@ function clearCacheFileASSET($asset) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# return the html used in top.php : <a href=blabla><img src=blabla/></url>
|
# return the html used in top.php : <a href=blabla><img src=blabla/></url>
|
||||||
function getHTMLUrl($as, $ipversion, $desc, $start, $end, $peerusage){
|
function getHTMLUrl($as, $ipversion, $desc, $start, $end, $peerusage, $selected_links = array()){
|
||||||
$img = getHTMLImg($as, $ipversion, $desc, $start, $end, $peerusage, '', '', false);
|
$img = getHTMLImg($as, $ipversion, $desc, $start, $end, $peerusage, '', '', false, $selected_links);
|
||||||
$result = "<a href='history.php?as=$as&peerusage=$peerusage&v=$ipversion' target='_blank'>$img</a>";
|
$result = "<a href='history.php?as=$as&peerusage=$peerusage&v=$ipversion' target='_blank'>$img</a>";
|
||||||
return($result);
|
return($result);
|
||||||
}
|
}
|
||||||
|
|
||||||
# return the html used in history.php (for example) : <img src=blabla/>
|
# return the html used in history.php (for example) : <img src=blabla/>
|
||||||
function getHTMLImg($as, $ipversion, $desc, $start, $end, $peerusage, $alt, $class, $history = false){
|
function getHTMLImg($as, $ipversion, $desc, $start, $end, $peerusage, $alt, $class, $history = false, $selected_links=array()){
|
||||||
global $top_graph_width;
|
global $top_graph_width;
|
||||||
global $top_graph_height;
|
global $top_graph_height;
|
||||||
|
|
||||||
@ -240,6 +243,14 @@ function getHTMLImg($as, $ipversion, $desc, $start, $end, $peerusage, $alt, $cla
|
|||||||
$result = "<img alt='$alt' class='$class' src='gengraph.php?v=$ipversion&as=$as&peerusage=$peerusage&dname=$dname&start=$start&end=$end";
|
$result = "<img alt='$alt' class='$class' src='gengraph.php?v=$ipversion&as=$as&peerusage=$peerusage&dname=$dname&start=$start&end=$end";
|
||||||
if(!$history)
|
if(!$history)
|
||||||
$result .= "&width=$top_graph_width&height=$top_graph_height&nolegend=1";
|
$result .= "&width=$top_graph_width&height=$top_graph_height&nolegend=1";
|
||||||
|
|
||||||
|
if(sizeof($selected_links) != 0){
|
||||||
|
$result .= "&selected_links=";
|
||||||
|
foreach($selected_links as $link)
|
||||||
|
$result .= "$link,";
|
||||||
|
$result = rtrim($result, ',');
|
||||||
|
}
|
||||||
|
|
||||||
$result .= "'";
|
$result .= "'";
|
||||||
|
|
||||||
if(!$history)
|
if(!$history)
|
||||||
|
@ -29,6 +29,23 @@ else
|
|||||||
$peerusage = 0;
|
$peerusage = 0;
|
||||||
|
|
||||||
$knownlinks = getknownlinks();
|
$knownlinks = getknownlinks();
|
||||||
|
|
||||||
|
if(isset($_GET['selected_links'])){
|
||||||
|
$reverse = array();
|
||||||
|
foreach($knownlinks as $link)
|
||||||
|
$reverse[$link['tag']] = array('color' => $link['color'], 'descr' => $link['descr']);
|
||||||
|
|
||||||
|
$links = array();
|
||||||
|
foreach(explode(',', $_GET['selected_links']) as $tag){
|
||||||
|
$link = array('tag' => $tag,
|
||||||
|
'color' => $reverse[$tag]['color'],
|
||||||
|
'descr' => $reverse[$tag]['descr']);
|
||||||
|
$links[] = $link;
|
||||||
|
}
|
||||||
|
|
||||||
|
$knownlinks = $links;
|
||||||
|
}
|
||||||
|
|
||||||
$rrdfile = getRRDFileForAS($as, $peerusage);
|
$rrdfile = getRRDFileForAS($as, $peerusage);
|
||||||
|
|
||||||
if ($compat_rrdtool12) {
|
if ($compat_rrdtool12) {
|
||||||
|
@ -17,14 +17,6 @@ if($showpeeras == true){
|
|||||||
endif;
|
endif;
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "<span>Link usage:</span> ";
|
|
||||||
foreach ($top_intervals as $interval) {
|
|
||||||
echo '<a href="linkusage.php?numhours=' . $interval['hours'] . '"';
|
|
||||||
if ($dpagename == "linkusage" && @$_GET['numhours'] == $interval['hours'])
|
|
||||||
echo ' class="selected"';
|
|
||||||
echo '>' . $interval['label'] . '</a> | ';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($dpagename == "history"):
|
if ($dpagename == "history"):
|
||||||
?><a href="history.php" class="selected">View an AS</a> | <?php
|
?><a href="history.php" class="selected">View an AS</a> | <?php
|
||||||
else:
|
else:
|
||||||
|
@ -1,146 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* written by Manuel Kasper <mk@neon1.net> for Monzoon Networks AG
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('func.inc');
|
|
||||||
|
|
||||||
$numtop = 10;
|
|
||||||
$ascolors = array("A6CEE3", "1F78B4", "B2DF8A", "33A02C", "FB9A99", "E31A1C", "FDBF6F", "FF7F00", "CAB2D6", "6A3D9A");
|
|
||||||
|
|
||||||
$link = $_GET['link'];
|
|
||||||
if (!preg_match("/^[0-9a-zA-Z][0-9a-zA-Z\-_]+$/", $link))
|
|
||||||
die("Invalid link");
|
|
||||||
|
|
||||||
if (@$_GET['v'] == 6)
|
|
||||||
$link .= "_v6";
|
|
||||||
|
|
||||||
$hours = 24;
|
|
||||||
if (@$_GET['numhours'])
|
|
||||||
$hours = (int)$_GET['numhours'];
|
|
||||||
|
|
||||||
/* first step: walk the data for all ASes to determine the top 5 for the given link */
|
|
||||||
$statsfile = statsFileForHours($hours);
|
|
||||||
$fd = fopen($statsfile, "r");
|
|
||||||
$cols = explode("\t", trim(fgets($fd)));
|
|
||||||
$asstats = array();
|
|
||||||
|
|
||||||
/* figure out which columns contain data for the links were's interested in */
|
|
||||||
$incol = array_search("{$link}_in", $cols);
|
|
||||||
$outcol = array_search("{$link}_out", $cols);
|
|
||||||
if (!$incol || !$outcol)
|
|
||||||
die("Couldn't find columns");
|
|
||||||
|
|
||||||
/* read in all AS stats */
|
|
||||||
while (!feof($fd)) {
|
|
||||||
$line = trim(fgets($fd));
|
|
||||||
if (!$line)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
$els = explode("\t", $line);
|
|
||||||
|
|
||||||
/* first element is the AS */
|
|
||||||
$asstats[$els[0]] = $els[$incol] + $els[$outcol];
|
|
||||||
}
|
|
||||||
fclose($fd);
|
|
||||||
|
|
||||||
/* now sort the AS stats to find the top $numtop */
|
|
||||||
arsort($asstats, SORT_NUMERIC);
|
|
||||||
|
|
||||||
/* extract first $numtop and consolidate the rest */
|
|
||||||
$topas = array_slice($asstats, 0, $numtop, true);
|
|
||||||
|
|
||||||
for ($i = 0; $i < $numtop; $i++)
|
|
||||||
array_shift($asstats);
|
|
||||||
|
|
||||||
$restdata = 0;
|
|
||||||
foreach ($asstats as $as => $totaldata) {
|
|
||||||
$restdata += $totaldata;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* now make a beautiful graph :) */
|
|
||||||
header("Content-Type: image/png");
|
|
||||||
|
|
||||||
$width = $default_graph_width;
|
|
||||||
$height = $default_graph_height;
|
|
||||||
if (@$_GET['width'])
|
|
||||||
$width = (int)$_GET['width'];
|
|
||||||
if (@$_GET['height'])
|
|
||||||
$height = (int)$_GET['height'];
|
|
||||||
|
|
||||||
$knownlinks = getknownlinks();
|
|
||||||
|
|
||||||
if ($compat_rrdtool12) {
|
|
||||||
/* cannot use full-size-mode - must estimate height/width */
|
|
||||||
$height -= 205;
|
|
||||||
$width -= 81;
|
|
||||||
}
|
|
||||||
|
|
||||||
$start = time() - $hours*3600;
|
|
||||||
$end = time();
|
|
||||||
|
|
||||||
$cmd = "$rrdtool graph - " .
|
|
||||||
"--slope-mode --alt-autoscale -u 0 -l 0 --imgformat=PNG --base=1000 --height=$height --width=$width " .
|
|
||||||
"--color BACK#ffffff00 --color SHADEA#ffffff00 --color SHADEB#ffffff00 " .
|
|
||||||
"--start " . $start . " --end " . $end . " ";
|
|
||||||
|
|
||||||
if (!$compat_rrdtool12)
|
|
||||||
$cmd .= "--full-size-mode ";
|
|
||||||
|
|
||||||
if($showtitledetail && @$_GET['dname'] != "")
|
|
||||||
$cmd .= "--title " . escapeshellarg($_GET['dname']) . " ";
|
|
||||||
else
|
|
||||||
if (isset($_GET['v']) && is_numeric($_GET['v']))
|
|
||||||
$cmd .= "--title IPv" . $_GET['v'] . " ";
|
|
||||||
|
|
||||||
/* geneate RRD DEFs */
|
|
||||||
foreach ($topas as $as => $traffic) {
|
|
||||||
$rrdfile = getRRDFileForAS($as);
|
|
||||||
$cmd .= "DEF:as{$as}_in=\"$rrdfile\":{$link}_in:AVERAGE ";
|
|
||||||
$cmd .= "DEF:as{$as}_out=\"$rrdfile\":{$link}_out:AVERAGE ";
|
|
||||||
}
|
|
||||||
|
|
||||||
/* generate a CDEF for each DEF to multiply by 8 (bytes to bits), and reverse for outbound */
|
|
||||||
foreach ($topas as $as => $traffic) {
|
|
||||||
if ($outispositive) {
|
|
||||||
$cmd .= "CDEF:as{$as}_in_bits=as{$as}_in,-8,* ";
|
|
||||||
$cmd .= "CDEF:as{$as}_out_bits=as{$as}_out,8,* ";
|
|
||||||
} else {
|
|
||||||
$cmd .= "CDEF:as{$as}_in_bits=as{$as}_in,8,* ";
|
|
||||||
$cmd .= "CDEF:as{$as}_out_bits=as{$as}_out,-8,* ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* generate graph area/stack for inbound */
|
|
||||||
$i = 0;
|
|
||||||
foreach ($topas as $as => $traffic) {
|
|
||||||
$asinfo = getASInfo($as);
|
|
||||||
$descr = str_replace(":", "\\:", utf8_decode($asinfo['descr']));
|
|
||||||
|
|
||||||
$cmd .= "AREA:as{$as}_in_bits#{$ascolors[$i]}:\"AS{$as} ({$descr})\\n\"";
|
|
||||||
if ($i > 0)
|
|
||||||
$cmd .= ":STACK";
|
|
||||||
$cmd .= " ";
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* generate graph area/stack for outbound */
|
|
||||||
$i = 0;
|
|
||||||
foreach ($topas as $as => $traffic) {
|
|
||||||
$cmd .= "AREA:as{$as}_out_bits#{$ascolors[$i]}:";
|
|
||||||
if ($i > 0)
|
|
||||||
$cmd .= ":STACK";
|
|
||||||
$cmd .= " ";
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
# zero line
|
|
||||||
$cmd .= "HRULE:0#00000080";
|
|
||||||
|
|
||||||
passthru($cmd);
|
|
||||||
|
|
||||||
exit;
|
|
||||||
|
|
||||||
?>
|
|
@ -1,63 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* written by Manuel Kasper <mk@neon1.net> for Monzoon Networks AG
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('func.inc');
|
|
||||||
|
|
||||||
$knownlinks = getknownlinks();
|
|
||||||
|
|
||||||
$hours = 24;
|
|
||||||
if (@$_GET['numhours'])
|
|
||||||
$hours = (int)$_GET['numhours'];
|
|
||||||
|
|
||||||
$label = statsLabelForHours($hours);
|
|
||||||
|
|
||||||
?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta http-equiv="Refresh" content="300" />
|
|
||||||
<title>Link usage (<?php echo $label ?>)</title>
|
|
||||||
<link rel="stylesheet" type="text/css" href="style.css" />
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
|
|
||||||
<div id="nav"><?php include('headermenu.inc'); ?></div>
|
|
||||||
<div class="pgtitle">Link usage - top 10 AS per link (<?php echo $label ?>)</div>
|
|
||||||
|
|
||||||
<table class="astable">
|
|
||||||
|
|
||||||
<?php $i = 0; foreach ($knownlinks as $link):
|
|
||||||
$class = (($i % 2) == 0) ? "even" : "odd";
|
|
||||||
?>
|
|
||||||
<tr class="<?php echo $class; ?>">
|
|
||||||
<?php if (($showtitledetail && !$hidelinkusagename) || (!$showtitledetail)): ?>
|
|
||||||
<th style="width: 15em">
|
|
||||||
<div class="title">
|
|
||||||
<?php echo $link['descr']; ?>
|
|
||||||
</div>
|
|
||||||
</th>
|
|
||||||
<?php endif; ?>
|
|
||||||
<td>
|
|
||||||
<?php if ($showv6): ?>
|
|
||||||
<img alt="link graph" src="linkgraph.php?link=<?php echo $link['tag']; ?>&numhours=<?php echo $hours ?>&width=<?php echo $linkusage_graph_width ?>&height=<?php echo $linkusage_graph_height ?>&v=4&dname=<?php echo rawurlencode($link['descr'] . " - IPV4"); ?>" width="<?php echo $linkusage_graph_width ?>" height="<?php echo $linkusage_graph_height ?>" border="0" />
|
|
||||||
<img alt="link graph" src="linkgraph.php?link=<?php echo $link['tag']; ?>&numhours=<?php echo $hours ?>width=<?php echo $linkusage_graph_width ?>&height=<?php echo $linkusage_graph_height ?>&v=6&dname=<?php echo rawurlencode($link['descr'] . " - IPV6"); ?>" width="<?php echo $linkusage_graph_width ?>" height="<?php echo $linkusage_graph_height ?>" border="0" />
|
|
||||||
<?php else: ?>
|
|
||||||
<img alt="link graph" src="linkgraph.php?link=<?php echo $link['tag']; ?>&numhours=<?php echo $hours ?>width=<?php echo $linkusage_graph_width ?>&height=<?php echo $linkusage_graph_height ?>&dname=<?php echo rawurlencode($link['descr'] . ""); ?>" width="<?php echo $linkusage_graph_width ?>" height="<?php echo $linkusage_graph_height ?>" border="0" />
|
|
||||||
<?php endif; ?>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<?php $i++; endforeach; ?>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
|
|
||||||
<?php include('footer.inc'); ?>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
29
www/top.php
29
www/top.php
@ -25,7 +25,15 @@ else {
|
|||||||
$statsfile = statsFileForHours($hours);
|
$statsfile = statsFileForHours($hours);
|
||||||
}
|
}
|
||||||
$label = statsLabelForHours($hours);
|
$label = statsLabelForHours($hours);
|
||||||
$topas = getasstats_top($ntop, $statsfile);
|
|
||||||
|
$knownlinks = getknownlinks();
|
||||||
|
$selected_links = array();
|
||||||
|
foreach($knownlinks as $link){
|
||||||
|
if(isset($_GET["link_${link['tag']}"]))
|
||||||
|
$selected_links[] = $link['tag'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$topas = getasstats_top($ntop, $statsfile, $selected_links);
|
||||||
|
|
||||||
$start = time() - $hours*3600;
|
$start = time() - $hours*3600;
|
||||||
$end = time();
|
$end = time();
|
||||||
@ -98,9 +106,9 @@ echo join(" | ", $htmllinks);
|
|||||||
</th>
|
</th>
|
||||||
<td>
|
<td>
|
||||||
<?php
|
<?php
|
||||||
echo getHTMLUrl($as, 4, $asinfo['descr'], $start, $end, $peerusage);
|
echo getHTMLUrl($as, 4, $asinfo['descr'], $start, $end, $peerusage, $selected_links);
|
||||||
if ($showv6)
|
if ($showv6)
|
||||||
echo getHTMLUrl($as, 6, $asinfo['descr'], $start, $end, $peerusage);
|
echo getHTMLUrl($as, 6, $asinfo['descr'], $start, $end, $peerusage, $selected_links);
|
||||||
?>
|
?>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -109,11 +117,20 @@ echo join(" | ", $htmllinks);
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div id="legend">
|
<div id="legend">
|
||||||
|
<form method='get'>
|
||||||
|
<input type='hidden' name='numhours' value='<?php echo $hours; ?>'/>
|
||||||
|
<input type='hidden' name='n' value='<?php echo $ntop; ?>'/>
|
||||||
<table>
|
<table>
|
||||||
<?php
|
<?php
|
||||||
$knownlinks = getknownlinks();
|
$knownlinks = getknownlinks();
|
||||||
foreach ($knownlinks as $link) {
|
foreach ($knownlinks as $link) {
|
||||||
echo "<tr><td style=\"border: 4px solid #fff;\">";
|
$tag = "link_${link['tag']}";
|
||||||
|
|
||||||
|
echo "<tr><td><input type='checkbox'";
|
||||||
|
if(isset($_GET[$tag]) && $_GET[$tag] == 'on')
|
||||||
|
echo " checked='checked'";
|
||||||
|
|
||||||
|
echo "name=\"$tag\" id=\"$tag\"/></td><td style=\"border: 4px solid #fff;\">";
|
||||||
|
|
||||||
echo "<table style=\"border-collapse: collapse; margin: 0; padding: 0\"><tr>";
|
echo "<table style=\"border-collapse: collapse; margin: 0; padding: 0\"><tr>";
|
||||||
if ($brighten_negative) {
|
if ($brighten_negative) {
|
||||||
@ -124,10 +141,12 @@ foreach ($knownlinks as $link) {
|
|||||||
}
|
}
|
||||||
echo "</tr></table>";
|
echo "</tr></table>";
|
||||||
|
|
||||||
echo "</td><td> " . $link['descr'] . "</td></tr>\n";
|
echo "</td><td><label for=\"$tag\"> ${link['descr']}</label></td></tr>\n";
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</table>
|
</table>
|
||||||
|
<center><input type='submit' value='Filter'/></center>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<?php include('footer.inc'); ?>
|
<?php include('footer.inc'); ?>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user