} $navbar['class'] = "navbar-narrow"; $navbar['brand'] = "Ports"; print_navbar($navbar); unset($navbar); if (is_array($navbar_b)) { print_navbar($navbar_b); } if ($vars['view'] == 'minigraphs') { $timeperiods = array('-1day', '-1week', '-1month', '-1year'); $from = '-1day'; echo "<div style='display: block; clear: both; margin: auto; min-height: 500px;'>"; unset($seperator); // FIXME - FIX THIS. UGLY. foreach (dbFetchRows("select * from ports WHERE device_id = ? ORDER BY ifIndex", array($device['device_id'])) as $port) { echo "<div style='display: block; padding: 3px; margin: 3px; min-width: 183px; max-width:183px; min-height:90px; max-height:90px; text-align: center; float: left; background-color: #e9e9e9;'>\n <div style='font-weight: bold;'>" . makeshortif($port['ifDescr']) . "</div>\n <a href=\"" . generate_port_url($port) . "\" onmouseover=\"return overlib('\\\n <div style=\\'font-size: 16px; padding:5px; font-weight: bold; color: #e5e5e5;\\'>" . $device['hostname'] . " - " . $port['ifDescr'] . "</div>\\\n " . $port['ifAlias'] . " \\\n <img src=\\'graph.php?type=" . $graph_type . "&id=" . $port['port_id'] . "&from=" . $from . "&to=" . $config['time']['now'] . "&width=450&height=150\\'>\\\n ', CENTER, LEFT, FGCOLOR, '#e5e5e5', BGCOLOR, '#e5e5e5', WIDTH, 400, HEIGHT, 150);\" onmouseout=\"return nd();\" >" . "<img src='graph.php?type=" . $graph_type . "&id=" . $port['port_id'] . "&from=" . $from . "&to=" . $config['time']['now'] . "&width=180&height=45&legend=no'>\n </a>\n <div style='font-size: 9px;'>" . truncate(short_port_descr($port['ifAlias']), 32, '') . "</div>\n </div>"; } echo "</div>"; } elseif ($vars['view'] == "arp" || $vars['view'] == "adsl" || $vars['view'] == "neighbours" || $vars['view'] == "fdb" || $vars['view'] == "map") { include "ports/" . $vars['view'] . ".inc.php"; } else { if ($vars['view'] == "details") { $port_details = 1; } if ($vars['view'] == "graphs") { $table_class = "table-striped-two"; } else { $table_class = "table-striped"; } echo '<table class="table table-hover table-bordered table-condensed table-rounded ' . $table_class . '" style="vertical-align: middle; margin-top: 5px; margin-bottom: 10px;">';
if ($hrdevice['hrDeviceType'] == 'hrDeviceNetwork') { $int = str_replace('network interface ', '', $hrdevice['hrDeviceDescr']); $interface = dbFetchRow('SELECT * FROM ports WHERE device_id = ? AND ifDescr = ?', array($device['device_id'], $int)); if ($interface['ifIndex']) { echo '<td>' . generate_port_link($interface) . '</td>'; $graph_array['height'] = '20'; $graph_array['width'] = '100'; $graph_array['to'] = $config['time']['now']; $graph_array['id'] = $interface['port_id']; $graph_array['type'] = 'port_bits'; $graph_array['from'] = $config['time']['day']; $graph_array_zoom = $graph_array; $graph_array_zoom['height'] = '150'; $graph_array_zoom['width'] = '400'; // FIXME click on graph should also link to port, but can't use generate_port_link here... $mini_graph = overlib_link(generate_port_url($interface), generate_lazy_graph_tag($graph_array), generate_graph_tag($graph_array_zoom), NULL); echo "<td>{$mini_graph}</td>"; } else { echo '<td>' . stripslashes($hrdevice['hrDeviceDescr']) . '</td>'; echo '<td></td>'; } } else { echo '<td>' . stripslashes($hrdevice['hrDeviceDescr']) . '</td>'; echo '<td></td>'; } } //end if echo '<td>' . $hrdevice['hrDeviceType'] . '</td><td>' . $hrdevice['hrDeviceStatus'] . '</td>'; echo '<td>' . $hrdevice['hrDeviceErrors'] . '</td><td>' . $hrdevice['hrProcessorLoad'] . '</td>'; echo '</tr>'; }
$ports_disabled = 0; $ports_down = 0; $ports_up = 0; $ports_total = 0; foreach ($ports as $port) { if (port_permitted($port['port_id'], $port['device_id'])) { if ($port['ifAdminStatus'] == "down") { $ports_disabled++; } elseif ($port['ifAdminStatus'] == "up" && $port['ifOperStatus'] == "down") { $ports_down++; } elseif ($port['ifAdminStatus'] == "up" && $port['ifOperStatus'] == "up") { $ports_up++; } $ports_total++; $speed = humanspeed($port['ifSpeed']); $type = humanmedia($port['ifType']); $ifclass = ifclass($port['ifOperStatus'], $port['ifAdminStatus']); if (isset($port['in_errors']) && $port['in_errors'] > 0 || isset($ports['out_errors']) && $port['out_errors'] > 0) { $error_img = generate_port_link($port, "<img src='images/16/chart_curve_error.png' alt='Interface Errors' border=0>", errors); } else { $error_img = ""; } $port['in_rate'] = formatRates($port['ifInOctets_rate'] * 8); $port['out_rate'] = formatRates($port['ifOutOctets_rate'] * 8); $port = ifLabel($port, $device); echo "<tr class='ports'>\n <td width=200 class=list-bold>" . generate_device_link($port, shorthost($port['hostname'], "20")) . "</td>\n <td width=150 class=list-bold><a class='" . $ifclass . "'href='" . generate_port_url($port) . "'>" . fixIfName($port['label']) . " {$error_img}</td>\n <td width=110 >{$speed}</td>\n <td width=100 class=green>" . $port['in_rate'] . "</td>\n <td width=100 class=blue>" . $port['out_rate'] . "</td>\n <td width=150>{$type}</td>\n <td>" . $port['ifAlias'] . "</td>\n </tr>\n"; } } echo '<tr><td colspan="7">'; echo "<strong>Matched Ports: {$ports_total} ( <span class=green>Up {$ports_up}</span> | <span class=red>Down {$ports_down}</span> | Disabled {$ports_disabled} )</strong>"; echo '</td></tr></table>';
function generate_port_link($port, $text = NULL, $type = NULL, $escape = FALSE) { global $config; humanize_port($port); //if (!isset($port['html_class'])) { $port['html_class'] = ifclass($port['ifOperStatus'], $port['ifAdminStatus']); } //if (!isset($text)) { $text = rewrite_ifname($port['label'], !$escape); } // Negative escape flag for exclude double escape // Fixme -- does this function even need alternative $text? I think not. It's a hangover from before label. if (!isset($text)) { $text = $port['label']; } if (port_permitted($port['port_id'], $port['device_id'])) { $url = generate_port_url($port); if ($escape) { $text = escape_html($text); } return '<a href="' . $url . '" class="entity-popup ' . $port['html_class'] . '" data-eid="' . $port['port_id'] . '" data-etype="port">' . $text . '</a>'; } else { return rewrite_ifname($text); } }
function generate_port_link($port, $text = NULL, $type = NULL) { global $config; if (isset($port['humanized']) == FALSE) { humanize_port($port); } if (!$text) { $text = fixIfName($port['label']); } if ($type) { $port['graph_type'] = $type; } if (!isset($port['graph_type'])) { $port['graph_type'] = 'port_bits'; } $class = ifclass($port['ifOperStatus'], $port['ifAdminStatus']); if (!isset($port['os'])) { $port = array_merge($port, device_by_id_cache($port['device_id'])); } $content = generate_device_link_header($port); $content .= generate_port_link_header($port); $content .= '<div style="width: 700px">'; $graph_array['type'] = $port['graph_type']; $graph_array['legend'] = "yes"; $graph_array['height'] = "100"; $graph_array['width'] = "275"; $graph_array['to'] = $config['time']['now']; $graph_array['from'] = $config['time']['day']; $graph_array['id'] = $port['port_id']; $content .= generate_graph_tag($graph_array); $graph_array['from'] = $config['time']['week']; $content .= generate_graph_tag($graph_array); $graph_array['from'] = $config['time']['month']; $content .= generate_graph_tag($graph_array); $graph_array['from'] = $config['time']['year']; $content .= generate_graph_tag($graph_array); $content .= "</div>"; $url = generate_port_url($port); if (port_permitted($port['port_id'], $port['device_id'])) { return overlib_link($url, $text, $content, $class); } else { return fixifName($text); } }
echo '</span>'; } echo ')'; $type_sep = ' | '; } //end foreach print_optionbar_end(); if ($vars['view'] == 'minigraphs') { $timeperiods = array('-1day', '-1week', '-1month', '-1year'); $from = '-1day'; echo "<div style='display: block; clear: both; margin: auto; min-height: 500px;'>"; unset($seperator); // FIXME - FIX THIS. UGLY. foreach (dbFetchRows('select * from ports WHERE device_id = ? ORDER BY ifIndex', array($device['device_id'])) as $port) { echo "<div style='display: block; padding: 3px; margin: 3px; min-width: 183px; max-width:183px; min-height:90px; max-height:90px; text-align: center; float: left; background-color: #e9e9e9;'>\n <div style='font-weight: bold;'>" . makeshortif($port['ifDescr']) . '</div> <a href="' . generate_port_url($port) . "\" onmouseover=\"return overlib('\\\n <div style=\\'font-size: 16px; padding:5px; font-weight: bold; color: #e5e5e5;\\'>" . $device['hostname'] . ' - ' . $port['ifDescr'] . '</div>\\ ' . $port['ifAlias'] . " \\\n <img src=\\'graph.php?type=" . $graph_type . '&id=' . $port['port_id'] . '&from=' . $from . '&to=' . $config['time']['now'] . "&width=450&height=150\\'>\\\n ', CENTER, LEFT, FGCOLOR, '#e5e5e5', BGCOLOR, '#e5e5e5', WIDTH, 400, HEIGHT, 150);\" onmouseout=\"return nd();\" >" . "<img src='graph.php?type=" . $graph_type . '&id=' . $port['port_id'] . '&from=' . $from . '&to=' . $config['time']['now'] . "&width=180&height=45&legend=no'>\n </a>\n <div style='font-size: 9px;'>" . truncate(short_port_descr($port['ifAlias']), 32, '') . '</div> </div>'; } echo '</div>'; } else { if ($vars['view'] == 'arp' || $vars['view'] == 'adsl' || $vars['view'] == 'neighbours') { include 'ports/' . $vars['view'] . '.inc.php'; } else { if ($vars['view'] == 'details') { $port_details = 1; } ?> <div style='margin: 0px;'><table class='table'> <tr> <th width="350">Port</th>
} } else { if (dbFetchCell("SELECT COUNT(*) FROM `ports_cbqos` WHERE `port_id` = ?", array($port['port_id']))) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'cbqos')) . '"><span class="label label-info">CBQoS</span></a>'; } } if (isset($ports_has_ext['mac_accounting'])) { if (in_array($port['port_id'], $ports_has_ext['mac_accounting'])) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'macaccounting')) . '"><span class="label label-info">MAC</span></a>'; } } else { if (dbFetchCell("SELECT COUNT(*) FROM `mac_accounting` WHERE `port_id` = ?", array($port['port_id']))) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'macaccounting')) . '"><span class="label label-info">MAC</span></a>'; } } echo '<tr class="' . $port['row_class'] . '" onclick="location.href=\'' . generate_port_url($port) . '\'" style="cursor: pointer;"> <td style="width: 1px; background-color: ' . $port['table_tab_colour'] . '; margin: 0px; padding: 0px; width: 10px;"></td> <td style="width: 1px;"></td> <td style="width: 350px;">'; echo " <span class='entity-title'>\n " . generate_port_link($port) . " " . $port['tags'] . "\n </span><br /><span class=small>" . htmlentities($port['ifAlias']) . "</span>"; if ($port['ifAlias']) { echo "<br />"; } unset($break); if ($port_details) { if (!isset($ports_has_ext['ipv4_addresses']) || in_array($port['port_id'], $ports_has_ext['ipv4_addresses'])) { foreach (dbFetchRows("SELECT * FROM `ipv4_addresses` WHERE `port_id` = ?", array($port['port_id'])) as $ip) { echo $break . "<a class=small href=\"javascript:popUp('/netcmd.php?cmd=whois&query=" . $ip['ipv4_address'] . "')\">" . $ip['ipv4_address'] . "/" . $ip['ipv4_prefixlen'] . "</a>"; $break = "<br />"; } }
<dt style="padding-left: 10px; text-align: center;">' . $result['icon'] . '</dt> <dd><h5>' . highlight_search($name) . '</h5> <small>' . $result['hardware'] . ' | ' . $config['os'][$result['os']]['text'] . ' ' . $result['version'] . ' <br /> ' . highlight_search($result['location']) . ' | ' . $num_ports . 'ports</small></dd> </dl>'; } echo "</a></li>"; } /// SEARCH PORTS $results = dbFetchRows("SELECT * FROM `ports` " . "LEFT JOIN `devices` ON `ports`.`device_id` = `devices`.`device_id` " . "WHERE `ifAlias` LIKE '%" . $queryString . "%' OR `ifDescr` LIKE '%" . $queryString . "%' ORDER BY ifDescr LIMIT 8"); if (count($results)) { echo '<li class="nav-header">Ports found: ' . count($results) . '</li>'; foreach ($results as $result) { echo '<li class="divider" style="margin: 0px;"></li>'; echo '<li>'; echo '<a href="' . generate_port_url($result) . '">'; $name = $result['ifDescr']; if (strlen($name) > 35) { $name = substr($name, 0, 35) . "..."; } $description = $result['ifAlias']; if (strlen($description) > 80) { $description = substr($description, 0, 80) . "..."; } /// FIXME : THIS SUCKS if ($result['ifAdminStatus'] == "down") { $icon = "search-port-disabled"; $tab_colour = '#009900'; // FIXME: Why green for ignore? Also see humanize_device() } elseif ($result['ifAdminStatus'] == "up" && $result['ifOperStatus'] == "down") { $icon = "search-port-down";
$port['device_id'] = $device['device_id']; $port['hostname'] = $device['hostname']; // Process port properties and generate printable values humanize_port($port); $port_adsl = dbFetchRow("SELECT * FROM `ports_adsl` WHERE `port_id` = ?", array($port['port_id'])); if ($port['ifInErrors_delta'] > 0 || $port['ifOutErrors_delta'] > 0) { $port['tags'] .= generate_port_link($port, '<span class="label label-important">Errors</span>', 'port_errors'); } if ($port['deleted'] == '1') { $port['tags'] .= '<a href="' . generate_url(array('page' => 'deleted-ports')) . '"><span class="label label-important">Deleted</span></a>'; } if (dbFetchCell("SELECT COUNT(*) FROM `ports_cbqos` WHERE `port_id` = ?", array($port['port_id']))) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'cbqos')) . '"><span class="label label-info">CBQoS</span></a>'; } if (dbFetchCell("SELECT COUNT(*) FROM `mac_accounting` WHERE `port_id` = ?", array($port['port_id']))) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'macaccounting')) . '"><span class="label label-info">MAC</span></a>'; } echo '<tr class="' . $port['row_class'] . '" valign=top onclick="location.href=\'" . generate_port_url($port) . "/\'" style="cursor: pointer;"> <td style="width: 1px; background-color: ' . $port['table_tab_colour'] . '; margin: 0px; padding: 0px; width: 10px;"></td> <td style="width: 1px;"></td> <td valign="top" width="350">'; echo " <span class=entity-title>\n " . generate_port_link($port, $port['ifIndex_FIXME'] . "" . $port['label']) . " " . $port['tags'] . "\n </span><br /><span class=interface-desc>" . $port['ifAlias'] . "</span>"; if ($port['ifAlias']) { echo "<br />"; } unset($break); if ($port_details) { foreach (dbFetchRows("SELECT * FROM `ipv4_addresses` WHERE `port_id` = ?", array($port['port_id'])) as $ip) { echo $break . "<a class=interface-desc href=\"javascript:popUp('/netcmd.php?cmd=whois&query=" . $ip['ipv4_address'] . "')\">" . $ip['ipv4_address'] . "/" . $ip['ipv4_prefixlen'] . "</a>"; $break = "<br />"; }
function generate_port_link($port, $text = NULL, $type = NULL) { global $config; humanize_port($port); if (!isset($port['html_class'])) { $port['html_class'] = ifclass($port['ifOperStatus'], $port['ifAdminStatus']); } if (!isset($text)) { $text = rewrite_ifname($port['label']); } #if (!isset($port['os'])) { $port = array_merge($port, device_by_id_cache($port['device_id'])); } $url = generate_port_url($port); if (port_permitted($port['port_id'], $port['device_id'])) { return '<a href="' . $url . '" class="entity-popup ' . $port['html_class'] . '" data-eid="' . $port['port_id'] . '" data-etype="port">' . $text . '</a>'; } else { return rewrite_ifname($text); } }
// Ya.. it's not simple $count_ipv4 = $query_limit - min(count($results_ipv6), intval($query_limit / 2)); $results_ipv4 = array_slice($results_ipv4, 0, $count_ipv4); $results_ipv6 = array_slice($results_ipv6, 0, $query_limit - $count_ipv4); } $results = array_merge($results_ipv4, $results_ipv6); } } } else { $results = array(); } if (count($results)) { foreach ($results as $result) { $port = get_port_by_id_cache($result['port_id']); $device = device_by_id_cache($port['device_id']); $descr = $device['hostname'] . ' | ' . rewrite_ifname($port['port_label']); $name = $result['ip_address'] . '/' . $result['ip_prefixlen']; if (strlen($name) > 35) { $name = substr($name, 0, 35) . "..."; } /// FIXME: once we have alerting, colour this to the sensor's status $tab_colour = '#194B7F'; // FIXME: This colour pulled from functions.inc.php humanize_device, maybe set it centrally in definitions? $ip_search_results[] = array('url' => generate_port_url($port), 'name' => $name, 'colour' => $tab_colour, 'icon' => '<i class="oicon-magnifier-zoom-actual"></i>', 'data' => array('', escape_html($descr))); } // FIXME after array-ization, we're missing "on x ports"; is this important? need to amend the "framework" a little, then. // Counter data came from: foreach ($results as $result) {$addr_ports[$result['port_id']][] = $result; } // echo('<li class="nav-header">IPs found: '.count($results).' (on '.count($addr_ports).' ports)</li>'); $search_results['ip-addresses'] = array('descr' => 'IPs found', 'results' => $ip_search_results); } // EOF
echo "</th>"; } echo " </tr></thead>"; $ports_disabled = 0; $ports_down = 0; $ports_up = 0; $ports_total = 0; foreach ($ports as $port) { $device = device_by_id_cache($port['device_id']); #&$GLOBALS['cache']['devices']['id'][$port['device_id']]; $ports_total++; humanize_port($port); $error_img = ''; if ($port['in_errors'] > 0 || $port['out_errors'] > 0) { $error_img = generate_port_link($port, "<img src='images/16/chart_curve_error.png' alt='接口错误' border=0>", 'errors'); } if (in_array($port['port_id'], $cache['ports']['cbqos'])) { $error_img .= '<a href="' . generate_port_url($port, array('view' => 'cbqos')) . '"><span class="label label-info">CBQoS</span></a>'; } if (in_array($port['port_id'], $cache['ports']['pseudowires'])) { $error_img .= '<a href="' . generate_device_url($port, array('tab' => 'pseudowires')) . '"><span class="label label-info">伪流量</span></a>'; } $port['bps_in'] = formatRates($port['ifInOctets_rate'] * 8); $port['bps_out'] = formatRates($port['ifOutOctets_rate'] * 8); $port['pps_in'] = format_si($port['ifInUcastPkts_rate']) . "pps"; $port['pps_out'] = format_si($port['ifOutUcastPkts_rate']) . "pps"; echo "<tr class='ports " . $port['row_class'] . "'>\n <td class='state-marker'></td>\n <td></td>\n <td><span class=entity>" . generate_device_link($device, short_hostname($device['hostname'], "20")) . "</span><br />\n <span class=em>" . escape_html(truncate($port['location'], 32, "")) . "</span></td>\n\n <td><span class=entity>" . generate_port_link($port, rewrite_ifname($port['label'])) . " " . $error_img . "</span><br />\n <span class=em>" . escape_html(truncate($port['ifAlias'], 50, '')) . "</span></td>" . '<td> <i class="icon-circle-arrow-down" style="' . $port['bps_in_style'] . '"></i> <span class="small" style="' . $port['bps_in_style'] . '">' . formatRates($port['in_rate']) . '</span><br />' . '<i class="icon-circle-arrow-up" style="' . $port['bps_out_style'] . '"></i> <span class="small" style="' . $port['bps_out_style'] . '">' . formatRates($port['out_rate']) . '</span><br /></td>' . '<td> <i class="icon-circle-arrow-down" style="' . $port['bps_in_style'] . '"></i> <span class="small" style="' . $port['bps_in_style'] . '">' . $port['ifInOctets_perc'] . '%</span><br />' . '<i class="icon-circle-arrow-up" style="' . $port['bps_out_style'] . '"></i> <span class="small" style="' . $port['bps_out_style'] . '">' . $port['ifOutOctets_perc'] . '%</span><br /></td>' . '<td><i class="icon-circle-arrow-down" style="' . $port['pps_in_style'] . '"></i> <span class="small" style="' . $port['pps_in_style'] . '">' . format_bi($port['ifInUcastPkts_rate']) . 'pps</span><br />' . '<i class="icon-circle-arrow-up" style="' . $port['pps_out_style'] . '"></i> <span class="small" style="' . $port['pps_out_style'] . '">' . format_bi($port['ifOutUcastPkts_rate']) . 'pps</span></td>' . "<td>" . $port['human_speed'] . "<br />" . $port['ifMtu'] . "</td>\n <td >" . $port['human_type'] . "<br />" . $port['human_mac'] . "</td>\n </tr>\n"; } echo '</table>'; echo pagination($vars, $ports_count); // EOF
function generate_port_row($port, $vars = array()) { global $config, $cache; $device = device_by_id_cache($port['device_id']); humanize_port($port); if (!isset($vars['view'])) { $vars['view'] = "basic"; } // Populate $port_adsl if the port has ADSL-MIB data if (!isset($cache['ports_option']['ports_adsl']) || in_array($port['port_id'], $cache['ports_option']['ports_adsl'])) { $port_adsl = dbFetchRow("SELECT * FROM `ports_adsl` WHERE `port_id` = ?", array($port['port_id'])); } // Populate $port['tags'] with various tags to identify port statuses and features // Port Errors if ($port['ifInErrors_delta'] > 0 || $port['ifOutErrors_delta'] > 0) { $port['tags'] .= generate_port_link($port, '<span class="label label-important">Errors</span>', 'port_errors'); } // Port Deleted if ($port['deleted'] == '1') { $port['tags'] .= '<a href="' . generate_url(array('page' => 'deleted-ports')) . '"><span class="label label-important">Deleted</span></a>'; } // Port CBQoS if (isset($cache['ports_option']['ports_cbqos'])) { if (in_array($port['port_id'], $cache['ports_option']['ports_cbqos'])) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'cbqos')) . '"><span class="label label-info">CBQoS</span></a>'; } } else { if (dbFetchCell("SELECT COUNT(*) FROM `ports_cbqos` WHERE `port_id` = ?", array($port['port_id']))) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'cbqos')) . '"><span class="label label-info">CBQoS</span></a>'; } } // Port MAC Accounting if (isset($cache['ports_option']['mac_accounting'])) { if (in_array($port['port_id'], $cache['ports_option']['mac_accounting'])) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'macaccounting')) . '"><span class="label label-info">MAC</span></a>'; } } else { if (dbFetchCell("SELECT COUNT(*) FROM `mac_accounting` WHERE `port_id` = ?", array($port['port_id']))) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'macaccounting')) . '"><span class="label label-info">MAC</span></a>'; } } // Populated formatted versions of port rates. $port['bps_in'] = formatRates($port['ifInOctets_rate'] * 8); $port['bps_out'] = formatRates($port['ifOutOctets_rate'] * 8); $port['pps_in'] = format_si($port['ifInUcastPkts_rate']) . "pps"; $port['pps_out'] = format_si($port['ifOutUcastPkts_rate']) . "pps"; $string = ''; if ($vars['view'] == "basic" || $vars['view'] == "graphs") { $table_cols = '8'; $string .= '<tr class="' . $port['row_class'] . '"> <td class="state-marker"></td> <td style="width: 1px;"></td>'; if ($vars['page'] != "device" && $vars['popup'] != TRUE) { $table_cols++; // Increment table columns by one to make sure graph line draws correctly $string .= ' <td style="width: 200px;"><span class="entity">' . generate_device_link($device, short_hostname($device['hostname'], "20")) . '</span><br /> <span class="em">' . escape_html(truncate($port['location'], 32, "")) . '</span></td>'; } $string .= ' <td><span class="entity">' . generate_port_link($port, rewrite_ifname($port['port_label'])) . ' ' . $port['tags'] . '</span><br /> <span class="em">' . escape_html(truncate($port['ifAlias'], 50, '')) . '</span></td>' . '<td style="width: 110px;"> <i class="icon-circle-arrow-down" style="' . $port['bps_in_style'] . '"></i> <span class="small" style="' . $port['bps_in_style'] . '">' . formatRates($port['in_rate']) . '</span><br />' . '<i class="icon-circle-arrow-up" style="' . $port['bps_out_style'] . '"></i> <span class="small" style="' . $port['bps_out_style'] . '">' . formatRates($port['out_rate']) . '</span><br /></td>' . '<td style="width: 90px;"> <i class="icon-circle-arrow-down" style="' . $port['bps_in_style'] . '"></i> <span class="small" style="' . $port['bps_in_style'] . '">' . $port['ifInOctets_perc'] . '%</span><br />' . '<i class="icon-circle-arrow-up" style="' . $port['bps_out_style'] . '"></i> <span class="small" style="' . $port['bps_out_style'] . '">' . $port['ifOutOctets_perc'] . '%</span><br /></td>' . '<td style="width: 110px;"><i class="icon-circle-arrow-down" style="' . $port['pps_in_style'] . '"></i> <span class="small" style="' . $port['pps_in_style'] . '">' . format_bi($port['ifInUcastPkts_rate']) . 'pps</span><br />' . '<i class="icon-circle-arrow-up" style="' . $port['pps_out_style'] . '"></i> <span class="small" style="' . $port['pps_out_style'] . '">' . format_bi($port['ifOutUcastPkts_rate']) . 'pps</span></td>' . '<td style="width: 110px;"><small>' . $port['human_speed'] . '<br />' . $port['ifMtu'] . '</small></td> <td ><small>' . $port['human_type'] . '<br />' . $port['human_mac'] . '</small></td> </tr>'; } else { if ($vars['view'] == "details" || $vars['view'] == "detail") { $table_cols = '9'; $string .= '<tr class="' . $port['row_class'] . '"'; if ($vars['tab'] != "port") { $string .= ' onclick="openLink(\'' . generate_port_url($port) . '\')" style="cursor: pointer;"'; } $string .= '>'; $string .= ' <td class="state-marker"></td> <td style="width: 1px;"></td>'; if ($vars['page'] != "device" && $vars['popup'] != TRUE) { $table_cols++; // Increment table columns by one to make sure graph line draws correctly $string .= ' <td width="200"><span class="entity">' . generate_device_link($device, short_hostname($device['hostname'], "20")) . '</span><br /> <span class="em">' . escape_html(truncate($port['location'], 32, "")) . '</span></td>'; } $string .= ' <td style="min-width: 250px;">'; $string .= ' <span class="entity-title"> ' . generate_port_link($port) . ' ' . $port['tags'] . ' </span><br /><span class="small">' . escape_html($port['ifAlias']) . '</span>'; if ($port['ifAlias']) { $string .= '<br />'; } unset($break); if (!isset($cache['ports_option']['ipv4_addresses']) || in_array($port['port_id'], $cache['ports_option']['ipv4_addresses'])) { foreach (dbFetchRows("SELECT * FROM `ipv4_addresses` WHERE `port_id` = ?", array($port['port_id'])) as $ip) { $string .= $break . generate_popup_link('ip', $ip['ipv4_address'] . '/' . $ip['ipv4_prefixlen'], NULL, 'small'); $break = "<br />"; } } if (!isset($cache['ports_option']['ipv6_addresses']) || in_array($port['port_id'], $cache['ports_option']['ipv6_addresses'])) { foreach (dbFetchRows("SELECT * FROM `ipv6_addresses` WHERE `port_id` = ?", array($port['port_id'])) as $ip6) { $string .= $break . generate_popup_link('ip', $ip6['ipv6_address'] . '/' . $ip6['ipv6_prefixlen'], NULL, 'small'); $break = "<br />"; } } //$string .= '</span>'; $string .= '</td>'; // Print port graph thumbnails $string .= '<td style="width: 147px;">'; $port['graph_type'] = "port_bits"; $graph_array = array(); $graph_array['to'] = $config['time']['now']; $graph_array['id'] = $port['port_id']; $graph_array['type'] = $port['graph_type']; $graph_array['width'] = 100; $graph_array['height'] = 20; $graph_array['bg'] = 'ffffff00'; $graph_array['from'] = $config['time']['day']; $string .= generate_port_link($port, generate_graph_tag($graph_array)); $port['graph_type'] = "port_upkts"; $graph_array['type'] = $port['graph_type']; $string .= generate_port_link($port, generate_graph_tag($graph_array)); $port['graph_type'] = "port_errors"; $graph_array['type'] = $port['graph_type']; $string .= generate_port_link($port, generate_graph_tag($graph_array)); $string .= '</td>'; $string .= '<td style="width: 100px; white-space: nowrap;">'; if ($port['ifOperStatus'] == "up" || $port['ifOperStatus'] == "monitoring") { // Colours generated by humanize_port $string .= '<i class="icon-circle-arrow-down" style="' . $port['bps_in_style'] . '"></i> <span class="small" style="' . $port['bps_in_style'] . '">' . formatRates($port['in_rate']) . '</span><br /> <i class="icon-circle-arrow-up" style="' . $port['bps_out_style'] . '"></i> <span class="small" style="' . $port['bps_out_style'] . '">' . formatRates($port['out_rate']) . '</span><br /> <i class="icon-circle-arrow-down" style="' . $port['pps_in_style'] . '"></i> <span class="small" style="' . $port['pps_in_style'] . '">' . format_bi($port['ifInUcastPkts_rate']) . 'pps</span><br /> <i class="icon-circle-arrow-up" style="' . $port['pps_out_style'] . '"></i> <span class="small" style="' . $port['pps_out_style'] . '">' . format_bi($port['ifOutUcastPkts_rate']) . 'pps</span>'; } $string .= '</td><td style="width: 110px;">'; if ($port['ifType'] && $port['ifType'] != "") { $string .= '<span class="small">' . $port['human_type'] . '</span>'; } else { $string .= '-'; } $string .= '<br />'; if ($port['ifSpeed']) { $string .= '<span class="small">' . humanspeed($port['ifSpeed']) . '</span>'; } if ($port['ifDuplex'] && $port['ifDuplex'] != "unknown") { $string .= '<span class="small"> (' . str_replace("Duplex", "", $port['ifDuplex']) . ')</span>'; } $string .= '<br />'; if ($port['ifMtu'] && $port['ifMtu'] != "") { $string .= '<span class="small">MTU ' . $port['ifMtu'] . '</span>'; } else { $string .= '<span class="small">Unknown MTU</span>'; } // if ($ifHardType && $ifHardType != "") { $string .= '<span class="small">" . $ifHardType . "</span>"); } else { $string .= '-'; } //$string .= '<br />'; // Set VLAN data if the port has ifTrunk populated if ($port['ifTrunk']) { if ($port['ifVlan']) { // Native VLAN if (!isset($cache['ports_vlan'])) { $native_state = dbFetchCell('SELECT `state` FROM `ports_vlans` WHERE `device_id` = ? AND `port_id` = ?', array($device['device_id'], $port['port_id'])); $native_name = dbFetchCell('SELECT `vlan_name` FROM vlans WHERE `device_id` = ? AND `vlan_vlan` = ?;', array($device['device_id'], $port['ifVlan'])); } else { $native_state = $cache['ports_vlan'][$port['port_id']][$port['ifVlan']]['state']; $native_name = $cache['ports_vlan'][$port['port_id']][$port['ifVlan']]['vlan_name']; } switch ($native_state) { case 'blocking': $class = 'text-danger'; break; case 'forwarding': $class = 'text-success'; break; default: $class = 'muted'; } if (empty($native_name)) { $native_name = 'VLAN' . str_pad($port['ifVlan'], 4, '0', STR_PAD_LEFT); } $native_tooltip = 'NATIVE: <strong class=' . $class . '>' . $port['ifVlan'] . ' [' . $native_name . ']</strong><br />'; } if (!isset($cache['ports_vlan'])) { $vlans = dbFetchRows('SELECT * FROM `ports_vlans` AS PV LEFT JOIN vlans AS V ON PV.`vlan` = V.`vlan_vlan` AND PV.`device_id` = V.`device_id` WHERE PV.`port_id` = ? AND PV.`device_id` = ? ORDER BY PV.`vlan`;', array($port['port_id'], $device['device_id'])); } else { $vlans = $cache['ports_vlan'][$port['port_id']]; } $vlans_count = count($vlans); $rel = $vlans_count || $native_tooltip ? 'tooltip' : ''; // Hide tooltip for empty $string .= '<p class="small"><a class="label label-info" data-rel="' . $rel . '" data-tooltip="<div class=\'small\' style=\'max-width: 320px; text-align: justify;\'>' . $native_tooltip; if ($vlans_count) { $string .= 'ALLOWED: '; $vlans_aggr = array(); foreach ($vlans as $vlan) { if ($vlans_count > 20) { // Aggregate VLANs $vlans_aggr[] = $vlan['vlan']; } else { // List VLANs switch ($vlan['state']) { case 'blocking': $class = 'text-danger'; break; case 'forwarding': $class = 'text-success'; break; default: $class = 'muted'; } if (empty($vlan['vlan_name'])) { 'VLAN' . str_pad($vlan['vlan'], 4, '0', STR_PAD_LEFT); } $string .= '<strong class=' . $class . '>' . $vlan['vlan'] . ' [' . $vlan['vlan_name'] . ']</strong><br />'; } } if ($vlans_count > 20) { // End aggregate VLANs $string .= '<strong>' . range_to_list($vlans_aggr, ', ') . '</strong>'; } } $string .= '</div>">' . $port['ifTrunk'] . '</a></p>'; } else { if ($port['ifVlan']) { if (!isset($cache['ports_vlan'])) { $native_state = dbFetchCell('SELECT `state` FROM `ports_vlans` WHERE `device_id` = ? AND `port_id` = ?', array($device['device_id'], $port['port_id'])); $native_name = dbFetchCell('SELECT `vlan_name` FROM vlans WHERE `device_id` = ? AND `vlan_vlan` = ?;', array($device['device_id'], $port['ifVlan'])); } else { $native_state = $cache['ports_vlan'][$port['port_id']][$port['ifVlan']]['state']; $native_name = $cache['ports_vlan'][$port['port_id']][$port['ifVlan']]['vlan_name']; } switch ($native_state) { case 'blocking': $class = 'label-error'; break; case 'forwarding': $class = 'label-success'; break; default: $class = ''; } $rel = $native_name ? 'tooltip' : ''; // Hide tooltip for empty $string .= '<br /><span data-rel="' . $rel . '" class="label ' . $class . '" data-tooltip="<strong class=\'small\'>' . $port['ifVlan'] . ' [' . $native_name . ']</strong>">VLAN ' . $port['ifVlan'] . '</span>'; } else { if ($port['ifVrf']) { $vrf_name = dbFetchCell("SELECT `vrf_name` FROM `vrfs` WHERE `vrf_id` = ?", array($port['ifVrf'])); $string .= '<br /><span class="label label-success" data-rel="tooltip" data-tooltip="VRF">' . $vrf_name . '</span>'; } } } $string .= '</td>'; // If the port is ADSL, print ADSL port data. if ($port_adsl['adslLineCoding']) { $string .= '<td style="width: 200px;"><span class="small">'; $string .= '<span class="label">' . $port_adsl['adslLineCoding'] . '</span> <span class="label">' . rewrite_adslLineType($port_adsl['adslLineType']) . '</span>'; $string .= '<br />'; $string .= 'SYN <i class="icon-circle-arrow-down green"></i> ' . formatRates($port_adsl['adslAtucChanCurrTxRate']) . ' <i class="icon-circle-arrow-up blue"></i> ' . formatRates($port_adsl['adslAturChanCurrTxRate']); $string .= '<br />'; //$string .= 'Max:'.formatRates($port_adsl['adslAtucCurrAttainableRate']) . '/'. formatRates($port_adsl['adslAturCurrAttainableRate']); //$string .= '<br />'; $string .= 'ATN <i class="icon-circle-arrow-down green"></i> ' . $port_adsl['adslAtucCurrAtn'] . 'dBm <i class="icon-circle-arrow-up blue"></i> ' . $port_adsl['adslAturCurrAtn'] . 'dBm'; $string .= '<br />'; $string .= 'SNR <i class="icon-circle-arrow-down green"></i> ' . $port_adsl['adslAtucCurrSnrMgn'] . 'dB <i class="icon-circle-arrow-up blue"></i> ' . $port_adsl['adslAturCurrSnrMgn'] . 'dB'; $string .= '</span>'; } else { // Otherwise print normal port data $string .= '<td style="width: 150px;"><span class="small">'; if ($port['ifPhysAddress'] && $port['ifPhysAddress'] != "") { $string .= $port['human_mac']; } else { $string .= '-'; } $string .= '<br />' . $port['ifLastChange'] . '</span>'; } $string .= '</td>'; $string .= '<td style="min-width: 200px" class="small">'; if (strpos($port['port_label'], "oopback") === FALSE && !$graph_type) { unset($br); // Populate links array for ports with direct links if (!isset($cache['ports_option']['neighbours']) || in_array($port['port_id'], $cache['ports_option']['neighbours'])) { foreach (dbFetchRows('SELECT * FROM `neighbours` WHERE `port_id` = ?', array($port['port_id'])) as $neighbour) { // print_r($link); if ($neighbour['remote_port_id']) { $int_links[$neighbour['remote_port_id']] = $neighbour['remote_port_id']; $int_links_phys[$neighbour['remote_port_id']] = 1; } else { $int_links_unknown[] = $neighbour; } } } else { } // Populate links array for devices which share an IPv4 subnet if (!isset($cache['ports_option']['ipv4_addresses']) || in_array($port['port_id'], $cache['ports_option']['ipv4_addresses'])) { foreach (dbFetchColumn('SELECT DISTINCT(`ipv4_network_id`) FROM `ipv4_addresses` LEFT JOIN `ipv4_networks` USING(`ipv4_network_id`) WHERE `port_id` = ? AND `ipv4_network` NOT IN (?);', array($port['port_id'], $config['ignore_common_subnet'])) as $network_id) { $sql = 'SELECT N.*, P.`port_id`, P.`device_id` FROM `ipv4_addresses` AS A, `ipv4_networks` AS N, `ports` AS P WHERE A.`port_id` = P.`port_id` AND P.`device_id` != ? AND A.`ipv4_network_id` = ? AND N.`ipv4_network_id` = A.`ipv4_network_id` AND P.`ifAdminStatus` = "up"'; $params = array($device['device_id'], $network_id); foreach (dbFetchRows($sql, $params) as $new) { if ($cache['devices']['id'][$new['device_id']]['disabled'] && !$config['web_show_disabled']) { continue; } $int_links[$new['port_id']] = $new['port_id']; $int_links_v4[$new['port_id']][] = $new['ipv4_network']; } } } // Populate links array for devices which share an IPv6 subnet if (!isset($cache['ports_option']['ipv6_addresses']) || in_array($port['port_id'], $cache['ports_option']['ipv6_addresses'])) { foreach (dbFetchColumn("SELECT DISTINCT(`ipv6_network_id`) FROM `ipv6_addresses`\n LEFT JOIN `ipv6_networks` USING(`ipv6_network_id`)\n WHERE `port_id` = ? AND `ipv6_network` NOT IN (?);", array($port['port_id'], $config['ignore_common_subnet'])) as $network_id) { $sql = "SELECT N.*, P.`port_id`, P.`device_id` FROM `ipv6_addresses` AS A, `ipv6_networks` AS N, `ports` AS P\n WHERE A.`port_id` = P.`port_id` AND P.device_id != ?\n AND A.`ipv6_network_id` = ? AND N.`ipv6_network_id` = A.`ipv6_network_id`\n AND P.`ifAdminStatus` = 'up' AND A.`ipv6_origin` != 'linklayer' AND A.`ipv6_origin` != 'wellknown'"; $params = array($device['device_id'], $network_id); foreach (dbFetchRows($sql, $params) as $new) { if ($cache['devices']['id'][$new['device_id']]['disabled'] && !$config['web_show_disabled']) { continue; } $int_links[$new['port_id']] = $new['port_id']; $int_links_v6[$new['port_id']][] = $new['ipv6_network']; } } } // Output contents of links array foreach ($int_links as $int_link) { $link_if = get_port_by_id_cache($int_link); if (!device_permitted($link_if['device_id'])) { continue; } // Skip not permitted links $link_dev = device_by_id_cache($link_if['device_id']); $string .= $br; if ($int_links_phys[$int_link]) { $string .= '<a data-alt="Directly connected" class="oicon-connect"></a> '; } else { $string .= '<a data-alt="Same subnet" class="oicon-network-hub"></a> '; } $string .= '<b>' . generate_port_link($link_if, $link_if['port_label_short']) . ' on ' . generate_device_link($link_dev, short_hostname($link_dev['hostname'])) . '</b>'; ## FIXME -- do something fancy here. if ($int_links_v6[$int_link]) { $string .= ' ' . overlib_link('', '<span class="label label-success">IPv6</span>', implode("<br />", $int_links_v6[$int_link]), NULL); } if ($int_links_v4[$int_link]) { $string .= ' ' . overlib_link('', '<span class="label label-info">IPv4</span>', implode("<br />", $int_links_v4[$int_link]), NULL); } $br = "<br />"; } // Output content of unknown links array (where ports don't exist in our database, or they weren't matched) foreach ($int_links_unknown as $int_link) { // FIXME -- Expose platform and version here. $string .= '<a data-alt="Directly connected" class="oicon-plug-connect"></a> '; $string .= '<b><i>' . short_ifname($int_link['remote_port']) . '</i></b> on '; $string .= '<i><b>' . generate_tooltip_link(NULL, $int_link['remote_hostname'], '<div class="small" style="max-width: 500px;"><b>' . $int_link['remote_platform'] . '</b><br />' . $int_link['remote_version'] . '</div>') . '</b></i>'; $string .= '<br />'; } } if (!isset($cache['ports_option']['pseudowires']) || in_array($port['port_id'], $cache['ports_option']['pseudowires'])) { foreach (dbFetchRows("SELECT * FROM `pseudowires` WHERE `port_id` = ?", array($port['port_id'])) as $pseudowire) { //`port_id`,`peer_device_id`,`peer_ldp_id`,`pwID`,`pwIndex` # $pw_peer_dev = dbFetchRow("SELECT * FROM `devices` WHERE `device_id` = ?", array($pseudowire['peer_device_id'])); $pw_peer_int = dbFetchRow("SELECT * FROM `ports` AS I, `pseudowires` AS P WHERE I.`device_id` = ? AND P.`pwID` = ? AND P.`port_id` = I.`port_id`", array($pseudowire['peer_device_id'], $pseudowire['pwID'])); # $pw_peer_int = get_port_by_id_cache($pseudowire['peer_device_id']); $pw_peer_dev = device_by_id_cache($pseudowire['peer_device_id']); if (is_array($pw_peer_int)) { humanize_port($pw_peer_int); $string .= $br . '<i class="oicon-arrow-switch"></i> <strong>' . generate_port_link($pw_peer_int, $pw_peer_int['port_label_short']) . ' on ' . generate_device_link($pw_peer_dev, short_hostname($pw_peer_dev['hostname'])) . '</strong>'; } else { $string .= $br . '<i class="oicon-arrow-switch"></i> <strong> VC ' . $pseudowire['pwID'] . ' on ' . $pseudowire['peer_addr'] . '</strong>'; } $string .= ' <span class="label">' . $pseudowire['pwPsnType'] . '</span>'; $string .= ' <span class="label">' . $pseudowire['pwType'] . '</span>'; $br = "<br />"; } } if (!isset($cache['ports_option']['ports_pagp']) || in_array($port['ifIndex'], $cache['ports_option']['ports_pagp'])) { foreach (dbFetchRows("SELECT * FROM `ports` WHERE `pagpGroupIfIndex` = ? AND `device_id` = ?", array($port['ifIndex'], $device['device_id'])) as $member) { humanize_port($member); $pagp[$device['device_id']][$port['ifIndex']][$member['ifIndex']] = TRUE; $string .= $br . '<i class="oicon-arrow-join"></i> <strong>' . generate_port_link($member) . ' [PAgP]</strong>'; $br = "<br />"; } } if ($port['pagpGroupIfIndex'] && $port['pagpGroupIfIndex'] != $port['ifIndex']) { $pagp[$device['device_id']][$port['pagpGroupIfIndex']][$port['ifIndex']] = TRUE; $parent = dbFetchRow("SELECT * FROM `ports` WHERE `ifIndex` = ? and `device_id` = ?", array($port['pagpGroupIfIndex'], $device['device_id'])); humanize_port($parent); $string .= $br . '<i class="oicon-arrow-split"></i> <strong>' . generate_port_link($parent) . ' [PAgP]</strong>'; $br = "<br />"; } if (!isset($cache['ports_option']['ports_stack_low']) || in_array($port['ifIndex'], $cache['ports_option']['ports_stack_low'])) { foreach (dbFetchRows("SELECT * FROM `ports_stack` WHERE `port_id_low` = ? and `device_id` = ?", array($port['ifIndex'], $device['device_id'])) as $higher_if) { if ($higher_if['port_id_high']) { if ($pagp[$device['device_id']][$higher_if['port_id_high']][$port['ifIndex']]) { continue; } // Skip if same PAgP port $this_port = get_port_by_index_cache($device['device_id'], $higher_if['port_id_high']); if (is_array($this_port)) { $string .= $br . '<i class="oicon-arrow-split"></i> <strong>' . generate_port_link($this_port) . '</strong>'; $br = "<br />"; } } } } if (!isset($cache['ports_option']['ports_stack_high']) || in_array($port['ifIndex'], $cache['ports_option']['ports_stack_high'])) { foreach (dbFetchRows("SELECT * FROM `ports_stack` WHERE `port_id_high` = ? and `device_id` = ?", array($port['ifIndex'], $device['device_id'])) as $lower_if) { if ($lower_if['port_id_low']) { if ($pagp[$device['device_id']][$port['ifIndex']][$lower_if['port_id_low']]) { continue; } // Skip if same PAgP ports $this_port = get_port_by_index_cache($device['device_id'], $lower_if['port_id_low']); if (is_array($this_port)) { $string .= $br . '<i class="oicon-arrow-join"></i> <strong>' . generate_port_link($this_port) . '</strong>'; $br = "<br />"; } } } } unset($int_links, $int_links_v6, $int_links_v4, $int_links_phys, $br); $string .= '</td></tr>'; } } // End Detailed View // If we're showing graphs, generate the graph and print the img tags if ($vars['graph'] == "etherlike") { $graph_file = get_port_rrdfilename($port, "dot3", TRUE); } else { $graph_file = get_port_rrdfilename($port, NULL, TRUE); } if ($vars['graph'] && is_file($graph_file)) { $string .= '<tr><td colspan="' . $table_cols . '">'; $graph_array['to'] = $config['time']['now']; $graph_array['id'] = $port['port_id']; $graph_array['type'] = 'port_' . $vars['graph']; $string .= generate_graph_row($graph_array); $string .= '</td></tr>'; } return $string; }
* * @package observium * @subpackage webui * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ // Ports // Print table of EIGRP interfaces from eigrp_ports. echo '<table class="table table-hover table-striped-two table-condensed ">'; echo '<thead>'; echo '<tr><th class="state-marker"></th><th></th><th>Port</th><th>AS</th><th>Peers</th><th>Mean SRTT</th><th>Auth</th></tr>'; echo '</thead>'; echo '<tbody>'; foreach (dbFetchRows("SELECT * FROM `eigrp_ports` WHERE `device_id` = ?", array($device['device_id'])) as $eigrp_port) { $port = get_port_by_id($eigrp_port['port_id']); echo '<tr class="' . $port['row_class'] . '" onclick="openLink(\'' . generate_port_url($port) . '/\')" style="cursor: pointer;"> <td class="state-marker"></td> <td style="width: 1px;"></td> <td><span class="entity-title">' . generate_port_link($port) . '</span><br /> ' . $port['ifAlias'] . '</td> <td>' . $eigrp_port['eigrp_as'] . '</td> <td>' . $eigrp_port['eigrp_peer_count'] . '</td> <td>' . $eigrp_port['eigrp_MeanSrtt'] . '</td> <td>' . $eigrp_port['eigrp_authmode'] . '</td> </tr> <tr> <td colspan=7>'; $graph_array['to'] = $config['time']['now']; $graph_array['id'] = $eigrp_port['eigrp_port_id']; $graph_array['type'] = 'eigrpport_packets';
$port_colour = '#808080'; } else { if ($result['deleted'] == 0 && $result['ifOperStatus'] == 'down' && $result['ifAdminStatus'] == 'up' && $result['ignore'] == 0 && $result['ignore'] == 0) { // Down ports $port_colour = '#ff0000'; } else { if ($result['deleted'] == 0 && $result['ifOperStatus'] == 'up' && $result['ignore'] == 0 && $result['ignore'] == 0) { // Up ports $port_colour = '#008000'; } } } } } //end if $ports[] = array('count' => count($results), 'url' => generate_port_url($result), 'name' => $name, 'description' => $description, 'colours' => $highlight_colour, 'hostname' => $result['hostname'], 'port_id' => $result['port_id']); } //end foreach } //end if $json = json_encode($ports); die($json); } else { if ($_REQUEST['type'] == 'bgp') { // Search bgp peers if (is_admin() === true || is_read() === true) { $results = dbFetchRows("SELECT `bgpPeers`.*,`devices`.* FROM `bgpPeers` LEFT JOIN `devices` ON `bgpPeers`.`device_id` = `devices`.`device_id` WHERE `astext` LIKE '%" . $search . "%' OR `bgpPeerIdentifier` LIKE '%" . $search . "%' OR `bgpPeerRemoteAs` LIKE '%" . $search . "%' ORDER BY `astext` LIMIT " . $limit); } else { $results = dbFetchRows("SELECT `bgpPeers`.*,`D`.* FROM `bgpPeers`, `devices` AS `D`, `devices_perms` AS `P` WHERE `P`.`user_id` = ? AND `P`.`device_id` = `D`.`device_id` AND `bgpPeers`.`device_id`=`D`.`device_id` AND (`astext` LIKE '%" . $search . "%' OR `bgpPeerIdentifier` LIKE '%" . $search . "%' OR `bgpPeerRemoteAs` LIKE '%" . $search . "%') ORDER BY `astext` LIMIT " . $limit, array($_SESSION['user_id'])); } if (count($results)) {
function generate_port_link($port, $text = NULL, $type = NULL) { global $config; $port = ifNameDescr($port); if (!$text) { $text = fixIfName($port['label']); } if ($type) { $port['graph_type'] = $type; } if (!isset($port['graph_type'])) { $port['graph_type'] = 'port_bits'; } $class = ifclass($port['ifOperStatus'], $port['ifAdminStatus']); if (!isset($port['hostname'])) { $port = array_merge($port, device_by_id_cache($port['device_id'])); } $content = "<div class=list-large>" . $port['hostname'] . " - " . fixifName($port['label']) . "</div>"; if ($port['ifAlias']) { $content .= $port['ifAlias'] . "<br />"; } $content .= "<div style=\\'width: 850px\\'>"; $graph_array['type'] = $port['graph_type']; $graph_array['legend'] = "yes"; $graph_array['height'] = "100"; $graph_array['width'] = "340"; $graph_array['to'] = $config['time']['now']; $graph_array['from'] = $config['time']['day']; $graph_array['id'] = $port['port_id']; $content .= generate_graph_tag($graph_array); $graph_array['from'] = $config['time']['week']; $content .= generate_graph_tag($graph_array); $graph_array['from'] = $config['time']['month']; $content .= generate_graph_tag($graph_array); $graph_array['from'] = $config['time']['year']; $content .= generate_graph_tag($graph_array); $content .= "</div>"; $url = generate_port_url($port); if (port_permitted($port['port_id'], $port['device_id'])) { return overlib_link($url, $text, $content, $class); } else { return fixifName($text); } }
# $debug=1; // Query addresses $results = dbFetchRows($query, $param); if (count($results)) { $found = 1; foreach ($results as $result) { $addr_ports[$result['port_id']][] = $result; } echo '<li class="nav-header">IPs found: ' . count($results) . ' (on ' . count($addr_ports) . ' ports)</li>'; # foreach ($addr_ports as $port_id => $result) foreach ($results as $result) { $port = get_port_by_id_cache($result['port_id']); $device = device_by_id_cache($port['device_id']); echo '<li class="divider" style="margin: 0px;"></li>'; echo '<li>'; echo '<a href="' . generate_port_url($port) . '">'; $descr = $device['hostname'] . ' | ' . rewrite_ifname($port['label']); $name = $result['ipv4_address'] . '/' . $result['ipv4_prefixlen']; if (strlen($name) > 35) { $name = substr($name, 0, 35) . "..."; } /// FIXME: once we have alerting, colour this to the sensor's status $tab_colour = '#194B7F'; // FIXME: This colour pulled from functions.inc.php humanize_device, maybe set it centrally in definitions? echo '<dl style="border-left: 10px solid ' . $tab_colour . '; " class="dl-horizontal dl-search"> <dt style="padding-left: 10px; text-align: center;"> <i class="oicon-magnifier-zoom-actual"></i></dt> <dd><strong>' . highlight_search(htmlentities($name)) . '<br /> <small>' . htmlentities($descr) . '</small></strong></dd> </dl>'; }
* Observium * * This file is part of Observium. * * @package observium * @subpackage search * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2016 Observium Limited * */ /// SEARCH PORTS $results = dbFetchRows("SELECT * FROM `ports`\n LEFT JOIN `devices` USING (`device_id`)\n WHERE (`ifAlias` LIKE ? OR `ifDescr` LIKE ?) {$query_permitted_port}\n ORDER BY `ifDescr` LIMIT {$query_limit}", array($query_param, $query_param)); if (count($results)) { foreach ($results as $result) { humanize_port($result); $name = rewrite_ifname($result['ifDescr']); if (strlen($name) > 35) { $name = substr($name, 0, 35) . "..."; } $description = $result['ifAlias']; if (strlen($description) > 80) { $description = substr($description, 0, 80) . "..."; } $type = rewrite_iftype($result['ifType']); if ($description) { $type .= ' | '; } $port_search_results[] = array('url' => generate_port_url($result), 'name' => $name, 'colour' => $result['table_tab_colour'], 'icon' => '<img src="images/icons/' . $result['icon'] . '.png" />', 'data' => array(escape_html($result['hostname']), $type . highlight_search(escape_html($description)))); } $search_results['ports'] = array('descr' => 'Ports found', 'results' => $port_search_results); } // EOF
} else { $row_colour = $list_colour_b; } } $port_adsl = dbFetchRow("SELECT * FROM `ports_adsl` WHERE `port_id` = ?", array($port['port_id'])); if ($port['ifInErrors_delta'] > 0 || $port['ifOutErrors_delta'] > 0) { $error_img = generate_port_link($port, "<img src='images/16/chart_curve_error.png' alt='Interface Errors' border=0>", "port_errors"); } else { $error_img = ""; } if (dbFetchCell("SELECT COUNT(*) FROM `mac_accounting` WHERE `port_id` = ?", array($port['port_id']))) { $mac = "<a href='" . generate_port_url($port, array('view' => 'macaccounting')) . "'><img src='/images/16/chart_curve.png' align='absmiddle'></a>"; } else { $mac = ""; } echo "<tr style=\"background-color: {$row_colour};\" valign=top onmouseover=\"this.style.backgroundColor='{$list_highlight}';\" onmouseout=\"this.style.backgroundColor='{$row_colour}';\" onclick=\"location.href='" . generate_port_url($port) . "'\" style='cursor: pointer;'>\n <td valign=top width=350>"; echo " <span class=list-large>\n " . generate_port_link($port, $port['ifIndex'] . ". " . $port['label']) . " {$error_img} {$mac}\n </span><br /><span class=interface-desc>" . $port['ifAlias'] . "</span>"; if ($port['ifAlias']) { echo "<br />"; } unset($break); if ($port_details) { foreach (dbFetchRows("SELECT * FROM `ipv4_addresses` WHERE `port_id` = ?", array($port['port_id'])) as $ip) { echo "{$break} <a class=interface-desc href=\"javascript:popUp('/netcmd.php?cmd=whois&query={$ip['ipv4_address']}')\">" . $ip['ipv4_address'] . "/" . $ip['ipv4_prefixlen'] . "</a>"; $break = "<br />"; } foreach (dbFetchRows("SELECT * FROM `ipv6_addresses` WHERE `port_id` = ?", array($port['port_id'])) as $ip6) { echo "{$break} <a class=interface-desc href=\"javascript:popUp('/netcmd.php?cmd=whois&query=" . $ip6['ipv6_address'] . "')\">" . Net_IPv6::compress($ip6['ipv6_address']) . "/" . $ip6['ipv6_prefixlen'] . "</a>"; $break = "<br />"; } }
echo '<br />'; echo 'SNR:' . $port_adsl['adslAtucCurrSnrMgn'] . 'dB/' . $port_adsl['adslAturCurrSnrMgn'] . 'dB'; } else { echo "</td><td width=150 onclick=\"location.href='" . generate_port_url($port) . "'\" >"; if ($port['ifType'] && $port['ifType'] != '') { echo '<span class=box-desc>' . fixiftype($port['ifType']) . '</span>'; } else { echo '-'; } echo '<br />'; if ($ifHardType && $ifHardType != '') { echo '<span class=box-desc>' . $ifHardType . '</span>'; } else { echo '-'; } echo "</td><td width=150 onclick=\"location.href='" . generate_port_url($port) . "'\" >"; if ($port['ifPhysAddress'] && $port['ifPhysAddress'] != '') { echo '<span class=box-desc>' . formatMac($port['ifPhysAddress']) . '</span>'; } else { echo '-'; } echo '<br />'; if ($port['ifMtu'] && $port['ifMtu'] != '') { echo '<span class=box-desc>MTU ' . $port['ifMtu'] . '</span>'; } else { echo '-'; } } //end if echo '</td>'; echo '<td width=375 valign=top class="interface-desc">';
function generate_port_link($port, $text = null, $type = null, $overlib = 1, $single_graph = 0) { global $config; $graph_array = array(); $port = ifNameDescr($port); if (!$text) { $text = fixIfName($port['label']); } if ($type) { $port['graph_type'] = $type; } if (!isset($port['graph_type'])) { $port['graph_type'] = 'port_bits'; } $class = ifclass($port['ifOperStatus'], $port['ifAdminStatus']); if (!isset($port['hostname'])) { $port = array_merge($port, device_by_id_cache($port['device_id'])); } $content = '<div class=list-large>' . $port['hostname'] . ' - ' . fixifName($port['label']) . '</div>'; if ($port['ifAlias']) { $content .= escape_quotes($port['ifAlias']) . '<br />'; } $content .= "<div style=\\'width: 850px\\'>"; $graph_array['type'] = $port['graph_type']; $graph_array['legend'] = 'yes'; $graph_array['height'] = '100'; $graph_array['width'] = '340'; $graph_array['to'] = $config['time']['now']; $graph_array['from'] = $config['time']['day']; $graph_array['id'] = $port['port_id']; $content .= generate_graph_tag($graph_array); if ($single_graph == 0) { $graph_array['from'] = $config['time']['week']; $content .= generate_graph_tag($graph_array); $graph_array['from'] = $config['time']['month']; $content .= generate_graph_tag($graph_array); $graph_array['from'] = $config['time']['year']; $content .= generate_graph_tag($graph_array); } $content .= '</div>'; $url = generate_port_url($port); if ($overlib == 0) { return $content; } else { if (port_permitted($port['port_id'], $port['device_id'])) { return overlib_link($url, $text, $content, $class); } else { return fixifName($text); } } }
if (dbFetchCell("SELECT COUNT(*) FROM `ports_cbqos` WHERE `port_id` = ?", array($port['port_id']))) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'cbqos')) . '"><span class="label label-info">CBQoS</span></a>'; } } if (isset($ports_has_ext['mac_accounting'])) { if (in_array($port['port_id'], $ports_has_ext['mac_accounting'])) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'macaccounting')) . '"><span class="label label-info">MAC</span></a>'; } } else { if (dbFetchCell("SELECT COUNT(*) FROM `mac_accounting` WHERE `port_id` = ?", array($port['port_id']))) { $port['tags'] .= '<a href="' . generate_port_url($port, array('view' => 'macaccounting')) . '"><span class="label label-info">MAC</span></a>'; } } echo '<tr class="' . $port['row_class'] . '"'; if ($vars['tab'] != "port") { echo ' onclick="location.href=\'' . generate_port_url($port) . '\'" style="cursor: pointer;">'; } echo ' <td class="state-marker"></td> <td style="width: 1px;"></td> <td style="min-width: 250px;">'; echo " <span class='entity-title'>\n " . generate_port_link($port) . " " . $port['tags'] . "\n </span><br /><span class=small>" . htmlentities($port['ifAlias']) . "</span>"; if ($port['ifAlias']) { echo "<br />"; } unset($break); if ($port_details) { if (!isset($ports_has_ext['ipv4_addresses']) || in_array($port['port_id'], $ports_has_ext['ipv4_addresses'])) { foreach (dbFetchRows("SELECT * FROM `ipv4_addresses` WHERE `port_id` = ?", array($port['port_id'])) as $ip) { echo $break . "<a class=small href=\"javascript:popUp('/netcmd.php?cmd=whois&query=" . $ip['ipv4_address'] . "')\">" . $ip['ipv4_address'] . "/" . $ip['ipv4_prefixlen'] . "</a>"; $break = "<br />"; }