mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Nokia sap graph (#12432)
* SAP counters to database * making rrd works * Finished SAP polling + graphing * cleaning up * resolved ./lnms dev:check failure * added db_schema and fixed style * Fixed style * recoverd file * fixed * Clean up * fixed * using graphPopup function
This commit is contained in:
@@ -41,6 +41,7 @@ use LibreNMS\Interfaces\Discovery\MplsDiscovery;
|
|||||||
use LibreNMS\Interfaces\Discovery\Sensors\WirelessPowerDiscovery;
|
use LibreNMS\Interfaces\Discovery\Sensors\WirelessPowerDiscovery;
|
||||||
use LibreNMS\Interfaces\Polling\MplsPolling;
|
use LibreNMS\Interfaces\Polling\MplsPolling;
|
||||||
use LibreNMS\OS;
|
use LibreNMS\OS;
|
||||||
|
use LibreNMS\RRD\RrdDefinition;
|
||||||
|
|
||||||
class Timos extends OS implements MplsDiscovery, MplsPolling, WirelessPowerDiscovery
|
class Timos extends OS implements MplsDiscovery, MplsPolling, WirelessPowerDiscovery
|
||||||
{
|
{
|
||||||
@@ -280,6 +281,7 @@ class Timos extends OS implements MplsDiscovery, MplsPolling, WirelessPowerDisco
|
|||||||
public function discoverMplsSaps($svcs)
|
public function discoverMplsSaps($svcs)
|
||||||
{
|
{
|
||||||
$mplsSapCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sapBaseInfoTable', [], 'TIMETRA-SAP-MIB', 'nokia', '-OQUst');
|
$mplsSapCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sapBaseInfoTable', [], 'TIMETRA-SAP-MIB', 'nokia', '-OQUst');
|
||||||
|
$mplsSapTrafficCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sapBaseStatsTable', [], 'TIMETRA-SAP-MIB', 'nokia', '-OQUst');
|
||||||
|
|
||||||
$saps = collect();
|
$saps = collect();
|
||||||
|
|
||||||
@@ -296,6 +298,8 @@ class Timos extends OS implements MplsDiscovery, MplsPolling, WirelessPowerDisco
|
|||||||
}
|
}
|
||||||
[$svcId, $sapPortId, $sapEncapValue] = explode('.', $key);
|
[$svcId, $sapPortId, $sapEncapValue] = explode('.', $key);
|
||||||
$svc_id = $svcs->firstWhere('svc_oid', $svcId)->svc_id;
|
$svc_id = $svcs->firstWhere('svc_oid', $svcId)->svc_id;
|
||||||
|
$traffic_id = $svcId . '.' . $sapPortId . '.' . $this->nokiaEncap($sapEncapValue);
|
||||||
|
|
||||||
$saps->push(new MplsSap([
|
$saps->push(new MplsSap([
|
||||||
'svc_id' => $svc_id,
|
'svc_id' => $svc_id,
|
||||||
'svc_oid' => $svcId,
|
'svc_oid' => $svcId,
|
||||||
@@ -309,6 +313,10 @@ class Timos extends OS implements MplsDiscovery, MplsPolling, WirelessPowerDisco
|
|||||||
'sapOperStatus' => $value['sapOperStatus'],
|
'sapOperStatus' => $value['sapOperStatus'],
|
||||||
'sapLastMgmtChange' => round($value['sapLastMgmtChange'] / 100),
|
'sapLastMgmtChange' => round($value['sapLastMgmtChange'] / 100),
|
||||||
'sapLastStatusChange' => round($value['sapLastStatusChange'] / 100),
|
'sapLastStatusChange' => round($value['sapLastStatusChange'] / 100),
|
||||||
|
'sapIngressBytes' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsIngressPchipOfferedLoPrioOctets'],
|
||||||
|
'sapEgressBytes' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsEgressQchipForwardedOutProfOctets'],
|
||||||
|
'sapIngressDroppedBytes' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsIngressQchipDroppedLoPrioOctets'],
|
||||||
|
'sapEgressDroppedBytes' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsEgressQchipDroppedOutProfOctets'],
|
||||||
]));
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -622,6 +630,7 @@ class Timos extends OS implements MplsDiscovery, MplsPolling, WirelessPowerDisco
|
|||||||
public function pollMplsSaps($svcs)
|
public function pollMplsSaps($svcs)
|
||||||
{
|
{
|
||||||
$mplsSapCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sapBaseInfoTable', [], 'TIMETRA-SAP-MIB', 'nokia', '-OQUst');
|
$mplsSapCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sapBaseInfoTable', [], 'TIMETRA-SAP-MIB', 'nokia', '-OQUst');
|
||||||
|
$mplsSapTrafficCache = snmpwalk_cache_multi_oid($this->getDeviceArray(), 'sapBaseStatsTable', [], 'TIMETRA-SAP-MIB', 'nokia', '-OQUst');
|
||||||
|
|
||||||
$saps = collect();
|
$saps = collect();
|
||||||
|
|
||||||
@@ -641,6 +650,7 @@ class Timos extends OS implements MplsDiscovery, MplsPolling, WirelessPowerDisco
|
|||||||
}
|
}
|
||||||
[$svcId, $sapPortId, $sapEncapValue] = explode('.', $key);
|
[$svcId, $sapPortId, $sapEncapValue] = explode('.', $key);
|
||||||
$svc_id = $svcs->firstWhere('svc_oid', $svcId)->svc_id;
|
$svc_id = $svcs->firstWhere('svc_oid', $svcId)->svc_id;
|
||||||
|
$traffic_id = $svcId . '.' . $sapPortId . '.' . $this->nokiaEncap($sapEncapValue);
|
||||||
|
|
||||||
$saps->push(new MplsSap([
|
$saps->push(new MplsSap([
|
||||||
'svc_id' => $svc_id,
|
'svc_id' => $svc_id,
|
||||||
@@ -657,6 +667,29 @@ class Timos extends OS implements MplsDiscovery, MplsPolling, WirelessPowerDisco
|
|||||||
'sapLastMgmtChange' => round($value['sapLastMgmtChange'] / 100),
|
'sapLastMgmtChange' => round($value['sapLastMgmtChange'] / 100),
|
||||||
'sapLastStatusChange' => round($value['sapLastStatusChange'] / 100),
|
'sapLastStatusChange' => round($value['sapLastStatusChange'] / 100),
|
||||||
]));
|
]));
|
||||||
|
//create SAP graphs
|
||||||
|
$rrd_name = safename('sap-' . $traffic_id);
|
||||||
|
$rrd_def = RrdDefinition::make()
|
||||||
|
->addDataset('sapIngressBits', 'COUNTER', 0)
|
||||||
|
->addDataset('sapEgressBits', 'COUNTER', 0)
|
||||||
|
->addDataset('sapIngressDroppedBits', 'COUNTER', 0)
|
||||||
|
->addDataset('sapEgressDroppedBits', 'COUNTER', 0);
|
||||||
|
|
||||||
|
$fields = [
|
||||||
|
'sapIngressBits' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsIngressPchipOfferedLoPrioOctets'] * 8,
|
||||||
|
'sapEgressBits' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsEgressQchipForwardedOutProfOctets'] * 8,
|
||||||
|
'sapIngressDroppedBits' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsIngressQchipDroppedLoPrioOctets'] * 8,
|
||||||
|
'sapEgressDroppedBits' => $mplsSapTrafficCache[$traffic_id]['sapBaseStatsEgressQchipDroppedOutProfOctets'] * 8,
|
||||||
|
];
|
||||||
|
|
||||||
|
$tags = [
|
||||||
|
'traffic_id' => $traffic_id,
|
||||||
|
'rrd_name' => $rrd_name,
|
||||||
|
'rrd_def' => $rrd_def,
|
||||||
|
];
|
||||||
|
|
||||||
|
data_update($this->getDeviceArray(), 'sap', $tags, $fields);
|
||||||
|
$this->enableGraph('sap');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $saps;
|
return $saps;
|
||||||
|
@@ -571,6 +571,11 @@ function generate_bill_url($bill, $vars = [])
|
|||||||
return generate_url(['page' => 'bill', 'bill_id' => $bill['bill_id']], $vars);
|
return generate_url(['page' => 'bill', 'bill_id' => $bill['bill_id']], $vars);
|
||||||
}//end generate_bill_url()
|
}//end generate_bill_url()
|
||||||
|
|
||||||
|
function generate_sap_url($sap, $vars = [])
|
||||||
|
{
|
||||||
|
return \LibreNMS\Util\Url::graphPopup(['device' => $sap['device_id'], 'page' => 'graphs', 'type' => 'device_sap', 'tab' => 'routing', 'proto' => 'mpls', 'view' => 'saps', 'traffic_id' => $sap['svc_oid'] . '.' . $sap['sapPortId'] . '.' . $sap['sapEncapValue']], $vars);
|
||||||
|
}//end generate_sap_url()
|
||||||
|
|
||||||
function generate_port_image($args)
|
function generate_port_image($args)
|
||||||
{
|
{
|
||||||
if (! $args['bg']) {
|
if (! $args['bg']) {
|
||||||
|
26
includes/html/graphs/device/sap.inc.php
Normal file
26
includes/html/graphs/device/sap.inc.php
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
$rrd_filename = rrd_name($device['hostname'], 'sap-' . $vars['traffic_id']);
|
||||||
|
|
||||||
|
$stats = [
|
||||||
|
'sapIngressBits' => 'Ingress Bits',
|
||||||
|
'sapEgressBits' => 'Egress Bits',
|
||||||
|
'sapIngressDroppedBi' => 'Ingress Drops Bits',
|
||||||
|
'sapEgressDroppedBit' => 'Egress Drops Bits',
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($stats as $stat => $descr) {
|
||||||
|
$i++;
|
||||||
|
$rrd_list[$i]['filename'] = $rrd_filename;
|
||||||
|
$rrd_list[$i]['descr'] = $descr;
|
||||||
|
$rrd_list[$i]['ds'] = $stat;
|
||||||
|
if (strpos($stat, 'Out') !== false || strpos($stat, 'Retrans') !== false || strpos($stat, 'Attempt') !== false) {
|
||||||
|
$rrd_list[$i]['invert'] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$colours = 'mixed';
|
||||||
|
|
||||||
|
$unit_text = 'SAP Traffic';
|
||||||
|
|
||||||
|
require 'includes/html/graphs/generic_multi_line.inc.php';
|
@@ -469,8 +469,8 @@ if ($vars['view'] == 'saps') {
|
|||||||
$operstate_status_color = 'danger';
|
$operstate_status_color = 'danger';
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "<tr bgcolor=$bg_colour>
|
echo "<tr bgcolor=$bg_colour>" . '
|
||||||
<td>" . $sap['svc_oid'] . '</td>
|
<td>' . generate_sap_url($sap, $sap['svc_oid']) . '</td>
|
||||||
<td>' . generate_port_link($port) . '</td>
|
<td>' . generate_port_link($port) . '</td>
|
||||||
<td>' . $sap['sapEncapValue'] . '</td>
|
<td>' . $sap['sapEncapValue'] . '</td>
|
||||||
<td>' . $sap['sapType'] . '</td>
|
<td>' . $sap['sapType'] . '</td>
|
||||||
|
@@ -478,7 +478,7 @@ if ($vars['view'] == 'saps') {
|
|||||||
|
|
||||||
echo "<tr bgcolor=$bg_colour>
|
echo "<tr bgcolor=$bg_colour>
|
||||||
<td>" . generate_device_link($device, 0, ['tab' => 'routing', 'proto' => 'mpls', 'view' => 'saps']) . '</td>
|
<td>" . generate_device_link($device, 0, ['tab' => 'routing', 'proto' => 'mpls', 'view' => 'saps']) . '</td>
|
||||||
<td>' . $sap['svc_oid'] . '</td>
|
<td>' . generate_sap_url($sap, $sap['svc_oid']) . '</td>
|
||||||
<td>' . generate_port_link($port) . '</td>
|
<td>' . generate_port_link($port) . '</td>
|
||||||
<td>' . $sap['sapEncapValue'] . '</td>
|
<td>' . $sap['sapEncapValue'] . '</td>
|
||||||
<td>' . $sap['sapType'] . '</td>
|
<td>' . $sap['sapType'] . '</td>
|
||||||
|
Reference in New Issue
Block a user