mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Use Log facility when Laravel is booted. Update init.php so we can easily boot Laravel for CLI scripts. (and just Eloquent, but that may go away) Move all debug setup into set_debug() function and use that across all scripts. Log Laravel database queries. Send debug output to librenms log file when enabling debug in the webui. Allow for colorized Log CLI output. (currently will leave % tags in log file output) ** Needs testing and perhaps tweaking still. DO NOT DELETE THIS TEXT #### Please note > Please read this information carefully. You can run `./scripts/pre-commit.php` to check your code before submitting. - [x] Have you followed our [code guidelines?](http://docs.librenms.org/Developing/Code-Guidelines/) #### Testers If you would like to test this pull request then please run: `./scripts/github-apply <pr_id>`, i.e `./scripts/github-apply 5926`
203 lines
8.7 KiB
PHP
203 lines
8.7 KiB
PHP
<?php
|
|
/*
|
|
* LibreNMS module to capture Cisco Class-Based QoS Details
|
|
*
|
|
* Copyright (c) 2015 Aaron Daniels <aaron@daniels.id.au>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation, either version 3 of the License, or (at your
|
|
* option) any later version. Please see LICENSE.txt at the top level of
|
|
* the source code distribution for details.
|
|
*/
|
|
|
|
use LibreNMS\RRD\RrdDefinition;
|
|
|
|
if ($device['os_group'] == "cisco") {
|
|
// Define some error messages
|
|
$error_vpn = array();
|
|
$error_vpn[0] = "Other";
|
|
$error_vpn[1] = "Configuration changed";
|
|
$error_vpn[2] = "Control Group information is unavailable";
|
|
$error_vpn[3] = "Data Group range information is unavailable";
|
|
$error_vpn[4] = "Join or Source interface information is unavailable";
|
|
$error_vpn[5] = "VPN name is unavailable";
|
|
$error_vpn[6] = "IP address is missing for Join Interface";
|
|
$error_vpn[7] = "Join Interface is down";
|
|
$error_vpn[8] = "Overlay is administratively shutdown";
|
|
$error_vpn[9] = "Overlay is in delete hold down phase";
|
|
$error_vpn[10] = "VPN is reinitializing";
|
|
$error_vpn[11] = "Site ID information is unavailable";
|
|
$error_vpn[12] = "Site ID mismatch has occurred";
|
|
$error_vpn[13] = "IP address is missing for Source Interface";
|
|
$error_vpn[14] = "Source interface is down";
|
|
$error_vpn[15] = "Changing site identifier";
|
|
$error_vpn[16] = "Changing control group";
|
|
$error_vpn[17] = "Device ID information is unavailable";
|
|
$error_vpn[18] = "Changing device ID";
|
|
$error_vpn[19] = "Cleanup in progress";
|
|
|
|
$error_aed = array();
|
|
$error_aed[0] = "Other";
|
|
$error_aed[1] = "Overlay is Down";
|
|
$error_aed[2] = "Site ID is not configured";
|
|
$error_aed[3] = "Site ID mismatch";
|
|
$error_aed[4] = "Version mismatch";
|
|
$error_aed[5] = "Site VLAN is Down";
|
|
$error_aed[6] = "No extended VLAN is operationally up";
|
|
$error_aed[7] = "No Overlay Adjacency is up";
|
|
$error_aed[8] = "LSPDB sync incomplete";
|
|
$error_aed[9] = "Overlay state down event in progress";
|
|
$error_aed[10] = "ISIS control group sync pending";
|
|
|
|
$error_overlay = array();
|
|
$error_overlay[1] = "active";
|
|
$error_overlay[2] = "notInService";
|
|
$error_overlay[3] = "notReady";
|
|
$error_overlay[4] = "createAndGo";
|
|
$error_overlay[5] = "createAndWait";
|
|
$error_overlay[6] = "destroy";
|
|
|
|
$tmp_module = 'Cisco-OTV';
|
|
|
|
$component = new LibreNMS\Component();
|
|
$options['filter']['type'] = array('=',$tmp_module);
|
|
$options['filter']['disabled'] = array('=',0);
|
|
$components = $component->getComponents($device['device_id'], $options);
|
|
|
|
// We only care about our device id.
|
|
$components = $components[$device['device_id']];
|
|
|
|
// Only collect SNMP data if we have enabled components
|
|
if (is_array($components) && count($components) > 0) {
|
|
// Let's gather the stats..
|
|
$tblOverlayEntry = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.2.1.1');
|
|
$tblAdjacencyDatabaseEntry = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.3.1.1', 0);
|
|
$tblRouteNextHopAddr = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.5.1.1.8', 0);
|
|
$tblVlanEdgeDevIsAed = snmpwalk_array_num($device, '.1.3.6.1.4.1.9.9.810.1.2.2.1.6', 2);
|
|
|
|
// Let's create an array of each remote OTV endpoint and the count of MAC addresses that are reachable via.
|
|
$count_mac = array();
|
|
foreach ($tblRouteNextHopAddr as $k => $v) {
|
|
$count_mac[$v]++;
|
|
}
|
|
// Let's log some debugging
|
|
d_echo("\n\nMAC Addresses: ".print_r($count_mac, true));
|
|
|
|
// Loop through the components and extract the data.
|
|
foreach ($components as $key => &$array) {
|
|
if ($array['otvtype'] == 'overlay') {
|
|
// Let's check the various status' of the overlay
|
|
$message = false;
|
|
$vpn_state = $tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.3'][$array['index']];
|
|
if ($vpn_state != 2) {
|
|
$message .= "VPN Down: ".$error_vpn[$tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.4'][$array['index']]];
|
|
}
|
|
$aed_state = $tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.13'][$array['index']];
|
|
if ($aed_state == 2) {
|
|
$message .= "AED Down: ".$error_aed[$tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.14'][$array['index']]];
|
|
}
|
|
$overlay_state = $tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.23'][$array['index']];
|
|
if ($overlay_state == 2) {
|
|
$message .= "Overlay Down: ".$error_overlay[$tblOverlayEntry['1.3.6.1.4.1.9.9.810.1.2.1.1.24'][$array['index']]];
|
|
}
|
|
|
|
// If we have set a message, we have an error, activate alert.
|
|
if ($message !== false) {
|
|
$array['error'] = $message;
|
|
$array['status'] = 2;
|
|
} else {
|
|
$array['error'] = "";
|
|
$array['status'] = 0;
|
|
}
|
|
|
|
// Time to graph the count of the active VLAN's on this overlay.
|
|
$count_vlan = 0;
|
|
foreach ($tblVlanEdgeDevIsAed['1.3.6.1.4.1.9.9.810.1.2.2.1.6'][$array['index']] as $v) {
|
|
if ($v == 1) {
|
|
$count_vlan++;
|
|
}
|
|
}
|
|
|
|
// Let's log some debugging
|
|
d_echo("\n\nOverlay Component: ".$key."\n");
|
|
d_echo(" Label: ".$array['label']."\n");
|
|
d_echo(" Index: ".$array['index']."\n");
|
|
d_echo(" Status: ".$array['status']."\n");
|
|
d_echo(" Message: ".$array['error']."\n");
|
|
d_echo(" VLAN Count: ".$count_vlan."\n");
|
|
|
|
$label = $array['label'];
|
|
$rrd_name = array('cisco', 'otv', $label, 'vlan');
|
|
$rrd_def = RrdDefinition::make()->addDataset('count', 'GAUGE', 0);
|
|
|
|
$fields = array(
|
|
'count' => $count_vlan
|
|
);
|
|
|
|
$tags = compact('label', 'rrd_name', 'rrd_def');
|
|
data_update($device, 'cisco-otv-vlan', $tags, $fields);
|
|
} elseif ($array['otvtype'] == 'adjacency') {
|
|
$array['uptime'] = $tblAdjacencyDatabaseEntry['1.3.6.1.4.1.9.9.810.1.3.1.1.6.'.$array['index'].'.1.4.'.$array['endpoint']];
|
|
$message = false;
|
|
if ($tblAdjacencyDatabaseEntry['1.3.6.1.4.1.9.9.810.1.3.1.1.5.'.$array['index'].'.1.4.'.$array['endpoint']] != 1) {
|
|
$message .= "Adjacency is Down\n";
|
|
}
|
|
if ($tblAdjacencyDatabaseEntry['1.3.6.1.4.1.9.9.810.1.3.1.1.6.'.$array['index'].'.1.4.'.$array['endpoint']] < $array['uptime']) {
|
|
$message .= "Adjacency has been reset\n";
|
|
}
|
|
|
|
// If we have set a message, we have an error, activate alert.
|
|
if ($message !== false) {
|
|
$array['error'] = $message;
|
|
$array['status'] = 1;
|
|
} else {
|
|
$array['error'] = "";
|
|
$array['status'] = 0;
|
|
}
|
|
|
|
// Let's log some debugging
|
|
d_echo("\n\nAdjacency Component: ".$key."\n");
|
|
d_echo(" Label: ".$array['label']."\n");
|
|
d_echo(" Index: ".$array['index']."\n");
|
|
d_echo(" Status: ".$array['status']."\n");
|
|
d_echo(" Message: ".$array['error']."\n");
|
|
} elseif ($array['otvtype'] == 'endpoint') {
|
|
$count = 0;
|
|
$endpoint = $array['endpoint'];
|
|
|
|
if (isset($count_mac[$endpoint])) {
|
|
$count = $count_mac[$endpoint];
|
|
}
|
|
|
|
// Let's log some debugging
|
|
d_echo("\n\nEndpoint Component: ".$key."\n");
|
|
d_echo(" Label: ".$array['label']."\n");
|
|
d_echo(" MAC Count: ".$count."\n");
|
|
|
|
$rrd_name = array('cisco', 'otv', $endpoint, 'mac');
|
|
$rrd_def = RrdDefinition::make()->addDataset('count', 'GAUGE', 0);
|
|
$fields = array(
|
|
'count' => $count
|
|
);
|
|
|
|
$tags = compact('endpoint', 'rrd_name', 'rrd_def');
|
|
data_update($device, 'cisco-otv-mac', $tags, $fields);
|
|
} // End If
|
|
} // End foreach components
|
|
|
|
// Write the Components back to the DB.
|
|
$component->setComponentPrefs($device['device_id'], $components);
|
|
} // end if count components
|
|
|
|
// Clean-up after yourself!
|
|
unset(
|
|
$components,
|
|
$component,
|
|
$tmp_module,
|
|
$error_vpn,
|
|
$error_aed,
|
|
$error_overlay
|
|
);
|
|
}
|