Module: check_mk
Branch: master
Commit: 796e62ad33e21eadba867ca316de280fb2b39e7e
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=796e62ad33e21e…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Wed Nov 7 09:38:40 2012 +0100
Fix inline docu in check
---
checks/fileinfo | 8 ++--
modules/notify.py | 96 +++++++++++++++++++++++++++++++++++++++-------------
2 files changed, 76 insertions(+), 28 deletions(-)
diff --git a/checks/fileinfo b/checks/fileinfo
index 9fb3e57..6086fce 100644
--- a/checks/fileinfo
+++ b/checks/fileinfo
@@ -36,10 +36,10 @@
# M:\crash.exe|20024|12968154426
# Parameters
-# "minsize" : ( 5000, 4000 ), in bytes
-# "maxsize" : ( 8000, 9000 ), in bytes
-# "minage" : ( 10, 20 ), in minutes
-# "maxage" : ( 50, 80 ), in minutes
+# "minsize" : ( 5000, 4000 ), in bytes
+# "maxsize" : ( 8000, 9000 ), in bytes
+# "minage" : ( 600, 1200 ), in seconds
+# "maxage" : ( 6000, 12000 ), in seconds
fileinfo_groups = []
def inventory_fileinfo(info, case):
diff --git a/modules/notify.py b/modules/notify.py
index 600a0c9..92791c6 100644
--- a/modules/notify.py
+++ b/modules/notify.py
@@ -89,6 +89,22 @@ def do_notify(args):
sys.stderr.write("check_mk --notify does not take any arguments.\n")
sys.exit(1)
+
+ # Hier müssen wir erstmal rausfinden, an wen die Notifikation gehen soll.
+ # Das sollte hoffentlich als Env-Variable da sein. Wenn nicht in check_mk_templates.cfg
+ # einbauen. Dann können wir in den Kontaktdefinitionen nachschauen. Diese sollten
+ # ja in main.mk/conf.d vorhanden sein. Die neue Notifikationstabelle muss auf jeden
+ # fall da rein. Für den Benutzer rufen also diese Tabelle auf. Wenn es die
+ # nicht gibt (garkein Eintrag), verfahren wir nach dem alten Verfahren und
+ # senden direkt eine Email. Wenn es die Tabelle aber gibt, werten wir
+ # Zeile für Zeile aus:
+ # - Bestimmen, ob die Zeile aktiv ist. Dazu ist evtl. eine Livestatus-Rückanfrage
+ # notwendig. Das ist nicht optimal, aber zumindest wegen der Timeperiods notwendig.
+ # - Wenn aktiv, dann rufen wir das Plugin dazu auf. Dieses hat sich mit einer
+ # Python-Funktion registriert. Wo werden diese definiert? Im precompiled-Fall
+ # brauchen wir das *nicht*. Man könnte die Plugins also einfach nur bei --notify
+ # einlesen. Zeitkritisch ist das nicht sehr, denn Notifikationen sind selten.
+
# Information about notification is excpected in the
# environment in variables with the prefix NOTIFY_
context = dict([
@@ -115,32 +131,19 @@ def do_notify(args):
"that are prefixed with NOTIFY_\n")
sys.exit(1)
- try:
- notify_log(substitute_context(notification_log_template, context))
+ # Get notification settings for the contact in question - if available.
+ method = "email"
+ contact = contacts.get(context["CONTACTNAME"])
- if "SERVICEDESC" in context:
- subject_t = notification_service_subject
- body_t = notification_service_body
+ try:
+ if contact:
+ method = contact.get("notification_method")
+ else:
+ method = 'email'
+ if type(method) == tuple and method[0] == 'flexible':
+ notify_flexible(contact, context, method[1])
else:
- subject_t = notification_host_subject
- body_t = notification_host_body
-
- subject = substitute_context(subject_t, context)
- context["SUBJECT"] = subject
- body = substitute_context(notification_common_body + body_t, context)
- command = substitute_context(notification_mail_command, context)
- command_utf8 = command.encode("utf-8")
- if notification_logging >= 2:
- notify_log("Executing command: %s" % command)
- notify_log(body)
- # Make sure that mail(x) is using UTF-8. More then
- # setting the locale cannot be done here. We hope that
- # C.UTF-8 is always available. Please check the output
- # of 'locale -a' on your system if you are curious.
- os.putenv("LANG", "C.UTF-8")
- if notification_logging >= 2:
- file(var_dir + "/notify/body.log", "w").write(body.encode("utf-8"))
- os.popen(command_utf8, "w").write(body.encode("utf-8"))
+ notify_via_email(context)
except Exception, e:
notify_log("ERROR: %s\n%s" % (e, format_exception()))
@@ -148,12 +151,57 @@ def do_notify(args):
if notification_log:
sys.stderr.write("Details have been logged to %s.\n" % notification_log)
sys.exit(1)
+
except Exception, e:
crash_dir = var_dir + "/notify"
if not os.path.exists(crash_dir):
os.makedirs(crash_dir)
file(crash_dir + "/crash.log", "a").write("CRASH:\n%s\n\n" % format_exception())
+
+def notify_via_email(context):
+ notify_log(substitute_context(notification_log_template, context))
+
+ if "SERVICEDESC" in context:
+ subject_t = notification_service_subject
+ body_t = notification_service_body
+ else:
+ subject_t = notification_host_subject
+ body_t = notification_host_body
+
+ subject = substitute_context(subject_t, context)
+ context["SUBJECT"] = subject
+ body = substitute_context(notification_common_body + body_t, context)
+ command = substitute_context(notification_mail_command, context)
+ command_utf8 = command.encode("utf-8")
+ if notification_logging >= 2:
+ notify_log("Executing command: %s" % command)
+ notify_log(body)
+ # Make sure that mail(x) is using UTF-8. More then
+ # setting the locale cannot be done here. We hope that
+ # C.UTF-8 is always available. Please check the output
+ # of 'locale -a' on your system if you are curious.
+ os.putenv("LANG", "C.UTF-8")
+ if notification_logging >= 2:
+ file(var_dir + "/notify/body.log", "w").write(body.encode("utf-8"))
+ os.popen(command_utf8, "w").write(body.encode("utf-8"))
+
+def notify_flexible(contact, context, notification_table):
+ notify_log("Flexible notification for %s" % context["CONTACTNAME"])
+ for entry in notification_table:
+ plugin = entry["plugin"]
+ notify_log("Plugin: %s" % plugin)
+ if entry["disabled"]:
+ notify_log("- Skipping: it is disabled for this user")
+ continue
+ # Was fehlt noch?
+ # 1. Event-Typ filtern
+ # 2. timepreriod filtern (dazu Livestatusanfrage notwendig, wenn nicht 7X24
+ # 3. Eskalation
+ # 4. Dann das Plugin aufrufen, dabei aber das Environment vorher vorbereiten
+ notify_log(repr(notification_table))
+
+
def format_exception():
import traceback, StringIO, sys
txt = StringIO.StringIO()
Module: check_mk
Branch: master
Commit: 85211d3b3d7ead4072d0495b2b3d263fba730e95
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=85211d3b3d7ead…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Wed Nov 7 08:37:04 2012 +0100
Dashboard header can now be hidden by setting "title" to None
---
ChangeLog | 1 +
web/htdocs/dashboard.py | 10 +++++++++-
2 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index b8ce60d..1ade945 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,6 +31,7 @@
* Dashboard globes can now be filtered by host_contact_group/service_contact_group
* Dashboard "iframe" attribute can now be rendered dynamically using the
"iframefunc" attribute in the dashlet declaration
+ * Dashboard header can now be hidden by setting "title" to None
Livestatus:
* Added new table statehist, used for SLA queries
diff --git a/web/htdocs/dashboard.py b/web/htdocs/dashboard.py
index 2bb4e12..7aa0907 100644
--- a/web/htdocs/dashboard.py
+++ b/web/htdocs/dashboard.py
@@ -123,8 +123,16 @@ def render_dashboard(name):
# in order to make it clear to the user, that he is seeing only partial
# data.
title = board["title"]
- if wato_folder is not None:
+
+ if title is None:
+ # If the title is none, hide the header line
+ html.set_render_headfoot(False)
+ header_height = 0
+ title = ''
+
+ elif wato_folder is not None:
title = wato.api.get_folder_title(wato_folder) + " - " + title
+
html.header(title, javascripts=["dashboard"], stylesheets=["pages", "dashboard", "status", "views"])
html.write("<div id=dashboard class=\"dashboard_%s\">\n" % name) # Container of all dashlets
Module: check_mk
Branch: master
Commit: 4e75df2d4a1c80ebe6e23e23a034b855b7ae348a
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=4e75df2d4a1c80…
Author: Bastian Kuhn <bk(a)mathias-kettner.de>
Date: Mon Nov 5 14:53:18 2012 +0100
Added pnp Template for apc_symetra_power
---
pnp-templates/check_mk-apc_symmetra_power.php | 39 +++++++++++++++++++++++++
1 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/pnp-templates/check_mk-apc_symmetra_power.php b/pnp-templates/check_mk-apc_symmetra_power.php
new file mode 100644
index 0000000..63b2c8b
--- /dev/null
+++ b/pnp-templates/check_mk-apc_symmetra_power.php
@@ -0,0 +1,39 @@
+<?php
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2012 mk(a)mathias-kettner.de |
+# +------------------------------------------------------------------+
+#
+# This file is part of Check_MK.
+# The official homepage is at http://mathias-kettner.de/check_mk.
+#
+# check_mk 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 in version 2. check_mk is distributed
+# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
+# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE. See the GNU General Public License for more de-
+# ails. You should have received a copy of the GNU General Public
+# License along with GNU Make; see the file COPYING. If not, write
+# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+# Boston, MA 02110-1301 USA.
+
+$opt[1] = "--vertical-label \"Watt\" -l 0 -u 60 --title \"Current Power\" ";
+
+
+$def[1] = "DEF:var1=$RRDFILE[1]:$DS[1]:MAX ";
+$def[1] .= "AREA:var1#800040:\"Power\:\" ";
+$def[1] .= "GPRINT:var1:LAST:\"%2.0lfW\" ";
+$def[1] .= "LINE1:var1#800040:\"\" ";
+$def[1] .= "GPRINT:var1:MAX:\"(Max\: %2.0lfW,\" ";
+$def[1] .= "GPRINT:var1:AVERAGE:\"Avg\: %2.0lfW)\" ";
+$def[1] .= "HRULE:$CRIT[1]#FF0000:\"Critical\: $CRIT[1]W\" ";
+
+
+
+?>