Observium_CE/includes/polling/ports/juniper-virtualchassis-mib.inc.php

82 lines
3.7 KiB
PHP

<?php
/**
* Observium
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) Adam Armstrong
*
*/
if (!$port_stats_count) {
return;
}
echo("JUNIPER-VIRTUALCHASSIS-MIB ");
$jnxVirtualChassisMember = snmp_cache_table($device, 'jnxVirtualChassisMemberRole', [], 'JUNIPER-VIRTUALCHASSIS-MIB');
if (!snmp_status() ||
(count($jnxVirtualChassisMember) === 1 && $jnxVirtualChassisMember[0]['jnxVirtualChassisMemberRole'] === 'master')) // Skip only master
{
return;
}
$jnxVirtualChassisMember = snmpwalk_cache_oid($device, 'jnxVirtualChassisMemberMacAddBase', $jnxVirtualChassisMember, 'JUNIPER-VIRTUALCHASSIS-MIB');
print_debug_vars($jnxVirtualChassisMember);
$jnx_oids = [
'jnxVirtualChassisPortAdminStatus', 'jnxVirtualChassisPortOperStatus',
'jnxVirtualChassisPortInOctets', 'jnxVirtualChassisPortOutOctets',
'jnxVirtualChassisPortInPkts', 'jnxVirtualChassisPortOutPkts',
'jnxVirtualChassisPortInMcasts', 'jnxVirtualChassisPortOutMcasts',
// ifErrors
'jnxVirtualChassisPortCarrierTrans', 'jnxVirtualChassisPortInCRCAlignErrors',
'jnxVirtualChassisPortUndersizePkts', 'jnxVirtualChassisPortCollisions',
];
foreach ($jnxVirtualChassisMember as $member => $chassis) {
if ($chassis['jnxVirtualChassisMemberRole'] === 'master') {
// Skip master chassis (which already polled by IF-MIB)
print_debug("Skip JUNIPER-VIRTUALCHASSIS-MIB::jnxVirtualChassisPortTable for master");
continue;
}
$jnxVirtualChassisPort = [];
foreach ($jnx_oids as $oid) {
$jnxVirtualChassisPort = snmpwalk_cache_twopart_oid($device, $oid . '.' . $member, $jnxVirtualChassisPort, 'JUNIPER-VIRTUALCHASSIS-MIB', NULL, OBS_SNMP_ALL_MULTILINE);
}
print_debug_vars($jnxVirtualChassisPort[$member]);
foreach ($jnxVirtualChassisPort[$member] as $jnxVirtualChassisPortName => $port) {
$ifDescr = $jnxVirtualChassisPortName . ":vc$member";
// Generate numeric ifIndex based on port name
$ifIndex = string_to_id($ifDescr);
// Append member options
$port = array_merge($port, $chassis);
$port_stats[$ifIndex]['ifDescr'] = $ifDescr;
$port_stats[$ifIndex]['ifName'] = $ifDescr;
$port_stats[$ifIndex]['ifAdminStatus'] = $port['jnxVirtualChassisPortAdminStatus'];
$port_stats[$ifIndex]['ifOperStatus'] = $port['jnxVirtualChassisPortOperStatus'];
$port_stats[$ifIndex]['ifPhysAddress'] = $port['jnxVirtualChassisMemberMacAddBase'];
$port_stats[$ifIndex]['ifType'] = str_contains($ifDescr, '.') ? 'propVirtual' : 'other';
// Stats
$port_stats[$ifIndex]['ifHCInOctets'] = $port['jnxVirtualChassisPortInOctets'];
$port_stats[$ifIndex]['ifHCOutOctets'] = $port['jnxVirtualChassisPortOutOctets'];
$port_stats[$ifIndex]['ifHCInUcastPkts'] = $port['jnxVirtualChassisPortInPkts'];
$port_stats[$ifIndex]['ifHCOutUcastPkts'] = $port['jnxVirtualChassisPortOutPkts'];
$port_stats[$ifIndex]['ifHCInMulticastPkts'] = $port['jnxVirtualChassisPortInMcasts'];
$port_stats[$ifIndex]['ifHCOutMulticastPkts'] = $port['jnxVirtualChassisPortOutMcasts'];
/// FIXME. I not sure about error Oids
$port_stats[$ifIndex]['ifInErrors'] = $port['jnxVirtualChassisPortInCRCAlignErrors'];
$port_stats[$ifIndex]['ifInErrors'] = int_add($port_stats[$ifIndex]['ifInErrors'], $port['jnxVirtualChassisPortUndersizePkts']);
$port_stats[$ifIndex]['ifInErrors'] = int_add($port_stats[$ifIndex]['ifInErrors'], $port['jnxVirtualChassisPortCollisions']);
$port_stats[$ifIndex]['ifOutErrors'] = $port['jnxVirtualChassisPortCarrierTrans'];
}
}
// EOF