Files
librenms/html/pages/device.inc.php
T
Aaron Daniels 8f4dbb5338 Cisco OTV
Implements the CISCO-OTV-MIB to retrieve OTV counters from Cisco devices.
This collects information on the configured Overlays and Adjacencies

Statistics are collected for the amount of VLAN's on each overlay and the amount of MAC addresses available over each OTV endpoint.
OTV alerts are collected and generated if the appropriate alerting rules exist.

Data is displayed under routing at both the global and device level.

Includes function snmpwalk_array_num, which performs a numeric SNMPWalk and returns an array containing $count indexes
One Index:
 From: 1.3.6.1.4.1.9.9.166.1.15.1.1.27.18.655360 = 0
 To: $array['1.3.6.1.4.1.9.9.166.1.15.1.1.27.18']['655360'] = 0
Two Indexes:
 From: 1.3.6.1.4.1.9.9.166.1.15.1.1.27.18.655360 = 0
 To: $array['1.3.6.1.4.1.9.9.166.1.15.1.1.27']['18']['655360'] = 0
And so on...
2016-01-21 22:04:20 +10:00

427 lines
19 KiB
PHP

<?php
if ($vars['tab'] == 'port' && is_numeric($vars['device']) && port_permitted($vars['port'])) {
$check_device = get_device_id_by_port_id($vars['port']);
$permit_ports = 1;
}
if (!is_numeric($vars['device'])) {
$vars['device'] = device_by_name($vars['device']);
}
if (device_permitted($vars['device']) || $check_device == $vars['device']) {
$selected['iface'] = 'selected';
$tab = str_replace('.', '', mres($vars['tab']));
if (!$tab) {
$tab = 'overview';
}
$select[$tab] = 'active';
$device = device_by_id_cache($vars['device']);
$attribs = get_dev_attribs($device['device_id']);
$entity_state = get_dev_entity_state($device['device_id']);
// print_r($entity_state);
$pagetitle[] = $device['hostname'];
if ($config['os'][$device['os']]['group']) {
$device['os_group'] = $config['os'][$device['os']]['group'];
}
echo '<div class="panel panel-default">';
echo '<table class="device-header-table" style="margin: 0px 7px 7px 7px;" cellspacing="0" class="devicetable" width="99%">';
require 'includes/device-header.inc.php';
echo '</table>';
echo '</div>';
if (device_permitted($device['device_id'])) {
echo '<ul class="nav nav-tabs">';
if ($config['show_overview_tab']) {
echo '
<li class="'.$select['overview'].'">
<a href="'.generate_device_url($device, array('tab' => 'overview')).'">
<img src="images/16/server_lightning.png" align="absmiddle" border="0"> Overview
</a>
</li>';
}
echo '<li class="'.$select['graphs'].'">
<a href="'.generate_device_url($device, array('tab' => 'graphs')).'">
<img src="images/16/server_chart.png" align="absmiddle" border="0"> Graphs
</a>
</li>';
$health = dbFetchCell("SELECT COUNT(*) FROM storage WHERE device_id = '" . $device['device_id'] . "'") +
dbFetchCell("SELECT COUNT(sensor_id) FROM sensors WHERE device_id = '" . $device['device_id'] . "'") +
dbFetchCell("SELECT COUNT(*) FROM mempools WHERE device_id = '" . $device['device_id'] . "'") +
dbFetchCell("SELECT COUNT(*) FROM processors WHERE device_id = '" . $device['device_id'] . "'") +
count_mib_health($device);
if ($health) {
echo '<li class="'.$select['health'].'">
<a href="'.generate_device_url($device, array('tab' => 'health')).'">
<img src="images/icons/sensors.png" align="absmiddle" border="0" /> Health
</a>
</li>';
}
if (@dbFetchCell("SELECT COUNT(app_id) FROM applications WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['apps'].'">
<a href="'.generate_device_url($device, array('tab' => 'apps')).'">
<img src="images/icons/apps.png" align="absmiddle" border="0" /> Apps
</a>
</li>';
}
if (@dbFetchCell("SELECT 1 FROM processes WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['processes'].'">
<a href="'.generate_device_url($device, array('tab' => 'processes')).'">
<img src="images/16/application_osx_terminal.png" align="absmiddle" border="0" /> Processes
</a>
</li>';
}
if (isset($config['collectd_dir']) && is_dir($config['collectd_dir'].'/'.$device['hostname'].'/')) {
echo '<li class="'.$select['collectd'].'">
<a href="'.generate_device_url($device, array('tab' => 'collectd')).'">
<img src="images/16/chart_line.png" align="absmiddle" border="0" /> CollectD
</a>
</li>';
}
if (@dbFetchCell("SELECT COUNT(mplug_id) FROM munin_plugins WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['munin'].'">
<a href="'.generate_device_url($device, array('tab' => 'munin')).'">
<img src="images/16/chart_line.png" align="absmiddle" border="0" /> Munin
</a>
</li>';
}
if (@dbFetchCell("SELECT COUNT(port_id) FROM ports WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['ports'].$select['port'].'">
<a href="'.generate_device_url($device, array('tab' => 'ports')).'">
<img src="images/16/connect.png" align="absmiddle" border="0" /> Ports
</a>
</li>';
}
if (@dbFetchCell("SELECT COUNT(sla_id) FROM slas WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['slas'].$select['sla'].'">
<a href="'.generate_device_url($device, array('tab' => 'slas')).'">
<img src="images/16/chart_line.png" align="absmiddle" border="0" /> SLAs
</a>
</li>';
}
if (@dbFetchCell("SELECT COUNT(accesspoint_id) FROM access_points WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['accesspoints'].'">
<a href="'.generate_device_url($device, array('tab' => 'accesspoints')).'">
<img src="images/icons/wireless.png" align="absmiddle" border="0" /> Access Points
</a>
</li>';
}
$smokeping_files = get_smokeping_files($device);
if (count($smokeping_files['in'][$device['hostname']]) || count($smokeping_files['out'][$device['hostname']])) {
echo '<li class="'.$select['latency'].'">
<a href="'.generate_device_url($device, array('tab' => 'latency')).'">
<img src="images/16/arrow_undo.png" align="absmiddle" border="0" /> Ping
</a>
</li>';
}
if (@dbFetchCell("SELECT COUNT(vlan_id) FROM vlans WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['vlans'].'">
<a href="'.generate_device_url($device, array('tab' => 'vlans')).'">
<img src="images/16/vlans.png" align="absmiddle" border="0" /> VLANs
</a>
</li>';
}
if (@dbFetchCell("SELECT COUNT(id) FROM vminfo WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['vm'].'">
<a href="'.generate_device_url($device, array('tab' => 'vm')).'">
<img src="images/16/server_cog.png" align="absmiddle" border="0" /> Virtual Machines
</a>
</li>';
}
// $loadbalancer_tabs is used in device/loadbalancer/ to build the submenu. we do it here to save queries
if ($device['os'] == 'netscaler')
// Netscaler
{
$device_loadbalancer_count['netscaler_vsvr'] = dbFetchCell('SELECT COUNT(*) FROM `netscaler_vservers` WHERE `device_id` = ?', array($device['device_id']));
if ($device_loadbalancer_count['netscaler_vsvr']) {
$loadbalancer_tabs[] = 'netscaler_vsvr';
}
}
if ($device['os'] == 'acsw') {
// Cisco ACE
$device_loadbalancer_count['loadbalancer_vservers'] = dbFetchCell('SELECT COUNT(*) FROM `loadbalancer_vservers` WHERE `device_id` = ?', array($device['device_id']));
if ($device_loadbalancer_count['loadbalancer_vservers']) {
$loadbalancer_tabs[] = 'loadbalancer_vservers';
}
}
if (is_array($loadbalancer_tabs)) {
echo '<li class="'.$select['loadbalancer'].'">
<a href="'.generate_device_url($device, array('tab' => 'loadbalancer')).'">
<img src="images/icons/loadbalancer.png" align="absmiddle" border="0" /> Load Balancer
</a>
</li>';
}
// $routing_tabs is used in device/routing/ to build the tabs menu. we built it here to save some queries
$device_routing_count['loadbalancer_rservers'] = dbFetchCell('SELECT COUNT(*) FROM `loadbalancer_rservers` WHERE `device_id` = ?', array($device['device_id']));
if ($device_routing_count['loadbalancer_rservers']) {
$routing_tabs[] = 'loadbalancer_rservers';
}
$device_routing_count['ipsec_tunnels'] = dbFetchCell('SELECT COUNT(*) FROM `ipsec_tunnels` WHERE `device_id` = ?', array($device['device_id']));
if ($device_routing_count['ipsec_tunnels']) {
$routing_tabs[] = 'ipsec_tunnels';
}
$device_routing_count['bgp'] = dbFetchCell('SELECT COUNT(*) FROM `bgpPeers` WHERE `device_id` = ?', array($device['device_id']));
if ($device_routing_count['bgp']) {
$routing_tabs[] = 'bgp';
}
$device_routing_count['ospf'] = dbFetchCell("SELECT COUNT(*) FROM `ospf_instances` WHERE `ospfAdminStat` = 'enabled' AND `device_id` = ?", array($device['device_id']));
if ($device_routing_count['ospf']) {
$routing_tabs[] = 'ospf';
}
$device_routing_count['cef'] = dbFetchCell('SELECT COUNT(*) FROM `cef_switching` WHERE `device_id` = ?', array($device['device_id']));
if ($device_routing_count['cef']) {
$routing_tabs[] = 'cef';
}
$device_routing_count['vrf'] = @dbFetchCell('SELECT COUNT(*) FROM `vrfs` WHERE `device_id` = ?', array($device['device_id']));
if ($device_routing_count['vrf']) {
$routing_tabs[] = 'vrf';
}
require_once "../includes/component.php";
$COMPONENT = new component();
$options['type'] = 'Cisco-OTV';
$options['filter']['device_id'] = array('=',$device['device_id']);
$OTV = $COMPONENT->getComponents(null,$options);
$device_routing_count['cisco-otv'] = count($OTV);
if ($device_routing_count['cisco-otv'] > 0) {
$routing_tabs[] = 'cisco-otv';
}
if (is_array($routing_tabs)) {
echo '<li class="'.$select['routing'].'">
<a href="'.generate_device_url($device, array('tab' => 'routing')).'">
<img src="images/16/arrow_branch.png" align="absmiddle" border="0" /> Routing
</a>
</li>';
}
$device_pw_count = @dbFetchCell('SELECT COUNT(*) FROM `pseudowires` WHERE `device_id` = ?', array($device['device_id']));
if ($device_pw_count) {
echo '<li class="'.$select['pseudowires'].'">
<a href="'.generate_device_url($device, array('tab' => 'pseudowires')).'">
<img src="images/16/arrow_switch.png" align="absmiddle" border="0" /> Pseudowires
</a>
</li>';
}
echo('<li class="' . $select['map'] . '">
<a href="'.generate_device_url($device, array('tab' => 'map')).'">
<img src="images/16/chart_organisation.png" align="absmiddle" border="0" /> Map
</a>
</li>');
if (@dbFetchCell("SELECT 1 FROM stp WHERE device_id = '".$device['device_id']."'")) {
echo '<li class="'.$select['stp'].'">
<a href="'.generate_device_url($device, array('tab' => 'stp')).'">
<img src="images/16/chart_organisation.png" align="absmiddle" border="0" /> STP
</a>
</li>';
}
if (@dbFetchCell("SELECT COUNT(*) FROM `packages` WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['packages'].'">
<a href="'.generate_device_url($device, array('tab' => 'packages')).'">
<img src="images/16/package.png" align="absmiddle" border="0" /> Pkgs
</a>
</li>';
}
if ($config['enable_inventory'] && @dbFetchCell("SELECT * FROM `entPhysical` WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['entphysical'].'">
<a href="'.generate_device_url($device, array('tab' => 'entphysical')).'">
<img src="images/16/bricks.png" align="absmiddle" border="0" /> Inventory
</a>
</li>';
}
else if (device_permitted($device['device_id']) && $config['enable_inventory'] && @dbFetchCell("SELECT * FROM `hrDevice` WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['hrdevice'].'">
<a href="'.generate_device_url($device, array('tab' => 'hrdevice')).'">
<img src="images/16/bricks.png" align="absmiddle" border="0" /> Inventory
</a>
</li>';
}
if (dbFetchCell("SELECT COUNT(service_id) FROM services WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['services'].'">
<a href="'.generate_device_url($device, array('tab' => 'services')).'">
<img src="images/icons/services.png" align="absmiddle" border="0" /> Services
</a>
</li>';
}
if (@dbFetchCell("SELECT COUNT(toner_id) FROM toner WHERE device_id = '".$device['device_id']."'") > '0') {
echo '<li class="'.$select['toner'].'">
<a href="'.generate_device_url($device, array('tab' => 'toner')).'">
<img src="images/icons/toner.png" align="absmiddle" border="0" /> Toner
</a>
</li>';
}
if (device_permitted($device['device_id'])) {
echo '<li class="'.$select['logs'].'">
<a href="'.generate_device_url($device, array('tab' => 'logs')).'">
<img src="images/16/report_magnify.png" align="absmiddle" border="0" /> Logs
</a>
</li>';
}
if (device_permitted($device['device_id'])) {
echo '<li class="'.$select['alerts'].'">
<a href="'.generate_device_url($device, array('tab' => 'alerts')).'">
<img src="images/16/bell.png" align="absmiddle" border="0" /> Alerts
</a>
</li>';
}
if (device_permitted($device['device_id'])) {
echo '<li class="'.$select['alert-stats'].'">
<a href="'.generate_device_url($device, array('tab' => 'alert-stats')).'">
<img src="images/16/chart_bar.png" align="absmiddle" border="0" /> Alert Stats
</a>
</li>';
}
if ($_SESSION['userlevel'] >= '7') {
if (!is_array($config['rancid_configs'])) {
$config['rancid_configs'] = array($config['rancid_configs']);
}
foreach ($config['rancid_configs'] as $configs) {
if ($configs[(strlen($configs) - 1)] != '/') {
$configs .= '/';
}
if (is_file($configs.$device['hostname'])) {
$device_config_file = $configs.$device['hostname'];
}
}
if ($config['oxidized']['enabled'] === true && isset($config['oxidized']['url'])) {
$device_config_file = true;
}
}
if ($device_config_file) {
if (dbFetchCell("SELECT COUNT(device_id) FROM devices_attribs WHERE device_id = ? AND attrib_type = 'override_Oxidized_disable' AND attrib_value='true'",array($device['device_id']) ) == '0') {
echo '<li class="'.$select['showconfig'].'">
<a href="'.generate_device_url($device, array('tab' => 'showconfig')).'">
<img src="images/16/page_white_text.png" align="absmiddle" border="0" /> Config
</a>
</li>';
}
}
if ($config['nfsen_enable']) {
if (!is_array($config['nfsen_rrds'])) {
$config['nfsen_rrds'] = array($config['nfsen_rrds']);
}
foreach ($config['nfsen_rrds'] as $nfsenrrds) {
if ($configs[(strlen($nfsenrrds) - 1)] != '/') {
$nfsenrrds .= '/';
}
$nfsensuffix = '';
if ($config['nfsen_suffix']) {
$nfsensuffix = $config['nfsen_suffix'];
}
$basefilename_underscored = preg_replace('/\./', $config['nfsen_split_char'], $device['hostname']);
$nfsen_filename = (strstr($basefilename_underscored, $nfsensuffix, true));
if (is_file($nfsenrrds.$nfsen_filename.'.rrd')) {
$nfsen_rrd_file = $nfsenrrds.$nfsen_filename.'.rrd';
}
}
}//end if
if ($nfsen_rrd_file) {
echo '<li class="'.$select['nfsen'].'">
<a href="'.generate_device_url($device, array('tab' => 'nfsen')).'">
<img src="images/16/rainbow.png" align="absmiddle" border="0" /> Netflow
</a>
</li>';
}
if (can_ping_device($attribs) === true) {
echo '<li class="'.$select['performance'].'">
<a href="'.generate_device_url($device, array('tab' => 'performance')).'">
<img src="images/16/chart_line.png" align="absmiddle" border="0" /> Performance
</a>
</li>';
}
echo '<li class="'.$select['notes'].'">
<a href="'.generate_device_url($device, array('tab' => 'notes')).'">
<img src="images/16/page_white_text.png" align="absmiddle" border="0" /> Notes
</a>
</li>';
if (device_permitted($device['device_id']) && is_mib_poller_enabled($device)) {
echo '<li class="'.$select['mib'].'">
<a href="'.generate_device_url($device, array('tab' => 'mib')).'">
<i class="fa fa-file-text-o"></i> MIB
</a>
</li>';
}
echo '<li style="float: right;"><a href="https://'.$device['hostname'].'"><img src="images/16/http.png" alt="https" title="Launch browser to https://'.$device['hostname'].'" border="0" width="16" height="16" target="_blank"></a></li>
<li style="float: right;"><a href="ssh://'.$device['hostname'].'"><img src="images/16/ssh.png" alt="ssh" title="SSH to '.$device['hostname'].'" border="0" width="16" height="16"></a></li>
<li style="float: right;"><a href="telnet://'.$device['hostname'].'"><img src="images/16/telnet.png" alt="telnet" title="Telnet to '.$device['hostname'].'" border="0" width="16" height="16"></a></li>';
if ($_SESSION['userlevel'] >= '7') {
echo '<li class="'.$select['edit'].'" style="float: right;">
<a href="'.generate_device_url($device, array('tab' => 'edit')).'">
<img src="images/16/wrench.png" align="absmiddle" border="0" />
</a>
</li>';
}
echo '</ul>';
}//end if
if (device_permitted($device['device_id']) || $check_device == $vars['device']) {
echo '<div class="tabcontent">';
require 'pages/device/'.mres(basename($tab)).'.inc.php';
echo '</div>';
}
else {
require 'includes/error-no-perm.inc.php';
}
}//end if