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:
Maikel de Boer
2021-01-15 15:28:22 +01:00
committed by GitHub
parent b07b81021a
commit c06922de43
5 changed files with 67 additions and 3 deletions

View File

@@ -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;

View File

@@ -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']) {

View 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';

View File

@@ -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>

View File

@@ -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>