mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
* Don't do uneeded snmp queries sensors discovery 26 -> 16 wrapped some poller modules in db checks. The same could be done for some others, but more work is needed. * travis fix
105 lines
3.8 KiB
PHP
105 lines
3.8 KiB
PHP
<?php
|
|
|
|
use LibreNMS\RRD\RrdDefinition;
|
|
|
|
if ($device['os_group'] == 'cisco') {
|
|
$acc_rows = dbFetchRows('SELECT *, A.poll_time AS poll_time FROM `mac_accounting` as A, `ports` AS I where A.port_id = I.port_id AND I.device_id = ?', array($device['device_id']));
|
|
|
|
if (!empty($acc_rows)) {
|
|
$cip_oids = array(
|
|
'cipMacHCSwitchedBytes',
|
|
'cipMacHCSwitchedPkts',
|
|
);
|
|
$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;
|
|
|
|
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;
|
|
d_echo("\n $oid_dir ($oid_diff B) $oid_rate Bps $polled_period secs\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
d_echo("\n" . $acc['hostname'] . ' ' . $acc['ifDescr'] . " $mac -> $b_in:$b_out:$p_in:$p_out ");
|
|
|
|
$rrd_name = array('cip', $ifIndex, $mac);
|
|
$rrd_dev = RrdDefinition::make()
|
|
->addDataset('IN', 'COUNTER', 0, 12500000000)
|
|
->addDataset('OUT', 'COUNTER', 0, 12500000000)
|
|
->addDataset('PIN', 'COUNTER', 0, 12500000000)
|
|
->addDataset('POUT', 'COUNTER', 0, 12500000000);
|
|
|
|
// FIXME - use memcached to make sure these values don't go backwards?
|
|
$fields = array(
|
|
'IN' => $b_in,
|
|
'OUT' => $b_out,
|
|
'PIN' => $p_in,
|
|
'POUT' => $p_out,
|
|
);
|
|
|
|
$tags = compact('ifIndex', 'mac', 'rrd_name', 'rrd_def');
|
|
data_update($device, 'cip', $tags, $fields);
|
|
|
|
if ($acc['update']) {
|
|
// Do Updates
|
|
dbUpdate($acc['update'], 'mac_accounting', '`ma_id` = ?', array($acc['ma_id']));
|
|
} //end if
|
|
}//end if
|
|
}//end foreach
|
|
|
|
unset($cip_array);
|
|
|
|
if ($mac_entries) {
|
|
echo " $mac_entries MAC accounting entries\n";
|
|
}
|
|
}
|
|
echo "\n";
|
|
}//end if
|
|
|
|
unset(
|
|
$cip_oids,
|
|
$oid,
|
|
$polled,
|
|
$mac_entries,
|
|
$acc_rows
|
|
);
|