[ 'poller_name' => "Default", 'poller_id' => 0 ]]; $navbar = ['brand' => "Poller", 'class' => "navbar-narrow"]; if ($_SESSION['userlevel'] >= 7) { $navbar['options']['wrapper']['text'] = 'Wrapper'; } $navbar['options']['devices']['text'] = 'Per-Device'; $navbar['options']['modules']['text'] = 'Per-Module'; if (OBS_DISTRIBUTED) { foreach (dbFetchRows("SELECT *, UNIX_TIMESTAMP() - UNIX_TIMESTAMP(`timestamp`) AS `lasttime` FROM `pollers`") as $entry) { $pollers[$entry['poller_id']] = $entry; } $navbar['options']['pollers']['text'] = 'Partitions'; $navbar['options_right']['poller_id']['text'] = 'Poller Partition (All)'; if (!safe_empty($vars['poller_id'])) { $navbar['options_right']['poller_id']['suboptions']['all']['text'] = 'All Partitions'; $navbar['options_right']['poller_id']['suboptions']['all']['url'] = generate_url($vars, ['poller_id' => NULL]); } foreach ($pollers as $poller) { $navbar['options_right']['poller_id']['suboptions'][$poller['poller_id']]['text'] = escape_html($poller['poller_name']); $navbar['options_right']['poller_id']['suboptions'][$poller['poller_id']]['url'] = generate_url($vars, ['poller_id' => $poller['poller_id']]); if (!safe_empty($vars['poller_id']) && $vars['poller_id'] == $poller['poller_id']) { $navbar['options_right']['poller_id']['suboptions'][$poller['poller_id']]['class'] = "active"; $navbar['options_right']['poller_id']['text'] = 'Poller Partition (' . $poller['poller_name'] . ')'; } } } foreach ($navbar['options'] as $option => $array) { if (!isset($vars['view'])) { $vars['view'] = $option; } if ($vars['view'] == $option) { $navbar['options'][$option]['class'] .= " active"; } $navbar['options'][$option]['url'] = generate_url($vars, ['view' => $option]); } print_navbar($navbar); unset($navbar); // Generate statistics $totals['pollery'] = 0; $totals['disovery'] = 0; $totals['count'] = 0; $proc['avg2']['poller'] = 0; $proc['avg2']['discovery'] = 0; $proc['max']['poller'] = 0; $proc['max']['discovery'] = 0; $mod_total = 0; $mods = []; // Make poller table $devices = []; foreach (dbFetchRows("SELECT * FROM `devices`") as $device) { $device_id = $device['device_id']; humanize_device($device); if ($device['disabled'] == 1 && !$config['web_show_disabled']) { continue; } if (!safe_empty($vars['poller_id']) && $device['poller_id'] != $vars['poller_id']) { // Restricting devices list to matching poller domain. //unset($devices[$device['device_id']]); continue; } // Convert empty times to numeric $device['last_polled_timetaken'] = (float)$device['last_polled_timetaken']; $device['last_discovered_timetaken'] = (float)$device['last_discovered_timetaken']; $devices[$device['device_id']] = $device; // Find max poller/discovery times if ($device['status']) { if ($device['last_polled_timetaken'] > $proc['max']['poller']) { $proc['max']['poller'] = $device['last_polled_timetaken']; } if ($device['last_discovered_timetaken'] > $proc['max']['discovery']) { $proc['max']['discovery'] = $device['last_discovered_timetaken']; } } $proc['avg2']['poller'] += $device['last_polled_timetaken'] ** 2; $proc['avg2']['discovery'] += $device['last_discovered_timetaken'] ** 2; $totals['count']++; $totals['poller'] += $device['last_polled_timetaken']; $totals['discovery'] += $device['last_discovered_timetaken']; $devices[$device_id] = array_merge($devices[$device_id], [ 'html_row_class' => $device['html_row_class'], 'device_hostname' => $device['hostname'], 'device_link' => generate_device_link($device), 'device_status' => $device['status'], 'device_disabled' => $device['disabled'], 'last_polled_timetaken' => $device['last_polled_timetaken'], //'last_polled' => $device['last_polled'], 'last_discovered_timetaken' => $device['last_discovered_timetaken'], //'last_discovered' => $device['last_discovered'] ] ); foreach ($device['state']['poller_mod_perf'] as $mod => $time) { $mods[$mod]['time'] += $time; $mods[$mod]['count']++; $mod_total += $time; } } $proc['avg']['poller'] = round(float_div($totals['polling'], $totals['count']), 2); $proc['avg']['discovery'] = round(float_div($totals['discovery'], $totals['count']), 2); // End generate statistics if ($vars['view'] === "modules") { if ($_SESSION['userlevel'] >= 7) { echo generate_box_open(['header-border' => TRUE, 'title' => 'Poller Modules']); $graph_array = [ 'type' => 'global_pollermods', 'from' => get_time('week'), 'to' => get_time(), 'legend' => 'no' ]; if (!safe_empty($vars['poller_id']) && is_numeric($vars['poller_id'])) { $graph_array['poller_id'] = $vars['poller_id']; } print_graph_row($graph_array); echo generate_box_close(); } echo generate_box_open(); if ($_SESSION['userlevel'] >= 7) { echo('' . PHP_EOL); } else { echo('
' . PHP_EOL); } $mods = array_sort_by($mods, 'time', SORT_DESC, SORT_NUMERIC); foreach ($mods as $mod => $data) { $perc = round(float_div($data['time'], $mod_total) * 100); $bg = get_percentage_colours($perc); echo ''; echo ' '; echo ' '; echo ' '; echo ' '; echo ''; if ($_SESSION['userlevel'] >= 7) { echo ''; echo ' '; echo ''; } } ?>

' . $mod . '

' . print_percentage_bar('100%', '20', $perc, $perc . '%', "ffffff", $bg['left'], '', "ffffff", $bg['right']) . '' . $data['count'] . '' . round($data['time'], 3) . 's
'; $graph_array = [ 'type' => 'global_pollermod', 'module' => $mod, 'legend' => 'no' ]; if (!safe_empty($vars['poller_id']) && is_numeric($vars['poller_id'])) { $graph_array['poller_id'] = $vars['poller_id']; } print_graph_row($graph_array); echo '
= 7) { $rrd_file = $config['rrd_dir'] . '/poller-wrapper.rrd'; if (rrd_is_file($rrd_file, TRUE)) { echo generate_box_open(['header-border' => TRUE, 'title' => 'Poller Wrapper History']); $graph_array = [ 'type' => 'poller_wrapper_threads', //'operation' => 'poll', //'width' => 1158, 'height' => 100, 'from' => get_time('week'), 'to' => get_time() ]; // We've selected a paritioned poller. Switch the graph. if (isset($vars['poller_id']) && $vars['poller_id'] != 0) { $graph_array['type'] = 'poller_partitioned_wrapper_threads'; $graph_array['id'] = $vars['poller_id']; } //echo(generate_graph_tag($graph_array)); print_graph_row($graph_array); //$graph_array = array('type' => 'poller_wrapper_count', // //'operation' => 'poll', // 'width' => 1158, // 'height' => 100, // 'from' => get_time('week'), // 'to' => get_time('now'), // ); //echo(generate_graph_tag($graph_array)); //echo "

Poller wrapper Total time

"; $graph_array = [ 'type' => 'poller_wrapper_times', //'operation' => 'poll', //'width' => 1158, 'height' => 100, 'from' => get_time('week'), 'to' => get_time() ]; // We've selected a paritioned poller. Switch the graph. if (isset($vars['poller_id']) && $vars['poller_id'] != 0) { $graph_array['type'] = 'poller_partitioned_wrapper_times'; $graph_array['id'] = $vars['poller_id']; } //echo(generate_graph_tag($graph_array)); print_graph_row($graph_array); //echo generate_box_close([ 'footer_content' => 'Please note: Total poller wrapper time is the execution time for the poller wrapper process.' ]); echo generate_box_close(); } } elseif ($vars['view'] === "devices") { if ($_SESSION['userlevel'] >= 7) { echo generate_box_open(['header-border' => TRUE, 'title' => 'All Devices Poller Performance']); $graph_array = [ 'type' => 'global_poller', 'from' => get_time('week'), 'to' => get_time(), 'legend' => 'no' ]; if (!safe_empty($vars['poller_id']) && is_numeric($vars['poller_id'])) { $graph_array['poller_id'] = $vars['poller_id']; } print_graph_row($graph_array); echo generate_box_close(); } echo generate_box_open(['header-border' => TRUE, 'title' => 'Poller/Discovery Timing']); echo('' . PHP_EOL); // FIXME -- table header generator / sorting ?> Poller'; } ?> $discovered > $hostname $devices = array_sort_by($devices, 'device_status', SORT_DESC, SORT_NUMERIC, 'last_polled_timetaken', SORT_DESC, SORT_NUMERIC, 'last_discovered_timetaken', SORT_DESC, SORT_NUMERIC, 'device_hostname', SORT_ASC, SORT_STRING); // Print poller table foreach ($devices as $row) { $proc['time']['poller'] = round(float_div($row['last_polled_timetaken'], $proc['max']['poller']) * 100); $proc['color']['poller'] = "success"; if ($row['last_polled_timetaken'] > ($proc['max']['poller'] * 0.75)) { $proc['color']['poller'] = "danger"; } elseif ($row['last_polled_timetaken'] > ($proc['max']['poller'] * 0.5)) { $proc['color']['poller'] = "warning"; } elseif ($row['last_polled_timetaken'] >= ($proc['max']['poller'] * 0.25)) { $proc['color']['poller'] = "info"; } $proc['time']['discovery'] = round(float_div($row['last_discovered_timetaken'], $proc['max']['discovery']) * 100); $proc['color']['discovery'] = "success"; if ($row['last_discovered_timetaken'] > ($proc['max']['discovery'] * 0.75)) { $proc['color']['discovery'] = "danger"; } elseif ($row['last_discovered_timetaken'] > ($proc['max']['discovery'] * 0.5)) { $proc['color']['discovery'] = "warning"; } elseif ($row['last_discovered_timetaken'] >= ($proc['max']['discovery'] * 0.25)) { $proc['color']['discovery'] = "info"; } $poll_bg = get_percentage_colours($proc['time']['poller']); $discover_bg = get_percentage_colours($proc['time']['discovery']); // Poller times echo(' '); // Discovery times echo(' '); if (safe_empty($vars['poller_id'])) { echo ' '; } echo ' '; } // Calculate root mean square $proc['avg2']['poller'] = sqrt(float_div($proc['avg2']['poller'], $totals['count'])); $proc['avg2']['poller'] = round($proc['avg2']['poller'], 2); $proc['avg2']['discovery'] = sqrt(float_div($proc['avg2']['discovery'], $totals['count'])); $proc['avg2']['discovery'] = round($proc['avg2']['discovery'], 2); echo(' '); unset($row); ?>
Device Last Polled Last Discovered
' . $row['device_link'] . ' ' . print_percentage_bar('100%', '20', $proc['time']['poller'], $proc['time']['poller'] . '%', "ffffff", $poll_bg['left'], '', "ffffff", $poll_bg['right']) . ' ' . $row['last_polled_timetaken'] . 's ' . format_uptime(get_time('now') - strtotime($row['last_polled']), 'shorter') . ' ago' . print_percentage_bar('100%', '20', $proc['time']['discovery'], $proc['time']['discovery'] . '%', "ffffff", $discover_bg['left'], '', "ffffff", $discover_bg['right']) . ' ' . $row['last_discovered_timetaken'] . 's ' . format_uptime(get_time('now') - strtotime($row['last_discovered']), 'shorter') . ' ago' . get_type_class_label($pollers[$row['poller_id']]['poller_name'], 'poller') . '
Total time for all devices (average per device): ' . $totals['poller'] . 's (' . $proc['avg2']['poller'] . 's) ' . $totals['discovery'] . 's (' . $proc['avg2']['discovery'] . 's)
' . PHP_EOL; echo get_table_header([ [ 'ID', 'style="width: 20px;"' ], [ 'Poller Name', 'style="width: 8%;"' ], [ 'Host ID / Uname', 'style="width: 30%;"' ], [ 'Version', 'style="width: 80px;"' ], 'Assigned Devices', [ 'Polled (ago)', 'style="width: 80px;"' ], ]); //echo 'Poller NameAssigned Devices'; foreach ($pollers as $poller) { $device_list = []; echo ''; echo '' . $poller['poller_id'] . ''; echo '' . $poller['poller_name'] . ''; if ($poller['device_id']) { echo '' . $poller['host_id'] . ' (' . generate_device_link($poller['device_id']) . ')
' . generate_device_link($poller['device_id'], $poller['host_uname']) . '
'; } else { echo '' . $poller['host_id'] . '
' . $poller['host_uname'] . '
'; } $poller_version = explode(' ', $poller['poller_version'])[0]; $poller_revision = explode('.', $poller_version)[2]; if ((get_obs_attrib('latest_rev') - $poller_revision) >= $config['version_check_revs']) { echo '' . $poller_version . ''; } elseif (abs(OBSERVIUM_REV - $poller_revision) >= $config['version_check_revs']) { echo '' . $poller_version . ''; } else { echo '' . $poller_version . ''; } echo ''; foreach (dbFetchRows("SELECT * FROM `devices` WHERE `poller_id` = ?", [$poller['poller_id']]) as $device) { $device_list[] = generate_device_link($device); } $pollers[$poller['poller_id']]['devices'] = count($device_list); echo implode(', ', $device_list); echo ''; if ($poller['lasttime'] < 3600) { // Use dynamic counter $poller_refresh = 'poller_'.$poller['poller_id'].'_refresh'; register_html_resource('script', 'time_refresh("'.$poller_refresh.'", '.$poller['lasttime'].', 1)'); echo ''; } else { echo '' . format_uptime($poller['lasttime']) . ''; } echo ''; } echo ''; echo generate_box_close(); foreach ($pollers as $poller) { if (!$poller['devices']) { // poller not have associated device, skip graphs continue; } echo generate_box_open(['header-border' => TRUE, 'title' => 'Poller Wrapper (' . $poller['poller_name'] . ') History']); //r($poller); $graph_array = [ 'type' => 'poller_partitioned_wrapper_threads', //'operation' => 'poll', 'id' => $poller['poller_id'], // 'width' => 1158, 'height' => 100, 'from' => get_time('week'), 'to' => get_time(), ]; //echo(generate_graph_tag($graph_array)); print_graph_row($graph_array); $graph_array = [ 'type' => 'poller_partitioned_wrapper_times', //'operation' => 'poll', 'id' => $poller['poller_id'], // 'width' => 1158, 'height' => 100, 'from' => get_time('week'), 'to' => get_time(), ]; //echo(generate_graph_tag($graph_array)); print_graph_row($graph_array); echo generate_box_close(); if ($actions = dbFetchRows('SELECT * FROM `observium_actions` WHERE `poller_id` = ?', [$poller['poller_id']])) { echo generate_box_open(['header-border' => TRUE, 'title' => 'Poller Actions (' . $poller['poller_name'] . ')']); $options = [ 'columns' => [ 'ID', 'Poller', 'Action', 'Identifier', 'Variables', 'Added' ], 'vars' => 'json', 'added' => 'unixtime' ]; echo build_table($actions, $options); echo generate_box_close(); } } } unset($devices, $proc, $pollers); // EOF