Module: check_mk
Branch: master
Commit: b39dea4bd0a210055f6c6f49eb324773b445f2ea
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=b39dea4bd0a210…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Sat Feb 6 22:45:48 2016 +0100
Fix replacing placeholders in generated PNP templates
---
.bugs/2365 | 7 +++++--
pnp-templates/default.php | 16 +++++++++++++++-
web/htdocs/metrics.py | 14 ++++++++++++++
3 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/.bugs/2365 b/.bugs/2365
index d3e26a8..7bfdaf6 100644
--- a/.bugs/2365
+++ b/.bugs/2365
@@ -1,10 +1,13 @@
Title: generated pnp templates don't support placeholders
Component: multisite
-State: open
+Class: bug
+State: done
Date: 2015-10-29 09:05:03
Targetversion: 1.2.8
-Class: bug
If a template for the new graphing system contains a placeholder
(i.e. %(util:max@count)), that placeholder is resolved fine in new graphs
but not in the generated PNP templates.
+
+2016-02-06 22:45:21: changed state open -> done
+Not the full syntax is supported but at least those cases that are in use.
diff --git a/pnp-templates/default.php b/pnp-templates/default.php
index 6c2eb32..af16c6e 100644
--- a/pnp-templates/default.php
+++ b/pnp-templates/default.php
@@ -79,13 +79,27 @@ if ($cache_state != "uptodate")
}
}
+function replace_cmk_expression($NAME, $MIN, $MAX, $WARN, $CRIT, $text)
+{
+ # Replace expressions in the title. This not a full implementation of
+ # the complete RPN expression syntax of Check_MK - but sufficient for
+ # all used cases.
+ foreach ($NAME as $i => $n) {
+ $text = str_replace("%($n:min@count)", "$MIN[$i]", $text);
+ $text = str_replace("%($n:max@count)", "$MAX[$i]", $text);
+ $text = str_replace("%($n:warn@count)", "$WARN[$i]", $text);
+ $text = str_replace("%($n:crit@count)", "$CRIT[$i]", $text);
+ }
+ return $text;
+}
+
# Now read template information from cache file, if present
if (($cache_state == "uptodate" || $cache_state == "stale")
&& filesize($template_cache_path) > 0) {
$rrdbase = substr($NAGIOS_XMLFILE, 0, strlen($NAGIOS_XMLFILE) - 4);
$fd = fopen($template_cache_path, "r");
while (!feof($fd)) {
$dsname_line = trim(fgets($fd));
- $option_line = trim(fgets($fd));
+ $option_line = replace_cmk_expression($NAME, $MIN, $MAX, $WARN, $CRIT,
trim(fgets($fd)));
$graph_line = str_replace('$RRDBASE$', $rrdbase, fgets($fd));
if ($dsname_line && $option_line && $graph_line) {
$ds_name[] = $dsname_line;
diff --git a/web/htdocs/metrics.py b/web/htdocs/metrics.py
index d755f45..0633def 100644
--- a/web/htdocs/metrics.py
+++ b/web/htdocs/metrics.py
@@ -1021,6 +1021,19 @@ def get_graph_range(graph_template, translated_metrics):
return min_value, max_value
+#.
+# .--PNP Templates-------------------------------------------------------.
+# | ____ _ _ ____ _____ _ _ |
+# | | _ \| \ | | _ \ |_ _|__ _ __ ___ _ __ | | __ _| |_ ___ ___ |
+# | | |_) | \| | |_) | | |/ _ \ '_ ` _ \| '_ \| |/ _` | __/ _ \/ __| |
+# | | __/| |\ | __/ | | __/ | | | | | |_) | | (_| | || __/\__ \ |
+# | |_| |_| \_|_| |_|\___|_| |_| |_| .__/|_|\__,_|\__\___||___/ |
+# | |_| |
+# +----------------------------------------------------------------------+
+# | Core for creating templates for PNP4Nagios from CMK graph defi- |
+# | nitions. |
+# '----------------------------------------------------------------------'
+
# Called with exactly one variable: the template ID. Example:
# "check_mk-kernel.util:guest,steal,system,user,wait".
def page_pnp_template():
@@ -1232,6 +1245,7 @@ def render_graph_pnp(graph_template, translated_metrics):
return graph_title + "\n" + rrdgraph_arguments + "\n" +
rrdgraph_commands + "\n"
+
#.
# .--Hover-Graph---------------------------------------------------------.
# | _ _ ____ _ |