Module: check_mk
Branch: master
Commit: 6afa726e068e12377c2260e24b461fbd5f1063ed
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=6afa726e068e12…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Oct 1 22:46:41 2013 +0200
Cleanup environment from previous notificattons
---
ChangeLog | 1 +
modules/notify.py | 56 +++++++++++++++++++++++++++-------------------------
notifications/.f12 | 2 ++
web/htdocs/wato.py | 21 ++++++++++----------
4 files changed, 43 insertions(+), 37 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 2a08708..e3c0c50 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
1.2.3i3:
Core:
* FIX: fixed typo in core startup message "logging initial states"
+ * FIX: cleanup environment from notifications (needed for CMC)
Checks & Agents:
* windows_agent: increased maximum plugin output buffer size to 2MB
diff --git a/modules/notify.py b/modules/notify.py
index ab788a3..253326a 100644
--- a/modules/notify.py
+++ b/modules/notify.py
@@ -665,7 +665,8 @@ def notify_flexible(context, notification_table,
write_into_spoolfile):
def call_notification_script(plugin, parameters, context, write_into_spoolfile):
- # Prepare environment
+
+ # Enter context into environment
os.putenv("NOTIFY_PARAMETERS", " ".join(parameters))
for nr, value in enumerate(parameters):
os.putenv("NOTIFY_PARAMETER_%d" % (nr + 1), value)
@@ -674,19 +675,8 @@ def call_notification_script(plugin, parameters, context,
write_into_spoolfile):
# Export complete context to have all vars in environment.
# Existing vars are replaced, some already existing might remain
for key in context:
- os.putenv('NOTIFY_' + key, context[key].encode('utf-8'))
-
- # Remove service macros for host notifications
- if context['WHAT'] == 'HOST':
- for key in context.keys():
- if 'SERVICE' in key:
- os.unsetenv('NOTIFY_%s' % key)
-
- # Remove exceeding arguments from previous plugin calls
- for nr in range(len(parameters)+1, 101):
- name = "NOTIFY_PARAMETER_%d" % nr
- if name in os.environ:
- os.putenv(name, "")
+ if context['WHAT'] == 'SERVICE' or 'SERVICE' not in key:
+ os.putenv('NOTIFY_' + key, context[key].encode('utf-8'))
# Call actual script without any arguments
if local_notifications_dir:
@@ -701,21 +691,33 @@ def call_notification_script(plugin, parameters, context,
write_into_spoolfile):
notify_log(" not in %s" % notifications_dir)
if local_notifications_dir:
notify_log(" and not in %s" % local_notifications_dir)
- return 2
+ exitcode = 2
- # Create spoolfile or actually call the plugin
- if write_into_spoolfile:
- create_spoolfile({"context": context, "plugin": plugin})
else:
- notify_log("Executing %s" % path)
- out = os.popen(path + " 2>&1 </dev/null")
- for line in out:
- notify_log("Output: %s" % line.rstrip())
- exitcode = out.close()
- if exitcode:
- notify_log("Plugin exited with code %d" % (exitcode >> 8))
- return exitcode
- return 0
+ # Create spoolfile or actually call the plugin
+ if write_into_spoolfile:
+ create_spoolfile({"context": context, "plugin": plugin})
+ exitcode = 0
+ else:
+ notify_log("Executing %s" % path)
+ out = os.popen(path + " 2>&1 </dev/null")
+ for line in out:
+ notify_log("Output: %s" % line.rstrip())
+ exitcode = out.close()
+ if exitcode:
+ notify_log("Plugin exited with code %d" % (exitcode >>
8))
+ else:
+ exitcode = 0
+
+ # Clear environment again
+ for key in context:
+ if context['WHAT'] == 'SERVICE' or 'SERVICE' not in key:
+ os.unsetenv('NOTIFY_' + key)
+ os.unsetenv("NOTIFY_PARAMETERS")
+ for nr, value in enumerate(parameters):
+ os.unsetenv("NOTIFY_PARAMETER_%d" % (nr + 1))
+ os.unsetenv("NOTIFY_LOGDIR")
+ return exitcode
def check_notification_type(context, host_events, service_events):
diff --git a/notifications/.f12 b/notifications/.f12
index a53fe50..2b4aab5 100644
--- a/notifications/.f12
+++ b/notifications/.f12
@@ -1,3 +1,5 @@
+#!/bin/bash
+SITE=${SITE:-$(cat ../.site)}
SITE=${SITE:-$(omd sites --bare | head -n 1)}
sudo mkdir -p /omd/sites/$SITE/share/check_mk/notifications
sudo cp -vp * /omd/sites/$SITE/share/check_mk/notifications
diff --git a/web/htdocs/wato.py b/web/htdocs/wato.py
index e7fad09..9db9b9e 100644
--- a/web/htdocs/wato.py
+++ b/web/htdocs/wato.py
@@ -8033,8 +8033,17 @@ def load_notification_table():
DropdownChoice(
title = _("Notification Plugin"),
choices = load_notification_scripts,
+ default_value = "mail",
),
),
+ ( "parameters",
+ ListOfStrings(
+ title = _("Plugin Arguments"),
+ help = _("You can specify arguments to the
notification plugin here. "
+ "Please refer to the documentation
about the plugin for what "
+ "parameters are allowed or required
here."),
+ )
+ ),
( "disabled",
Checkbox(
title = _("Disabled"),
@@ -8093,7 +8102,7 @@ def load_notification_table():
( 's', _("Start or end of a
scheduled downtime ")),
( 'x', _("Acknowledgement of host
problem")),
],
- default_value = [ 'd', 'u' ],
+ default_value = [ 'd', 'u',
'r', 'f', 's', 'x' ],
)
),
( "service_events",
@@ -8108,7 +8117,7 @@ def load_notification_table():
( 's', _("Start or end of a
scheduled downtime")),
( 'x', _("Acknowledgement of
service problem")),
],
- default_value = [ 'w', 'c',
'u' ],
+ default_value = [ 'w', 'c',
'u', 'r', 'f', 's', 'x' ],
)
),
( "only_hosts",
@@ -8129,14 +8138,6 @@ def load_notification_table():
validate = validate_only_services,
),
),
- ( "parameters",
- ListOfStrings(
- title = _("Plugin Arguments"),
- help = _("You can specify arguments to the
notification plugin here. "
- "Please refer to the documentation
about the plugin for what "
- "parameters are allowed or required
here."),
- )
- ),
]
),
title_function = lambda v: _("Notify by: ") +
notification_script_title(v["plugin"]),