Module: check_mk
Branch: master
Commit: eca6c4e0f7ecc25a6c3d0e1ba508dcf72cb24afd
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=eca6c4e0f7ecc2…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Fri Dec 3 17:33:07 2010 +0100
Multisite: new ajax service for rescheduling a check
---
web/htdocs/actions.py | 84 ++++++++++++++++++++++++++++++++++++++++++
web/htdocs/config.py | 3 +
web/plugins/pages/.f12 | 4 +-
web/plugins/pages/shipped.py | 2 +
4 files changed, 91 insertions(+), 2 deletions(-)
diff --git a/web/htdocs/actions.py b/web/htdocs/actions.py
new file mode 100644
index 0000000..9bd247a
--- /dev/null
+++ b/web/htdocs/actions.py
@@ -0,0 +1,84 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2010 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.
+
+from lib import *
+import time
+import config
+
+def ajax_action(h):
+ global html
+ html = h
+
+ try:
+ action = html.var("action")
+ if action == "reschedule":
+ action_reschedule()
+ else:
+ raise MKGeneralException("Invalid action '%s'" % action)
+ except Exception, e:
+ html.write("['ERROR', %r]\n" % str(e))
+
+def action_reschedule():
+ site = html.var("site")
+ host = html.var("host", "")
+ if not host:
+ raise MKGeneralException("Action reschedule: missing host name")
+ service = html.var("service", "")
+ if service:
+ what = "service"
+ spec = "%s;%s" % (host, service)
+ cmd = "SVC"
+ add_filter = "Filter: service_description = %s\n" % service
+ else:
+ what = "host"
+ spec = host
+ cmd = "HOST"
+ add_filter = ""
+
+ try:
+ html.live.set_only_sites([site])
+ now = int(time.time())
+ html.live.command("[%d] SCHEDULE_FORCED_%s_CHECK;%s;%d" % (now, cmd,
spec, now))
+ row = html.live.query_row(
+ "GET %ss\n"
+ "WaitObject: %s %s\n"
+ "WaitCondition: last_check > %d\n"
+ "WaitTimeout: %d\n"
+ "WaitTrigger: check\n"
+ "Columns: last_check state plugin_output\n"
+ "Filter: host_name = %s\n%s"
+ % (what, host, service, now, config.reschedule_timeout * 1000, host,
add_filter))
+ last_check = row[0]
+ if last_check <= now:
+ html.write("['TIMEOUT', 'Check not executed within %d
seconds']\n" % (config.reschedule_timeout))
+
+ else:
+ html.write("['OK', %d, %d, %r]\n" % (row[0], row[1],
row[2].encode("utf-8")))
+
+ except Exception, e:
+ raise MKGeneralException("Cannot reschedule check: %s" % e)
+ finally:
+ html.live.set_only_sites()
diff --git a/web/htdocs/config.py b/web/htdocs/config.py
index 291afd7..9597e60 100644
--- a/web/htdocs/config.py
+++ b/web/htdocs/config.py
@@ -400,6 +400,9 @@ custom_style_sheet = None
# URL for start page in main frame (welcome page)
start_url = "main.py"
+# Timeout for rescheduling of host- and servicechecks
+reschedule_timeout = 10.0
+
# __ __ _ __
# \ \ / /__| |__ ___ ___ _ __ / _|
# \ \ /\ / / _ \ '_ \ / __/ _ \| '_ \| |_
diff --git a/web/plugins/pages/.f12 b/web/plugins/pages/.f12
index 334afec..eda8113 100644
--- a/web/plugins/pages/.f12
+++ b/web/plugins/pages/.f12
@@ -1,2 +1,2 @@
-sudo cp -pv *.py /omd/sites/webconf/local/share/check_mk/web/plugins/pages
-sudo omd restart webconf apache
+sudo cp -pv *.py /omd/versions/default/share/check_mk/web/plugins/pages
+sudo omd restart wato apache
diff --git a/web/plugins/pages/shipped.py b/web/plugins/pages/shipped.py
index c89aad6..cdac2ed 100644
--- a/web/plugins/pages/shipped.py
+++ b/web/plugins/pages/shipped.py
@@ -31,6 +31,7 @@ import page_logwatch
import views
import sidebar
import permissions
+import actions
# map URLs to page rendering functions
@@ -54,4 +55,5 @@ pagehandlers.update({
"edit_bookmark" : sidebar.page_edit_bookmark,
"view_permissions" : permissions.page_view_permissions,
"edit_permissions" : permissions.page_edit_permissions,
+ "nagios_action" : actions.ajax_action,
})