mirror of
				https://github.com/librenms/librenms.git
				synced 2024-10-07 16:52:45 +00:00 
			
		
		
		
	git-svn-id: http://www.observium.org/svn/observer/trunk@2387 61d68cd4-352d-0410-923a-c4978735b2b8
		
			
				
	
	
		
			100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
 | 
						|
## FIXME -- we're walking, so we can discover here too.
 | 
						|
 | 
						|
$cip_oids = array('cipMacHCSwitchedBytes', 'cipMacHCSwitchedPkts');
 | 
						|
echo("Cisco MAC - Caching OID: ");
 | 
						|
$cip_array = array();
 | 
						|
 | 
						|
foreach ($cip_oids as $oid)
 | 
						|
{
 | 
						|
  echo("$oid ");
 | 
						|
  $cip_array = snmpwalk_cache_cip($device, $oid, $cip_array, "CISCO-IP-STAT-MIB");
 | 
						|
}
 | 
						|
 | 
						|
$polled = time();
 | 
						|
 | 
						|
$mac_entries = 0;
 | 
						|
 | 
						|
$acc_rows = dbFetchRows("SELECT *, A.poll_time AS poll_time FROM `mac_accounting` as A, `ports` AS I where A.interface_id = I.interface_id AND I.device_id = ?", array($device['device_id']));
 | 
						|
 | 
						|
foreach ($acc_rows as $acc)
 | 
						|
{
 | 
						|
  $device_id = $acc['device_id'];
 | 
						|
  $ifIndex = $acc['ifIndex'];
 | 
						|
  $mac = $acc['mac'];
 | 
						|
 | 
						|
  $polled_period = $polled - $acc['poll_time'];
 | 
						|
 | 
						|
  if ($cip_array[$ifIndex][$mac])
 | 
						|
  {
 | 
						|
    $acc['update']['poll_time'] = $polled;
 | 
						|
    $acc['update']['poll_prev'] = $acc['poll_time'];
 | 
						|
    $acc['update']['poll_period'] = $polled_period;
 | 
						|
 | 
						|
    $mac_entries++;
 | 
						|
 | 
						|
    $b_in = $cip_array[$ifIndex][$mac]['cipMacHCSwitchedBytes']['input'];
 | 
						|
    $b_out = $cip_array[$ifIndex][$mac]['cipMacHCSwitchedBytes']['output'];
 | 
						|
    $p_in = $cip_array[$ifIndex][$mac]['cipMacHCSwitchedPkts']['input'];
 | 
						|
    $p_out = $cip_array[$ifIndex][$mac]['cipMacHCSwitchedPkts']['output'];
 | 
						|
 | 
						|
    $this_ma = &$cip_array[$ifIndex][$mac];
 | 
						|
 | 
						|
    /// Update metrics
 | 
						|
    foreach ($cip_oids as $oid)
 | 
						|
    {
 | 
						|
      foreach (array('input','output') as $dir)
 | 
						|
      {
 | 
						|
        $oid_dir = $oid . "_" . $dir;
 | 
						|
        $acc['update'][$oid_dir] = $this_ma[$oid][$dir];
 | 
						|
        $acc['update'][$oid_dir.'_prev'] = $acc[$oid_dir];
 | 
						|
        $oid_prev = $oid_dir . "_prev";
 | 
						|
        if ($this_ma[$oid][$dir])
 | 
						|
        {
 | 
						|
          $oid_diff = $this_ma[$oid][$dir] - $acc[$oid_dir];
 | 
						|
          $oid_rate  = $oid_diff / $polled_period;
 | 
						|
          $acc['update'][$oid_dir.'_rate'] = $oid_rate;
 | 
						|
          $acc['update'][$oid_dir.'_delta'] = $oid_diff;
 | 
						|
          if ($debug) { echo("\n $oid_dir ($oid_diff B) $oid_rate Bps $polled_period secs\n"); }
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    if ($debug) { echo("\n" . $acc['hostname']." ".$acc['ifDescr'] . "  $mac -> $b_in:$b_out:$p_in:$p_out "); }
 | 
						|
 | 
						|
    $rrdfile = $config['rrd_dir'] . "/" . $device['hostname'] . "/" . safename("cip-" . $acc['ifIndex'] . "-" . $acc['mac'] . ".rrd");
 | 
						|
 | 
						|
    if (!is_file($rrdfile))
 | 
						|
    {
 | 
						|
      rrdtool_create($rrdfile,"DS:IN:COUNTER:600:0:12500000000 \
 | 
						|
        DS:OUT:COUNTER:600:0:12500000000 \
 | 
						|
        DS:PIN:COUNTER:600:0:12500000000 \
 | 
						|
        DS:POUT:COUNTER:600:0:12500000000 \
 | 
						|
        RRA:AVERAGE:0.5:1:600 \
 | 
						|
        RRA:AVERAGE:0.5:6:700 \
 | 
						|
        RRA:AVERAGE:0.5:24:775 \
 | 
						|
        RRA:AVERAGE:0.5:288:797 \
 | 
						|
        RRA:MAX:0.5:1:600 \
 | 
						|
        RRA:MAX:0.5:6:700 \
 | 
						|
        RRA:MAX:0.5:24:775 \
 | 
						|
        RRA:MAX:0.5:288:797");
 | 
						|
    }
 | 
						|
    $woo = "N:".($b_in+0).":".($b_out+0).":".($p_in+0).":".($p_out+0);
 | 
						|
    $ret = rrdtool_update("$rrdfile", $woo);
 | 
						|
 | 
						|
    if ($acc['update'])
 | 
						|
    { /// Do Updates
 | 
						|
      dbUpdate($acc['update'], 'mac_accounting', '`ma_id` = ?', array($acc['ma_id']));
 | 
						|
    } /// End Updates
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
unset($cip_array);
 | 
						|
 | 
						|
if ($mac_entries) { echo(" $mac_entries MAC accounting entries\n"); }
 | 
						|
 | 
						|
echo("\n");
 | 
						|
 | 
						|
?>
 |