From 99a76d4ea2630ce71acb25a0038ea9088a7c72f7 Mon Sep 17 00:00:00 2001 From: Paul Gear Date: Tue, 26 Jan 2016 20:20:42 +1000 Subject: [PATCH] Update per-module poller performance collection This makes the following changes: - Record per-module performance data in the same measurement as overall poller-perf - Add tags to distinguish modules - Update rrd filenames - Use stacked graph for poller modules --- .../graphs/device/poller_modules_perf.inc.php | 32 ++++++++++--------- includes/polling/functions.inc.php | 17 +++++++--- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/html/includes/graphs/device/poller_modules_perf.inc.php b/html/includes/graphs/device/poller_modules_perf.inc.php index dd285a82da..50ca7fcf4b 100644 --- a/html/includes/graphs/device/poller_modules_perf.inc.php +++ b/html/includes/graphs/device/poller_modules_perf.inc.php @@ -1,8 +1,10 @@ + * Copyright (c) 2016 Paul D. Gear + * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your @@ -11,28 +13,28 @@ */ $scale_min = '0'; -$colour_scheme = 'mixed'; $attribs = get_dev_attribs($device['device_id']); ksort($config['poller_modules']); require 'includes/graphs/common.inc.php'; -$colour_iter = 0; -$rrd_options .= " 'COMMENT:Seconds Current Minimum Maximum Average\\n'"; +$count = 0; foreach ($config['poller_modules'] as $module => $module_status) { - $rrd_filename = $config['rrd_dir'].'/'.$device['hostname'].'/poller-'.$module.'-perf.rrd'; + $rrd_filename = rrd_name($device['hostname'], array('poller-perf', $module)); if ($attribs['poll_'.$module] || ( $module_status && !isset($attribs['poll_'.$module]))) { if (is_file($rrd_filename)) { - if (!$config['graph_colours'][$colour_scheme][$colour_iter]) { - $colour_iter = 0; - } - $colour = $config['graph_colours'][$colour_scheme][$colour_iter]; - $colour_iter++; - - $rrd_options .= ' DEF:'.$module.'='.$rrd_filename.':'.$module.':AVERAGE'; - $rrd_options .= ' LINE1.25:'.$module.'#'.$colour.':"'.str_pad($module, 18," ").'"'; - $rrd_options .= ' GPRINT:'.$module.':LAST:%6.2lf GPRINT:'.$module.':AVERAGE:%7.2lf'; - $rrd_options .= " GPRINT:".$module.":MAX:%7.2lf 'GPRINT:".$module.":AVERAGE:%7.2lf\\n'"; + $ds['ds'] = 'poller'; + $ds['descr'] = $module; + $ds['filename'] = $rrd_filename; + $rrd_list[] = $ds; + $count++; } } } + +$unit_text = "Seconds"; +$simple_rrd = false; +$nototal = false; +$text_orig = true; +$colours = 'manycolours'; +require "includes/graphs/generic_multi_simplex_seperated.inc.php"; diff --git a/includes/polling/functions.inc.php b/includes/polling/functions.inc.php index 17a51aea0f..d1fcf196e3 100644 --- a/includes/polling/functions.inc.php +++ b/includes/polling/functions.inc.php @@ -225,19 +225,27 @@ function poll_device($device, $options) { else { foreach ($config['poller_modules'] as $module => $module_status) { if ($attribs['poll_'.$module] || ( $module_status && !isset($attribs['poll_'.$module]))) { - // TODO per-module polling stats $module_start = microtime(true); include 'includes/polling/'.$module.'.inc.php'; $module_time = microtime(true) - $module_start; echo "Runtime for polling module '$module': $module_time\n"; + // save per-module poller stats $tags = array( - 'rrd_def' => 'DS:'.$module.':GAUGE:600:0:U', + 'module' => $module, + 'rrd_def' => 'DS:poller:GAUGE:600:0:U', + 'rrd_name' => array('poller-perf', $module), ); $fields = array( - $module => $module_time, + 'poller' => $module_time, ); - data_update($device, 'poller-'.$module.'-perf', $tags, $fields); + data_update($device, 'poller-perf', $tags, $fields); + + // remove old rrd + $oldrrd = rrd_name($device['hostname'], array('poller', $module, 'perf')); + if (is_file($oldrrd)) { + unlink($oldrrd); + } } else if (isset($attribs['poll_'.$module]) && $attribs['poll_'.$module] == '0') { echo "Module [ $module ] disabled on host.\n"; @@ -280,6 +288,7 @@ function poll_device($device, $options) { if (!empty($device_time)) { $tags = array( 'rrd_def' => 'DS:poller:GAUGE:600:0:U', + 'module' => 'ALL', ); $fields = array( 'poller' => $device_time,