initial commit; version 22.5.12042

This commit is contained in:
2022-12-12 23:28:25 -05:00
commit af1b03d79f
17653 changed files with 22692970 additions and 0 deletions

View File

@ -0,0 +1,89 @@
<?php
/**
* Observium
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
*
*/
echo(' CISCO-RTTMON-MIB ');
$sla_states = &$GLOBALS['config']['mibs']['CISCO-RTTMON-MIB']['sla_states']; // Events from MIB definitions
$sla_oids = array(
'jitter' => array('rttMonLatestJitterOperRTTMin', 'rttMonLatestJitterOperRTTMax', 'rttMonLatestJitterOperNumOfRTT', 'rttMonLatestJitterOperPacketLossSD', 'rttMonLatestJitterOperPacketLossDS'),
'icmpjitter' => array('rttMonLatestIcmpJitterRTTMin', 'rttMonLatestIcmpJitterRTTMax', 'rttMonLatestIcmpJitterNumRTT', 'rttMonLatestIcmpJitterPktLoss'),
);
$sla_poll = snmpwalk_cache_oid($device, "rttMonLatestRttOperEntry", array(), 'CISCO-RTTMON-MIB');
foreach (dbFetchColumn("SELECT DISTINCT `rtt_type` FROM `slas` WHERE `device_id` = ? AND `rtt_type` != ? AND `deleted` = 0 AND `sla_status` = 'active';", array($device['device_id'], 'echo')) as $rtt_type)
{
switch ($rtt_type)
{
case 'jitter': // Additional data for Jitter
case 'pathjitter':
case 'ethernetJitter':
$sla_poll = snmpwalk_cache_oid($device, "rttMonLatestJitterOperEntry", $sla_poll, 'CISCO-RTTMON-MIB');
break;
case 'icmpjitter': // Additional data for ICMP jitter
$sla_poll = snmpwalk_cache_oid($device, "rttMonLatestIcmpJitterOperEntry", $sla_poll, 'CISCO-RTTMON-ICMP-MIB');
break;
}
}
// Uptime offset for timestamps
$uptime = timeticks_to_sec($poll_device['sysUpTime']);
$uptime_offset = time() - intval($uptime) / 100; /// WARNING. System timezone BOMB
foreach ($sla_poll as $sla_index => $entry)
{
if (!isset($entry['rttMonLatestRttOperCompletionTime']) && !isset($entry['rttMonLatestRttOperSense']))
{
// Skip additional multiindex entries from table
continue;
}
// Convert timestamps to unixtime
$entry['UnixTime'] = intval(timeticks_to_sec($entry['rttMonLatestRttOperTime']) / 100 + $uptime_offset);
$sla_state = array(
'rtt_value' => $entry['rttMonLatestRttOperCompletionTime'],
'rtt_sense' => $entry['rttMonLatestRttOperSense'],
'rtt_unixtime' => $entry['UnixTime'],
);
// SLA event
$sla_state['rtt_event'] = $sla_states[$sla_state['rtt_sense']]['event'];
switch($sla_db[$mib_lower][$sla_index]['rtt_type'])
{
case 'jitter':
case 'pathjitter':
case 'ethernetJitter':
if (is_numeric($entry['rttMonLatestJitterOperNumOfRTT']))
{
$sla_state['rtt_minimum'] = $entry['rttMonLatestJitterOperRTTMin'];
$sla_state['rtt_maximum'] = $entry['rttMonLatestJitterOperRTTMax'];
$sla_state['rtt_success'] = $entry['rttMonLatestJitterOperNumOfRTT'];
$sla_state['rtt_loss'] = $entry['rttMonLatestJitterOperPacketLossSD'] + $entry['rttMonLatestJitterOperPacketLossDS'];
}
break;
case 'icmpjitter':
if (is_numeric($entry['rttMonLatestIcmpJitterNumRTT']))
{
$sla_state['rtt_minimum'] = $entry['rttMonLatestIcmpJitterRTTMin'];
$sla_state['rtt_maximum'] = $entry['rttMonLatestIcmpJitterRTTMax'];
$sla_state['rtt_success'] = $entry['rttMonLatestIcmpJitterNumRTT'];
$sla_state['rtt_loss'] = $entry['rttMonLatestIcmpJitterPktLoss'];
}
break;
}
$cache_sla[$mib_lower][$sla_index] = $sla_state;
}
// EOF

View File

@ -0,0 +1,205 @@
<?php
/**
* Observium
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
*
*/
$mib = 'DISMAN-PING-MIB';
echo("$mib ");
// Base results table
$sla_poll = snmpwalk_cache_oid($device, "pingResultsEntry", array(), $mib);
// Additional mibs for vendor specific Types
$vendor_mib = FALSE;
if (is_device_mib($device, 'JUNIPER-PING-MIB', FALSE))
{
// JUNIPER-PING-MIB
echo("JUNIPER-PING-MIB ");
$vendor_mib = 'JUNIPER-PING-MIB';
$sla_poll = snmpwalk_cache_oid($device, "jnxPingResultsEntry", $sla_poll, $vendor_mib);
//$sla_poll = snmpwalk_cache_oid($device, "jnxPingResultsStatus", $sla_poll, $vendor_mib);
//$sla_poll = snmpwalk_cache_oid($device, "jnxPingResultsTime", $sla_poll, $vendor_mib);
}
elseif (is_device_mib($device, 'HH3C-NQA-MIB', FALSE))
{
// HH3C-NQA-MIB
echo("HH3C-NQA-MIB ");
$vendor_mib = 'HH3C-NQA-MIB';
$sla_poll = snmpwalk_cache_oid($device, "hh3cNqaResultsEntry", $sla_poll, $vendor_mib);
//$flags = OBS_SNMP_ALL ^ OBS_QUOTES_STRIP;
//$sla_history = snmpwalk_cache_threepart_oid($device, "Hh3cNqaStatisticsResultsEntry", array(), $vendor_mib, NULL, $flags);
// walk of separate oids not do sppedup and in some situations longer
//foreach ($sla_history as $sla_owner => $data)
//{
// foreach ($data as $sla_name => $entry)
// {
// $index = $sla_owner . '.' . $sla_name;
// // Find last history entry (by highest key)
// $last = max(array_keys($entry));
//
// // Add this entry to main poll array and get timestamp entry
// //$sla_poll[$index] = array_merge($sla_poll[$index], $entry[$last]);
// }
//}
//unset($sla_history, $last, $index);
}
elseif (is_device_mib($device, 'HUAWEI-DISMAN-PING-MIB', FALSE))
{
// HUAWEI-DISMAN-PING-MIB
echo("HUAWEI-DISMAN-PING-MIB ");
$vendor_mib = 'HUAWEI-DISMAN-PING-MIB';
/* Hrm, not sure if we require extended stats there
$sla_poll = snmpwalk_cache_oid($device, "hwpingResultsEntry", $sla_poll, $vendor_mib);
// HUAWEI Jitter Statistics
if (dbExist('slas', '`device_id` = ? AND `rtt_type` = ? AND `deleted` = 0 AND `sla_status` = ?', [$device['device_id'], 'jitter', 'active']))
{
$sla_poll = snmpwalk_cache_oid($device, "hwPingJitterStatsEntry", $sla_poll, $vendor_mib);
}
*/
} else {
// Heh, DISMAN-PING-MIB stores correct timestamp and states in huge history table, here trick for get last one
// FIXME need found more speedup way! but currently only vendor specific is best!
$flags = OBS_SNMP_ALL ^ OBS_QUOTES_STRIP;
$sla_history = snmpwalk_cache_threepart_oid($device, "pingProbeHistoryStatus", array(), $mib, NULL, $flags);
//$sla_history = snmpwalk_cache_threepart_oid($device, "pingProbeHistoryTime", $sla_history, $mib, NULL, $flags);
foreach ($sla_history as $sla_owner => $data)
{
foreach ($data as $sla_index => $entry)
{
$index = $sla_owner . '.' . $sla_index;
// Find last history entry (by highest key)
$last = max(array_keys($entry));
// Add this entry to main poll array and get timestamp entry
$sla_poll[$index]['pingProbeHistoryStatus'] = $entry[$last]['pingProbeHistoryStatus'];
//$sla_poll[$index]['pingProbeHistoryTime'] = $entry[$last]['pingProbeHistoryTime'];
}
}
unset($sla_history, $last, $index);
}
print_debug_vars($sla_poll);
// SLA states from MIB definitions
$sla_states = &$GLOBALS['config']['mibs'][$mib]['sla_states'];
foreach ($sla_poll as $index => $entry)
{
if (($vendor_mib == 'JUNIPER-PING-MIB' && !isset($entry['jnxPingResultsStatus'])) || !isset($entry['pingResultsOperStatus']))
{
// Skip additional multiindex entries from table
continue;
}
list($sla_owner, $sla_index) = explode('.', $index, 2);
$sla_state = array(
'rtt_value' => $entry['pingResultsAverageRtt'],
'rtt_minimum' => $entry['pingResultsMinRtt'],
'rtt_maximum' => $entry['pingResultsMaxRtt'],
'rtt_success' => $entry['pingResultsProbeResponses'],
'rtt_loss' => $entry['pingResultsSentProbes'] - $entry['pingResultsProbeResponses'],
);
// Vendor specific changes
switch ($vendor_mib)
{
case 'JUNIPER-PING-MIB':
$sla_state['rtt_value'] = $entry['jnxPingResultsRttUs'] / 1000;
$sla_state['rtt_minimum'] = $entry['jnxPingResultsMinRttUs'] / 1000;
$sla_state['rtt_maximum'] = $entry['jnxPingResultsMaxRttUs'] / 1000;
// Standard deviation
$sla_state['rtt_stddev'] = $entry['jnxPingResultsStdDevRttUs'] / 1000;
$sla_state['rtt_sense'] = $entry['jnxPingResultsStatus'];
$entry['UnixTime'] = $entry['jnxPingResultsTime'];
break;
case 'HH3C-NQA-MIB':
case 'HUAWEI-DISMAN-PING-MIB':
// Note, Stats table is not correct place for values, because in stats used long intervals > 200-300 sec
//$sla_state['rtt_value'] = $entry['hh3cNqaStatResAverageRtt'];
//$sla_state['rtt_minimum'] = $entry['hh3cNqaStatResMinRtt'];
//$sla_state['rtt_maximum'] = $entry['hh3cNqaStatResMaxRtt'];
// HH3C-NQA-MIB not has any status/sense entry, use pseudo sense
// FIXME. Need more snmpwalks examples with other errors
//HH3C-NQA-MIB::hh3cNqaResultsRttNumDisconnects."cncback"."1" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttNumDisconnects."cncmaster"."oper" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttNumDisconnects."imcl2topo"."ping" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttTimeouts."cncback"."1" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttTimeouts."cncmaster"."oper" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttTimeouts."imcl2topo"."ping" = Gauge32: 1
//HH3C-NQA-MIB::hh3cNqaResultsRttBusies."cncback"."1" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttBusies."cncmaster"."oper" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttBusies."imcl2topo"."ping" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttNoConnections."cncback"."1" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttNoConnections."cncmaster"."oper" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttNoConnections."imcl2topo"."ping" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttDrops."cncback"."1" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttDrops."cncmaster"."oper" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttDrops."imcl2topo"."ping" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttSequenceErrors."cncback"."1" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttSequenceErrors."cncmaster"."oper" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttSequenceErrors."imcl2topo"."ping" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttStatsErrors."cncback"."1" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttStatsErrors."cncmaster"."oper" = Gauge32: 0
//HH3C-NQA-MIB::hh3cNqaResultsRttStatsErrors."imcl2topo"."ping" = Gauge32: 0
// HUAWEI-DISMAN-PING-MIB::hwpingResultsRttNumDisconnects."slatest"."besteffort" = Gauge32: 0
// HUAWEI-DISMAN-PING-MIB::hwpingResultsRttTimeouts."slatest"."besteffort" = Gauge32: 0
// HUAWEI-DISMAN-PING-MIB::hwpingResultsRttBusies."slatest"."besteffort" = Gauge32: 0
// HUAWEI-DISMAN-PING-MIB::hwpingResultsRttNoConnections."slatest"."besteffort" = Gauge32: 0
// HUAWEI-DISMAN-PING-MIB::hwpingResultsRttDrops."slatest"."besteffort" = Gauge32: 0
// HUAWEI-DISMAN-PING-MIB::hwpingResultsRttSequenceErrors."slatest"."besteffort" = Gauge32: 0
// HUAWEI-DISMAN-PING-MIB::hwpingResultsRttStatsErrors."slatest"."besteffort" = Gauge32: 0
// HUAWEI-DISMAN-PING-MIB::hwpingResultsMaxDelaySD."slatest"."besteffort" = Gauge32: 24 milliseconds
// HUAWEI-DISMAN-PING-MIB::hwpingResultsMaxDelayDS."slatest"."besteffort" = Gauge32: 24 milliseconds
// HUAWEI-DISMAN-PING-MIB::hwpingResultsLostPacketRatio."slatest"."besteffort" = Gauge32: 0 milliseconds
if ($sla_state['rtt_success'] > 0)
{
if ($sla_state['rtt_value'] > 0)
{
$sla_state['rtt_sense'] = 'responseReceived';
}
else if ($entry['hh3cNqaResultsRttTimeouts'] > 0)
{
$sla_state['rtt_sense'] = 'requestTimedOut';
} else {
$sla_state['rtt_sense'] = 'internalError'; // or 'unknown'
}
} else {
if ($entry['hh3cNqaResultsRttTimeouts'] > 0)
{
$sla_state['rtt_sense'] = 'requestTimedOut';
} else{
$sla_state['rtt_sense'] = 'noRouteToTarget';
}
}
//$sla_state['rtt_sense'] = $entry['pingResultsOperStatus'];
$entry['UnixTime'] = $entry['pingResultsLastGoodProbe'];
break;
default:
// FIXME. in DISMAN-PING-MIB exist only 'pingResultsRttSumOfSquares', I not know how calculate STDDEV from it
$sla_state['rtt_sense'] = $entry['pingProbeHistoryStatus'];
$entry['UnixTime'] = $entry['pingResultsLastGoodProbe'];
}
$sla_state['rtt_unixtime'] = datetime_to_unixtime($entry['UnixTime']);
// SLA event
$sla_state['rtt_event'] = $sla_states[$sla_state['rtt_sense']]['event'];
// Note, here used complex index (owner.index)
$cache_sla[$mib_lower][$index] = $sla_state;
}
// EOF

View File

@ -0,0 +1,91 @@
<?php
/**
* Observium
*
* This file is part of Observium.
*
* @package observium
* @subpackage poller
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
*
*/
echo(' HPICF-IPSLA-MIB ');
$sla_states = &$GLOBALS['config']['mibs']['HPICF-IPSLA-MIB']['sla_states']; // Events from MIB definitions
// Derp table, not have latest RTT time, mostly Oids is empty
$sla_poll = snmpwalk_cache_oid($device, "hpicfIpSlaHistMinRTT", array(), 'HPICF-IPSLA-MIB');
$sla_poll = snmpwalk_cache_oid($device, "hpicfIpSlaHistMaxRTT", $sla_poll, 'HPICF-IPSLA-MIB');
$sla_poll = snmpwalk_cache_oid($device, "hpicfIpSlaHistPacketLoss", $sla_poll, 'HPICF-IPSLA-MIB');
$sla_poll = snmpwalk_cache_oid($device, "hpicfIpSlaHistSentPktNum", $sla_poll, 'HPICF-IPSLA-MIB');
$sla_poll = snmpwalk_cache_oid($device, "hpicfIpSlaAttrNumPkts", $sla_poll, 'HPICF-IPSLA-MIB');
// History table
$sla_hist = snmpwalk_multipart_oid($device, "hpicfIpSlaHistSummStartTime", array(), 'HPICF-IPSLA-MIB');
$sla_hist = snmpwalk_multipart_oid($device, "hpicfIpSlaHistSummRTT", $sla_hist, 'HPICF-IPSLA-MIB');
$sla_hist = snmpwalk_multipart_oid($device, "hpicfIpSlaHistSummStatus", $sla_hist, 'HPICF-IPSLA-MIB');
//print_debug_vars($sla_poll);
//print_debug_vars($sla_hist);
foreach ($sla_hist as $sla_index => $hist)
{
// Find latest entry
$unixtime = 0; // initial
foreach ($hist as $hist_index => $tmp)
{
if ($tmp['hpicfIpSlaHistSummStartTime'] > $unixtime)
{
$unixtime = $tmp['hpicfIpSlaHistSummStartTime'];
$entry = $tmp;
}
}
$entry = array_merge($sla_poll[$sla_index], $entry);
//print_vars($entry);
// Use "named" status
switch ($entry['hpicfIpSlaHistSummStatus'])
{
case 0:
$entry['hpicfIpSlaHistSummStatus'] = 'alert';
break;
case 1:
$entry['hpicfIpSlaHistSummStatus'] = 'ok';
break;
default:
// not sure
$entry['hpicfIpSlaHistSummStatus'] = 'unknown';
}
// Convert timestamps to unixtime
$entry['UnixTime'] = $entry['hpicfIpSlaHistSummStartTime'];
$sla_state = array(
'rtt_value' => $entry['hpicfIpSlaHistSummRTT'],
'rtt_sense' => $entry['hpicfIpSlaHistSummStatus'],
'rtt_unixtime' => $entry['UnixTime'],
);
// SLA event
$sla_state['rtt_event'] = $sla_states[$sla_state['rtt_sense']]['event'];
$sla_state['rtt_minimum'] = $entry['hpicfIpSlaHistMinRTT'];
$sla_state['rtt_maximum'] = $entry['hpicfIpSlaHistMaxRTT'];
if ($entry['hpicfIpSlaHistSentPktNum'] > 0)
{
// HPICF-IPSLA-MIB::hpicfIpSlaHistSentPktNum.4 = Gauge32: 10
// HPICF-IPSLA-MIB::hpicfIpSlaHistPacketLoss.4 = Gauge32: 100
$sla_state['rtt_loss'] = ($entry['hpicfIpSlaHistPacketLoss'] > $entry['hpicfIpSlaHistSentPktNum']) ? $entry['hpicfIpSlaHistSentPktNum'] : $entry['hpicfIpSlaHistPacketLoss'];
$sla_state['rtt_success'] = $entry['hpicfIpSlaHistSentPktNum'] - $sla_state['rtt_loss'];
} else {
$sla_state['rtt_loss'] = ($entry['hpicfIpSlaHistPacketLoss'] > $entry['hpicfIpSlaAttrNumPkts']) ? $entry['hpicfIpSlaAttrNumPkts'] : $entry['hpicfIpSlaHistPacketLoss'];
$sla_state['rtt_success'] = $entry['hpicfIpSlaAttrNumPkts'] - $sla_state['rtt_loss'];
}
$cache_sla[$mib_lower][$sla_index] = $sla_state;
}
// EOF