function mikrotik_devices() { global $config, $colors, $item_rows; /* ================= input validation ================= */ input_validate_input_number(get_request_var_request('status')); input_validate_input_number(get_request_var_request('page')); input_validate_input_number(get_request_var_request('rows')); /* ==================================================== */ /* clean up sort_column */ if (isset($_REQUEST['sort_column'])) { $_REQUEST['sort_column'] = sanitize_search_string(get_request_var_request('sort_column')); } /* clean up sort_direction */ if (isset($_REQUEST['sort_direction'])) { $_REQUEST['sort_direction'] = sanitize_search_string(get_request_var_request('sort_direction')); } /* clean up filter string */ if (isset($_REQUEST['filter'])) { $_REQUEST['filter'] = sanitize_search_string(get_request_var_request('filter')); } if (isset($_REQUEST['reset'])) { kill_session_var('sess_mikrotik_device_sort_column'); kill_session_var('sess_mikrotik_device_sort_direction'); kill_session_var('sess_mikrotik_device_status'); kill_session_var('sess_mikrotik_device_filter'); kill_session_var('sess_default_rows'); kill_session_var('sess_mikrotik_device_current_page'); } elseif (isset($_REQUEST['clear'])) { kill_session_var('sess_mikrotik_device_sort_column'); kill_session_var('sess_mikrotik_device_sort_direction'); kill_session_var('sess_mikrotik_device_status'); kill_session_var('sess_mikrotik_device_filter'); kill_session_var('sess_default_rows'); kill_session_var('sess_mikrotik_device_current_page'); unset($_REQUEST['sort_column']); unset($_REQUEST['sort_direction']); unset($_REQUEST['status']); unset($_REQUEST['filter']); unset($_REQUEST['rows']); unset($_REQUEST['page']); } else { /* if any of the settings changed, reset the page number */ $changed = false; $changed += mikrotik_check_changed('status', 'sess_mikrotik_device_status'); $changed += mikrotik_check_changed('filter', 'sess_mikrotik_device_filter'); $changed += mikrotik_check_changed('rows', 'sess_default_rows'); if ($changed) { $_REQUEST['page'] = '1'; } } load_current_session_value('page', 'sess_mikrotik_device_current_page', '1'); load_current_session_value('rows', 'sess_default_rows', read_config_option('num_rows_table')); load_current_session_value('sort_column', 'sess_mikrotik_device_sort_column', 'description'); load_current_session_value('sort_direction', 'sess_mikrotik_device_sort_direction', 'ASC'); load_current_session_value('status', 'sess_mikrotik_device_status', '-1'); load_current_session_value('filter', 'sess_mikrotik_device_filter', ''); ?> <script type='text/javascript'> function applyFilter() { strURL = '?action=devices'; strURL += '&status=' + $('#status').val(); strURL += '&filter=' + $('#filter').val(); strURL += '&rows=' + $('#rows').val(); strURL += '&header=false'; loadPageNoHeader(strURL); } function clearFilter() { strURL = '?action=devices&clear=&header=false'; loadPageNoHeader(strURL); } $(function() { $('#form_devices').submit(function(event) { event.preventDefault(); applyFilter(); }); }); </script> <?php html_start_box('<strong>Device Filter</strong>', '100%', $colors['header'], '3', 'center', ''); ?> <tr class='even noprint'> <td> <form id='form_devices' action='mikrotik.php?action=devices'> <table class='filterTable'> <tr> <td> Search </td> <td> <input id='filter' type='text' size='25' value='<?php print get_request_var_request('filter'); ?> '> </td> <td> Status </td> <td> <select id='status' onChange='applyFilter()'> <option value='-1'<?php if (get_request_var_request('type') == '-1') { ?> selected<?php } ?> >All</option> <?php $statuses = db_fetch_assoc('SELECT DISTINCT status FROM host INNER JOIN plugin_mikrotik_system ON host.id=plugin_mikrotik_system.host_id'); $statuses = array_merge($statuses, array('-2' => array('status' => '-2'))); if (sizeof($statuses)) { foreach ($statuses as $s) { switch ($s['status']) { case '0': $status = 'Unknown'; break; case '1': $status = 'Down'; break; case '2': $status = 'Recovering'; break; case '3': $status = 'Up'; break; case '-2': $status = 'Disabled'; break; } echo "<option value='" . $s['status'] . "' " . (get_request_var_request('status') == $s['status'] ? 'selected' : '') . '>' . $status . '</option>'; } } ?> </select> </td> <td> Devices </td> <td> <select id='rows' onChange='applyFilter()'> <option value='-1'<?php if (get_request_var_request('rows') == '-1') { ?> selected<?php } ?> >Default</option> <?php if (sizeof($item_rows)) { foreach ($item_rows as $key => $name) { echo "<option value='" . $key . "' " . (get_request_var_request('rows') == $key ? 'selected' : '') . '>' . $name . '</option>'; } } ?> </select> </td> <td> <input id='refresh' type='button' onClick='applyFilter()' value='Go'> </td> <td> <input id='clear' type='button' onClick='clearFilter()' value='Clear'> </td> </tr> </table> <input type='hidden' id='page' name='page' value='<?php print $_REQUEST['page']; ?> '> </form> </td> </tr> <?php html_end_box(); html_start_box('', '100%', $colors['header'], '3', 'center', ''); if ($_REQUEST['rows'] == '-1') { $num_rows = read_config_option('num_rows_table'); } else { $num_rows = get_request_var_request('rows'); } $limit = ' LIMIT ' . $num_rows * (get_request_var_request('page') - 1) . ',' . $num_rows; $sql_where = ''; if ($_REQUEST['status'] != '-1') { $sql_where .= (strlen($sql_where) ? ' AND' : 'WHERE') . ' hrs.host_status=' . $_REQUEST['status']; } $sql_join = ''; if ($_REQUEST['filter'] != '') { $sql_where .= (strlen($sql_where) ? ' AND' : 'WHERE') . " h.description LIKE '%" . $_REQUEST['filter'] . "%' OR\n\t\t\th.hostname LIKE '%" . $_REQUEST['filter'] . "%'"; } $sql = "SELECT hrs.*, h.hostname, h.description, h.disabled, trees.trees, queues.queues\n\t\tFROM plugin_mikrotik_system AS hrs\n\t\tINNER JOIN host AS h \n\t\tON h.id=hrs.host_id\n\t\tLEFT JOIN (SELECT host_id AS hid, count(*) AS trees FROM plugin_mikrotik_trees GROUP BY host_id) AS trees\n\t\tON trees.hid=hrs.host_id\n\t\tLEFT JOIN (SELECT host_id AS hid, count(*) AS queues FROM plugin_mikrotik_queues GROUP BY host_id) AS queues\n\t\tON queues.hid=hrs.host_id\n\t\t{$sql_join}\n\t\t{$sql_where}\n\t\tORDER BY " . get_request_var_request("sort_column") . " " . get_request_var_request("sort_direction") . " " . $limit; //echo $sql; $rows = db_fetch_assoc($sql); $total_rows = db_fetch_cell("SELECT COUNT(*)\n\t\tFROM plugin_mikrotik_system AS hrs\n\t\tINNER JOIN host AS h\n\t\tON h.id=hrs.host_id\n\t\t{$sql_join}\n\t\t{$sql_where}"); $nav = html_nav_bar('mikrotik.php?action=devices', MAX_DISPLAY_PAGES, get_request_var_request('page'), $num_rows, $total_rows, 15, 'Devices', 'page', 'main'); print $nav; $display_text = array('nosort' => array('display' => 'Actions', 'sort' => 'ASC', 'align' => 'left'), 'description' => array('display' => 'Name', 'sort' => 'ASC', 'align' => 'left'), 'host_status' => array('display' => 'Status', 'sort' => 'DESC', 'align' => 'center'), 'firmwareVersion' => array('display' => 'FW Ver', 'sort' => 'DESC', 'align' => 'right'), 'licVersion' => array('display' => 'Lic Ver', 'sort' => 'DESC', 'align' => 'right'), 'uptime' => array('display' => 'Uptime(d:h:m)', 'sort' => 'DESC', 'align' => 'right'), 'trees' => array('display' => 'Trees', 'sort' => 'DESC', 'align' => 'right'), 'users' => array('display' => 'Users', 'sort' => 'DESC', 'align' => 'right'), 'cpuPercent' => array('display' => 'CPU %', 'sort' => 'DESC', 'align' => 'right'), 'numCpus' => array('display' => 'CPUs', 'sort' => 'DESC', 'align' => 'right'), 'processes' => array('display' => 'Processes', 'sort' => 'DESC', 'align' => 'right'), 'memSize' => array('display' => 'Total Mem', 'sort' => 'DESC', 'align' => 'right'), 'memUsed' => array('display' => 'Used Mem', 'sort' => 'DESC', 'align' => 'right'), 'diskSize' => array('display' => 'Total Disk', 'sort' => 'DESC', 'align' => 'right'), 'diskUsed' => array('display' => 'Used Disk', 'sort' => 'DESC', 'align' => 'right')); html_header_sort($display_text, get_request_var_request('sort_column'), get_request_var_request('sort_direction'), 'false'); /* set some defaults */ $url = $config['url_path'] . 'plugins/mikrotik/mikrotik.php'; $users = $config['url_path'] . 'plugins/mikrotik/images/view_users.gif'; $usersn = $config['url_path'] . 'plugins/mikrotik/images/view_users_none.gif'; $host = $config['url_path'] . 'plugins/mikrotik/images/view_hosts.gif'; $trees = $config['url_path'] . 'plugins/mikrotik/images/view_trees.gif'; $treesn = $config['url_path'] . 'plugins/mikrotik/images/view_trees_none.gif'; $queues = $config['url_path'] . 'plugins/mikrotik/images/view_queues.gif'; $queuesn = $config['url_path'] . 'plugins/mikrotik/images/view_queues_none.gif'; $interfaces = $config['url_path'] . 'plugins/mikrotik/images/view_interfaces.gif'; $dashboard = $config['url_path'] . 'plugins/mikrotik/images/view_dashboard.gif'; $graphs = $config['url_path'] . 'plugins/mikrotik/images/view_graphs.gif'; $nographs = $config['url_path'] . 'plugins/mikrotik/images/view_graphs_disabled.gif'; $hcpudq = read_config_option('mikrotik_dq_host_cpu'); if (sizeof($rows)) { foreach ($rows as $row) { $days = intval($row['uptime'] / (60 * 60 * 24 * 100)); $remainder = $row['uptime'] % (60 * 60 * 24 * 100); $hours = intval($remainder / (60 * 60 * 100)); $remainder = $remainder % (60 * 60 * 100); $minutes = intval($remainder / (60 * 100)); $found = db_fetch_cell('SELECT COUNT(*) FROM graph_local WHERE host_id=' . $row['host_id']); form_alternate_row(); echo "<td style='white-space:nowrap;min-width:115px;text-align:left;'>"; //echo "<a style='padding:1px;' href='" . htmlspecialchars("$url?action=dashboard&reset=1&device=" . $row["host_id"]) . "'><img src='$dashboard' title='View Dashboard' align='absmiddle' border='0'></a>"; if ($row['users'] > 0) { echo "<a class='hyperLink' href='" . htmlspecialchars("{$url}?action=users&reset=1&device=" . $row['host_id']) . "'><img src='{$users}' title='View Users' align='absmiddle' border='0' alt=''></a>"; } else { echo "<img style='border:0px;padding:3px;' src='{$usersn}' title='No Users Found' align='absmiddle' alt=''>"; } if ($row['queues'] > 0) { echo "<a class='hyperLink' href='" . htmlspecialchars("{$url}?action=queues&reset=1&device=" . $row['host_id']) . "'><img src='{$queues}' title='View Simple Queue' align='absmiddle' border='0' alt=''></a>"; } else { echo "<img style='border:0px;padding:3px;' src='{$queuesn}' title='No Simple Queues Found' align='absmiddle' alt=''>"; } if ($row['trees'] > 0) { echo "<a class='hyperLink' href='" . htmlspecialchars("{$url}?action=trees&reset=1&device=" . $row['host_id']) . "'><img src='{$trees}' title='View Queue Trees' align='absmiddle' border='0' alt=''></a>"; } else { echo "<img style='border:0px;padding:3px;' src='{$treesn}' title='No Queue Trees Found' align='absmiddle' alt=''>"; } echo "<a class='hyperLink' href='" . htmlspecialchars("{$url}?action=interfaces&reset=1&device=" . $row['host_id']) . "'><img src='{$interfaces}' title='View Interfaces' align='absmiddle' border='0' alt=''></a>"; if ($found) { echo "<a class='hyperLink' href='" . htmlspecialchars("{$url}?action=graphs&reset=1&host_id=" . $row['host_id'] . "&style=selective&graph_add=&graph_list=&graph_template_id=0&filter=") . "'><img src='{$graphs}' title='View Graphs' align='absmiddle' border='0' alt=''></a>"; } else { echo "<img src='{$nographs}' title='No Graphs Defined' align='absmiddle' border='0'>"; } $graph_cpu = mikrotik_get_graph_url($hcpudq, $row['host_id'], '', $row['numCpus'], false); $graph_cpup = mikrotik_get_graph_template_url(mikrotik_template_by_hash('7df474393f58bae8e8d6b85f10efad71'), $row['host_id'], round($row['cpuPercent'], 2), false); $graph_users = mikrotik_get_graph_template_url(mikrotik_template_by_hash('99e37ff13139f586d257ba9a637d7340'), $row['host_id'], empty($rows['users']) ? '-' : $row['users'], false); $graph_aproc = mikrotik_get_graph_template_url(mikrotik_template_by_hash('e797d967db24fd86341a8aa8c60fa9e0'), $row['host_id'], $row['host_status'] < 2 ? 'N/A' : $row['processes'], false); $graph_disk = mikrotik_get_graph_template_url(mikrotik_template_by_hash('0ece13b90785aa04d1f554a093685948'), $row['host_id'], $row['host_status'] < 2 ? 'N/A' : round($row['diskUsed'], 2), false); $graph_mem = mikrotik_get_graph_template_url(mikrotik_template_by_hash('4396ae857c4f9bc5ed1f26b5361e42d9'), $row['host_id'], $row['host_status'] < 2 ? 'N/A' : round($row['memUsed'], 2), false); $graph_upt = mikrotik_get_graph_template_url(mikrotik_template_by_hash('7d8dc3050621a2cb937cac3895bc5d5b'), $row['host_id'], $row['host_status'] < 2 ? 'N/A' : mikrotik_format_uptime($days, $hours, $minutes), false); if (api_plugin_user_realm_auth('host.php')) { $host_url = "<a class='hyperLink' href='" . htmlspecialchars($config['url_path'] . 'host.php?action=edit&id=' . $row['host_id']) . "' title='Edit Hosts'>" . $row['hostname'] . '</a>'; } else { $host_url = $row['hostname']; } echo '</td>'; echo "<td style='text-align:left;white-space:nowrap;'><strong>" . (strlen($_REQUEST['filter']) ? preg_replace('/(' . preg_quote(get_request_var_request('filter'), '/') . ')/i', "<span class='filteredValue'>\\1</span>", $row['description'] . '</strong> [' . $host_url . ']') : $row['description'] . '</strong> [' . $host_url . ']') . '</td>'; echo "<td style='text-align:center;'>" . get_colored_device_status($row['disabled'] == 'on' ? true : false, $row['host_status']) . '</td>'; echo "<td style='text-align:right;'>" . $row['firmwareVersion'] . '</td>'; echo "<td style='text-align:right;'>" . $row['licVersion'] . '</td>'; echo "<td style='text-align:right;'>" . $graph_upt . '</td>'; echo "<td style='text-align:right;'>" . (!empty($row['trees']) ? $row['trees'] : '-') . '</td>'; echo "<td style='text-align:right;'>" . $graph_users . '</td>'; echo "<td style='text-align:right;'>" . ($row['host_status'] < 2 ? 'N/A' : $graph_cpup) . '</td>'; echo "<td style='text-align:right;'>" . ($row['host_status'] < 2 ? 'N/A' : $graph_cpu) . '</td>'; echo "<td style='text-align:right;'>" . $graph_aproc . '</td>'; echo "<td style='text-align:right;'>" . mikrotik_memory($row['memSize']) . '</td>'; echo "<td style='text-align:right;'>" . $graph_mem . ' %</td>'; echo "<td style='text-align:right;'>" . mikrotik_memory($row['diskSize']) . '</td>'; echo "<td style='text-align:right;'>" . $graph_disk . ' %</td>'; form_end_row(); } print $nav; } else { print '<tr><td colspan="5"><em>No Devices Found</em></td></tr>'; } html_end_box(); }
function add_host_based_graphs() { global $config, $device_hashes, $device_query_hashes, $device_health_hashes; debug('Adding Host Based Graphs'); /* check for host level graphs next data queries */ $host_cpu_dq = read_config_option('mikrotik_dq_host_cpu'); $host_users_dq = mikrotik_data_query_by_hash('ce63249e6cc3d52bc69659a3f32194fe'); $hosts = db_fetch_assoc("SELECT host_id, host.description, host.hostname \n\t\tFROM plugin_mikrotik_system\n\t\tINNER JOIN host\n\t\tON host.id=plugin_mikrotik_system.host_id\n\t\tWHERE host_status IN(0,3) AND host.disabled=''"); if (sizeof($hosts)) { foreach ($hosts as $h) { debug('Processing Host: ' . $h['description'] . ' [' . $h['hostname'] . ']'); foreach ($device_hashes as $hash) { $template = mikrotik_template_by_hash($hash); if (!empty($template)) { debug('Processing ' . db_fetch_cell_prepared('SELECT name FROM graph_templates WHERE hash = ?', array($hash))); mikrotik_gt_graph($h['host_id'], $template); } } foreach ($device_query_hashes as $hash) { $query = mikrotik_data_query_by_hash($hash); if (!empty($query)) { debug('Processing ' . db_fetch_cell_prepared('SELECT name FROM snmp_query WHERE hash = ?', array($hash))); if ($hash == '7dd90372956af1dc8ec7b859a678f227') { $exclusion = read_config_option('mikrotik_user_exclusion'); add_host_dq_graphs($h['host_id'], $query, 'userName', $exclusion, false); } else { add_host_dq_graphs($h['host_id'], $query); } } } $health = db_fetch_row_prepared('SELECT * FROM plugin_mikrotik_system_health WHERE host_id = ?', array($h['host_id'])); debug('Processing Health'); if (sizeof($health)) { foreach ($device_health_hashes as $column => $hash) { if (!empty($health[$column]) && $health[$column] != 'NULL') { $template = mikrotik_template_by_hash($hash); if (!empty($template)) { debug('Processing ' . db_fetch_cell_prepared('SELECT name FROM graph_templates WHERE hash = ?', array($hash))); mikrotik_gt_graph($h['host_id'], $template); } } } } } } else { debug('No Hosts Found'); } }
function add_host_based_graphs() { global $config; debug('Adding Host Based Graphs'); /* check for host level graphs next data queries */ $host_cpu_dq = read_config_option('mikrotik_dq_host_cpu'); $host_users_dq = mikrotik_data_query_by_hash('ce63249e6cc3d52bc69659a3f32194fe'); $host_users_gt = mikrotik_template_by_hash('99e37ff13139f586d257ba9a637d7340'); $host_procs_gt = mikrotik_template_by_hash('e797d967db24fd86341a8aa8c60fa9e0'); $host_disk_gt = mikrotik_template_by_hash('0ece13b90785aa04d1f554a093685948'); $host_mem_gt = mikrotik_template_by_hash('4396ae857c4f9bc5ed1f26b5361e42d9'); $host_cpu_gt = mikrotik_template_by_hash('7df474393f58bae8e8d6b85f10efad71'); $host_arp_gt = mikrotik_template_by_hash('32bd34d525944127063c2d94e2e8f1de'); $host_rts_gt = mikrotik_template_by_hash('8856e3943ecc70e5da835072f584d5a0'); $host_ppp_gt = mikrotik_template_by_hash('47ced1c199d83e8dd79c6ba594c4e3be'); $host_upt_gt = mikrotik_template_by_hash('7d8dc3050621a2cb937cac3895bc5d5b'); $hosts = db_fetch_assoc("SELECT host_id, host.description FROM plugin_mikrotik_system\n\t\tINNER JOIN host\n\t\tON host.id=plugin_mikrotik_system.host_id\n\t\tWHERE host_status=3 AND host.disabled=''"); if (sizeof($hosts)) { foreach ($hosts as $h) { debug("Processing Host '" . $h['description'] . '[' . $h['host_id'] . "]'"); if ($host_users_gt) { debug('Processing Users'); mikrotik_gt_graph($h['host_id'], $host_users_gt); } else { debug('Users Graph Template Not Set'); } if ($host_users_gt) { debug('Processing Processes'); mikrotik_gt_graph($h['host_id'], $host_procs_gt); } else { debug('Processes Graph Template Not Set'); } if ($host_disk_gt) { debug('Processing Disk'); mikrotik_gt_graph($h['host_id'], $host_disk_gt); } else { debug('Disk Graph Template Not Set'); } if ($host_mem_gt) { debug('Processing Memory'); mikrotik_gt_graph($h['host_id'], $host_mem_gt); } else { debug('Memory Graph Template Not Set'); } if ($host_cpu_gt) { debug('Processing CPU'); mikrotik_gt_graph($h['host_id'], $host_cpu_gt); } else { debug('CPU Graph Template Not Set'); } if ($host_arp_gt) { debug('Processing ARP'); mikrotik_gt_graph($h['host_id'], $host_arp_gt); } else { debug('ARP Graph Template Not Set'); } if ($host_rts_gt) { debug('Processing Routes'); mikrotik_gt_graph($h['host_id'], $host_rts_gt); } else { debug('Routes Graph Template Not Set'); } if ($host_ppp_gt) { debug('Processing PPP Active'); mikrotik_gt_graph($h['host_id'], $host_ppp_gt); } else { debug('PPP Active Graph Template Not Set'); } if ($host_upt_gt) { debug('Processing Uptime'); mikrotik_gt_graph($h['host_id'], $host_upt_gt); } else { debug('Uptime Graph Template Not Set'); } debug('Processing Users'); if ($host_users_dq) { add_host_dq_graphs($h['host_id'], $host_users_dq); } debug('Processing CPU'); if ($host_cpu_dq) { add_host_dq_graphs($h['host_id'], $host_cpu_dq); } } } else { debug('No Hosts Found'); } }