mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			135 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
$port = mres($_GET['id']);
 | 
						|
if ($_GET['stat']) {
 | 
						|
    $stat = mres($_GET['stat']);
 | 
						|
}
 | 
						|
else {
 | 
						|
    $stat = 'bits';
 | 
						|
}
 | 
						|
 | 
						|
$sort = mres($_GET['sort']);
 | 
						|
 | 
						|
if (is_numeric($_GET['topn'])) {
 | 
						|
    $topn = $_GET['topn'];
 | 
						|
}
 | 
						|
else {
 | 
						|
    $topn = '10';
 | 
						|
}
 | 
						|
 | 
						|
require 'includes/graphs/common.inc.php';
 | 
						|
 | 
						|
if ($stat == 'pkts') {
 | 
						|
    $units      = 'pps';
 | 
						|
    $unit       = 'p';
 | 
						|
    $multiplier = '1';
 | 
						|
    $colours    = 'purples';
 | 
						|
    $prefix     = 'P';
 | 
						|
    if ($sort == 'in') {
 | 
						|
        $sort = 'cipMacHCSwitchedPkts_input_rate';
 | 
						|
    }
 | 
						|
    else if ($sort == 'out') {
 | 
						|
        $sort = 'cipMacHCSwitchedPkts_output_rate';
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        $sort = 'bps';
 | 
						|
    }
 | 
						|
}
 | 
						|
else if ($stat == 'bits') {
 | 
						|
    $units      = 'bps';
 | 
						|
    $unit       = 'B';
 | 
						|
    $multiplier = '8';
 | 
						|
    $colours    = 'greens';
 | 
						|
    if ($sort == 'in') {
 | 
						|
        $sort = 'cipMacHCSwitchedBytes_input_rate';
 | 
						|
    }
 | 
						|
    else if ($sort == 'out') {
 | 
						|
        $sort = 'cipMacHCSwitchedBytes_output_rate';
 | 
						|
    }
 | 
						|
    else {
 | 
						|
        $sort = 'bps';
 | 
						|
    }
 | 
						|
}//end if
 | 
						|
 | 
						|
$accs = dbFetchRows(
 | 
						|
    "SELECT *, (M.cipMacHCSwitchedBytes_input_rate + M.cipMacHCSwitchedBytes_output_rate) AS bps,
 | 
						|
        (M.cipMacHCSwitchedPkts_input_rate + M.cipMacHCSwitchedPkts_output_rate) AS pps
 | 
						|
        FROM `mac_accounting` AS M, `ports` AS I, `devices` AS D WHERE M.port_id = ?
 | 
						|
        AND I.port_id = M.port_id AND D.device_id = I.device_id ORDER BY $sort DESC LIMIT 0,".$topn,
 | 
						|
    array($port)
 | 
						|
);
 | 
						|
 | 
						|
$pluses       = '';
 | 
						|
$iter         = '0';
 | 
						|
$rrd_options .= " COMMENT:'                                     In\: Current     Maximum      Total      Out\: Current     Maximum     Total\\\\n'";
 | 
						|
 | 
						|
foreach ($accs as $acc) {
 | 
						|
    $this_rrd = $config['rrd_dir'].'/'.$acc['hostname'].'/'.safename('cip-'.$acc['ifIndex'].'-'.$acc['mac'].'.rrd');
 | 
						|
    if (is_file($this_rrd)) {
 | 
						|
        $mac  = formatmac($acc['mac']);
 | 
						|
        $name = $mac;
 | 
						|
        $addy = dbFetchRow('SELECT * FROM ipv4_mac where mac_address = ? AND port_id = ?', array($acc['mac'], $acc['port_id']));
 | 
						|
 | 
						|
        if ($addy) {
 | 
						|
            $name = $addy['ipv4_address'].' ('.$mac.')';
 | 
						|
            $peer = dbFetchRow(
 | 
						|
                'SELECT * FROM ipv4_addresses AS A, ports AS I, devices AS D
 | 
						|
              WHERE A.ipv4_address = ? AND I.port_id = A.port_id AND D.device_id = I.device_id',
 | 
						|
                array($addy['ipv4_address'])
 | 
						|
            );
 | 
						|
            if ($peer) {
 | 
						|
                $name = $peer['hostname'].' '.makeshortif($peer['ifDescr']).' ('.$mac.')';
 | 
						|
            }
 | 
						|
 | 
						|
            if (dbFetchCell("SELECT count(*) FROM bgpPeers WHERE device_id = '".$acc['device_id']."' AND bgpPeerIdentifier = ?", array($addy['ipv4_address']))) {
 | 
						|
                $peer_info = dbFetchRow('SELECT * FROM bgpPeers WHERE device_id = ? AND bgpPeerIdentifier = ?', array($acc['device_id'], $addy['ipv4_address']));
 | 
						|
                $name     .= ' - AS'.$peer_info['bgpPeerRemoteAs'];
 | 
						|
            }
 | 
						|
 | 
						|
            if ($peer_info) {
 | 
						|
                $asn    = 'AS'.$peer_info['bgpPeerRemoteAs'];
 | 
						|
                $astext = $peer_info['astext'];
 | 
						|
            }
 | 
						|
            else {
 | 
						|
                unset($as);
 | 
						|
                unset($astext);
 | 
						|
                unset($asn);
 | 
						|
            }
 | 
						|
        }//end if
 | 
						|
 | 
						|
        $this_id = str_replace('.', '', $acc['mac']);
 | 
						|
        if (!$config['graph_colours'][$colours][$iter]) {
 | 
						|
            $iter = 0;
 | 
						|
        }
 | 
						|
 | 
						|
        $colour       = $config['graph_colours'][$colours][$iter];
 | 
						|
        $descr        = rrdtool_escape($name, 36);
 | 
						|
        $rrd_options .= ' DEF:in'.$this_id."=$this_rrd:".$prefix.'IN:AVERAGE ';
 | 
						|
        $rrd_options .= ' DEF:out'.$this_id."temp=$this_rrd:".$prefix.'OUT:AVERAGE ';
 | 
						|
        $rrd_options .= ' CDEF:inB'.$this_id.'=in'.$this_id.",$multiplier,* ";
 | 
						|
        $rrd_options .= ' CDEF:outB'.$this_id.'temp=out'.$this_id."temp,$multiplier,*";
 | 
						|
        $rrd_options .= ' CDEF:outB'.$this_id.'=outB'.$this_id.'temp,-1,*';
 | 
						|
        $rrd_options .= ' CDEF:octets'.$this_id.'=inB'.$this_id.',outB'.$this_id.'temp,+';
 | 
						|
        $rrd_options .= ' VDEF:totin'.$this_id.'=inB'.$this_id.',TOTAL';
 | 
						|
        $rrd_options .= ' VDEF:totout'.$this_id.'=outB'.$this_id.'temp,TOTAL';
 | 
						|
        $rrd_options .= ' VDEF:tot'.$this_id.'=octets'.$this_id.',TOTAL';
 | 
						|
        $rrd_options .= ' AREA:inB'.$this_id.'#'.$colour.":'".$descr."':STACK";
 | 
						|
        if ($rrd_optionsb) {
 | 
						|
            $stack = 'STACK';
 | 
						|
        }
 | 
						|
 | 
						|
        $rrd_optionsb .= ' AREA:outB'.$this_id.'#'.$colour."::$stack";
 | 
						|
        $rrd_options  .= ' GPRINT:inB'.$this_id.":LAST:%6.2lf%s$units";
 | 
						|
        $rrd_options  .= ' GPRINT:inB'.$this_id.":MAX:%6.2lf%s$units";
 | 
						|
        $rrd_options  .= ' GPRINT:totin'.$this_id.":%6.2lf%s$unit";
 | 
						|
        $rrd_options  .= " COMMENT:'    '";
 | 
						|
        $rrd_options  .= ' GPRINT:outB'.$this_id."temp:LAST:%6.2lf%s$units";
 | 
						|
        $rrd_options  .= ' GPRINT:outB'.$this_id."temp:MAX:%6.2lf%s$units";
 | 
						|
        $rrd_options  .= ' GPRINT:totout'.$this_id.":%6.2lf%s$unit\\\\n";
 | 
						|
        $iter++;
 | 
						|
    }//end if
 | 
						|
}//end foreach
 | 
						|
 | 
						|
$rrd_options .= $rrd_optionsb;
 | 
						|
$rrd_options .= ' HRULE:0#999999';
 |