$value) { switch ($var) { case "group": case "group_id": $values = get_group_entities($value); $sql .= generate_query_values_and($values, 'pseudowire_id'); break; case 'device_group_id': case 'device_group': $values = get_group_entities($value, 'device'); $sql .= generate_query_values_and($values, 'device_id'); break; case "device": case "device_id": $sql .= generate_query_values_and($value, 'device_id'); break; case "port": case "port_id": $sql .= generate_query_values_and($value, 'port_id'); break; case "id": $sql .= generate_query_values_and($value, 'pseudowire_id'); break; case "pwid": case "pwID": $sql .= generate_query_values_and($value, 'pwID'); break; case "pwtype": $sql .= generate_query_values_and($value, 'pwType'); break; case "psntype": $sql .= generate_query_values_and($value, 'pwPsnType'); break; case "peer_id": $sql .= generate_query_values_and($value, 'peer_device_id'); break; case "peer_addr": $sql .= generate_query_values_and($value, 'peer_addr'); break; case "event": $sql .= generate_query_values_and($value, 'event'); break; } } $sql .= $GLOBALS['cache']['where']['devices_permitted']; return $sql; } function print_pseudowire_table_header($vars) { if ($vars['view'] == "graphs" || isset($vars['graph']) || isset($vars['id'])) { $table_class = OBS_CLASS_TABLE_STRIPED_TWO; } else { $table_class = OBS_CLASS_TABLE_STRIPED; } echo('' . PHP_EOL); $cols = array( array(NULL, 'class="state-marker"'), 'pwid' => array('pwID', 'style="width: 60px; text-align: right;"'), 'pwtype' => array('Type / PSN Type', 'style="width: 100px;"'), 'device' => array('Local Device', 'style="width: 180px;"'), 'port' => array('Local Port', 'style="width: 100px;"'), array(NULL, 'style="width: 20px;"'), // arrow icon 'peer_addr' => array('Remote Peer', 'style="width: 180px;"'), 'peer_port' => array('Remote Port', 'style="width: 100px;"'), array('History', 'style="width: 100px;"'), 'last_change' => array('Last changed', 'style="width: 60px;"'), 'event' => array('Event', 'style="width: 60px; text-align: right;"'), 'status' => array('Status', 'style="width: 60px; text-align: right;"'), 'uptime' => array('Uptime', 'style="width: 80px;"'), ); if ($vars['page'] == "device" || $vars['popup'] == TRUE) { unset($cols['device']); } echo(get_table_header($cols, $vars)); echo('' . PHP_EOL); } function get_pseudowire_table($vars) { $sql = generate_pseudowire_query($vars); $entries = array(); foreach (dbFetchRows($sql) as $entry) { if (!isset($GLOBALS['cache']['devices']['id'][$entry['device_id']])) { continue; } // Device hostname $entry['hostname'] = $GLOBALS['cache']['devices']['id'][$entry['device_id']]['hostname']; // Remote Peer $peer_addr = $entry['peer_addr']; $peer_addr_type = get_ip_version($peer_addr); if ($peer_addr_type && $entry['peer_device_id']) { if ($peer_addr_type == 6) { $peer_addr = Net_IPv6::uncompress($peer_addr, TRUE); } $peer_addr_type = 'ipv'.$peer_addr_type; //$entry['peer_addr'] = $peer_addr; //$entry['peer_addr_type'] = $peer_addr_type; if (!is_array($cache_pseudowires['ips'][$peer_addr])) { $cache_pseudowires['ips'][$peer_addr]['port_id'] = dbFetchCell('SELECT `port_id` FROM `'.$peer_addr_type.'_addresses` WHERE `'.$peer_addr_type.'_address` = ? '.generate_query_values_and($GLOBALS['cache']['ports']['pseudowires'], 'port_id').' LIMIT 1;', array($peer_addr)); if (!is_numeric($cache_pseudowires['ips'][$peer_addr]['port_id'])) { // Separate entry for find correct port $cache_pseudowires['ips'][$peer_addr]['port_id_fix'] = dbFetchCell('SELECT `port_id` FROM `'.$peer_addr_type.'_addresses` WHERE `'.$peer_addr_type.'_address` = ? '.$GLOBALS['cache']['where']['ports_permitted'].' LIMIT 1;', array($peer_addr)); } //$cache_pseudowires['ips'][$peer_addr]['host'] = $entry['reverse_dns']; } $entry['peer_port_id'] = $cache_pseudowires['ips'][$peer_addr]['port_id']; if (is_numeric($cache_pseudowires['ips'][$peer_addr]['port_id_fix'])) { // If we found port on remote device, than both devices in DB and will try to fix real port $peer_port_tmp = get_port_by_id_cache($cache_pseudowires['ips'][$peer_addr]['port_id_fix']); $peer_port_fix = dbFetchCell('SELECT `port_id` FROM `pseudowires` WHERE `device_id` = ? AND `pwID` = ? LIMIT 1;', array($peer_port_tmp['device_id'], $entry['pwID'])); if (is_numeric($peer_port_fix)) { $entry['peer_port_id'] = $peer_port_fix; } else { $entry['peer_port_id'] = $cache_pseudowires['ips'][$peer_addr]['port_id_fix']; } } //r($entry['peer_port_id']); if ($entry['peer_port_id']) { $entry['peer_port'] = get_port_by_id_cache($entry['peer_port_id']); //r($entry['peer_port']); $entry['peer_device_id'] = $entry['peer_port']['device_id']; //r($entry['peer_device_id']); $entry['peer_device'] = device_by_id_cache($entry['peer_device_id']); } } $entry['hostname'] = $GLOBALS['cache']['devices']['id'][$entry['device_id']]['hostname']; // Attach hostname for sorting $entries[] = $entry; } // Sorting switch ($vars['sort_order']) { case 'desc': $sort_order = SORT_DESC; $sort_neg = SORT_ASC; break; case 'reset': unset($vars['sort'], $vars['sort_order']); // no break here default: $sort_order = SORT_ASC; $sort_neg = SORT_DESC; } switch ($vars['sort']) { case 'device': $entries = array_sort_by($entries, 'hostname', $sort_order, SORT_STRING); break; case 'pwid': $entries = array_sort_by($entries, 'pwID', $sort_order, SORT_NUMERIC); break; case 'pwtype': $entries = array_sort_by($entries, 'pwType', $sort_order, SORT_STRING, 'pwPsnType', $sort_order, SORT_STRING); //$pws = array_sort_by($pws, 'pwType', $sort_order, SORT_STRING); break; case 'peer_addr': $entries = array_sort_by($entries, 'peer_addr', $sort_order, SORT_NUMERIC); break; case 'event': $entries = array_sort_by($entries, 'event', $sort_order, SORT_STRING); break; case 'uptime': $entries = array_sort_by($entries, 'pwUptime', $sort_order, SORT_NUMERIC); break; case 'last_change': $entries = array_sort_by($entries, 'last_change', $sort_neg, SORT_NUMERIC); break; case 'status': $entries = array_sort_by($entries, 'pwOperStatus', $sort_order, SORT_STRING); break; default: // Not sorted } return $entries; } function print_pseudowire_table($vars) { $pws = get_pseudowire_table($vars); $pws_count = count($pws); // Pagination $pagination_html = pagination($vars, $pws_count); echo $pagination_html; if ($vars['pageno']) { $pws = array_chunk($pws, $vars['pagesize']); $pws = $pws[$vars['pageno'] - 1]; } // End Pagination echo generate_box_open(); print_pseudowire_table_header($vars); foreach ($pws as $pw) { print_pseudowire_row($pw, $vars); } echo '
'; echo generate_box_close(); echo $pagination_html; } function humanize_pseudowire(&$pw) { global $config; if (isset($pw['humanized'])) { return; } if (isset($config['entity_events'][$pw['event']])) { $pw = array_merge($pw, $config['entity_events'][$pw['event']]); } else { $pw['event_class'] = 'label label-primary'; $pw['row_class'] = ''; } if ($pw['pwRowStatus'] != 'active') { $pw['row_class'] = 'ignore'; } $device = &$GLOBALS['cache']['devices']['id'][$pw['device_id']]; if ((isset($device['status']) && !$device['status']) || (isset($device['disabled']) && $device['disabled'])) { $pw['row_class'] = 'error'; } $translate = entity_type_translate_array('pseudowire'); $pw['graph'] = $translate['graph']['type']; // Default graph $pw['humanized'] = TRUE; } function print_pseudowire_row($pw, $vars) { echo generate_pseudowire_row($pw, $vars); } function generate_pseudowire_row($pw, $vars) { global $config; humanize_pseudowire($pw); $table_cols = 11; $graph_array = array(); $graph_array['to'] = $config['time']['now']; $graph_array['id'] = $pw['pseudowire_id']; $graph_array['type'] = $pw['graph']; $graph_array['legend'] = "no"; $graph_array['width'] = 80; $graph_array['height'] = 20; $graph_array['bg'] = 'ffffff00'; $graph_array['from'] = $config['time']['day']; if ($pw['event'] && $pw['pwOperStatus']) { $mini_graph = generate_graph_tag($graph_array); } else { // Do not show "Draw Error" minigraph $mini_graph = ''; } $out = ''; $out .= ''. generate_entity_link('pseudowire', $pw, NULL, NULL, TRUE, TRUE) .''; $out .= ''. nicecase($pw['pwType']) . '/' . nicecase($pw['pwPsnType']) .''; if ($vars['page'] != "device" && $vars['popup'] != TRUE) { $out .= '' . generate_device_link($pw, NULL, array('tab' => 'pseudowires')) . ''; $table_cols++; } $out .= ''. generate_entity_link('port', $pw['port_id']) .''; $out .= ''; if ($pw['peer_port_id']) { $out .= '' . generate_entity_link('device', $pw['peer_device_id']) . ''; $out .= '' . generate_entity_link('port', $pw['peer_port_id']) . ''; } else { $out .= ''. generate_popup_link('ip', $pw['peer_addr']) .''; $out .= ''. $pw['pwRemoteIfString'] .''; } $out .= '' . generate_entity_link('pseudowire', $pw, $mini_graph, NULL, FALSE) . ''; $out .= '' . generate_tooltip_link(NULL, format_uptime(($config['time']['now'] - $pw['last_change']), 'short-2') . ' ago', format_unixtime($pw['last_change'])) . ''; $out .= '' . generate_tooltip_link('', $pw['event'], $pw['event_descr'], $pw['event_class']) . ''; $out .= '' . generate_tooltip_link('', $pw['pwOperStatus'], $pw['event_descr'], $pw['event_class']) . ''; $out .= '' . format_uptime($pw['pwUptime'], 'short-2') . ''; $out .= ''; if ($vars['graph'] || $vars['view'] == "graphs" || $vars['id'] == $pw['pseudowire_id']) { // If id set in vars, display only specific graphs $graph_array = array(); $graph_array['type'] = ($vars['graph'] ? $vars['graph'] : $pw['graph']); $graph_array['id'] = $pw['pseudowire_id']; $out .= ''; $out .= ' '; $out .= ' '; $out .= generate_graph_row($graph_array, TRUE); $out .= ' '; $out .= ''; } return $out; } // EOF