Module: check_mk
Branch: master
Commit: e44eb828882601b3e6512aeed4a0b4b712e0c8b5
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=e44eb828882601…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Nov 15 15:43:45 2011 +0100
Simplified implementation of state filters
---
web/htdocs/htmllib.py | 31 +++++++--------------
web/plugins/views/filters.py | 60 ++++++++++++++++--------------------------
2 files changed, 33 insertions(+), 58 deletions(-)
diff --git a/web/htdocs/htmllib.py b/web/htdocs/htmllib.py
index 8f1a1d8..b925afa 100644
--- a/web/htdocs/htmllib.py
+++ b/web/htdocs/htmllib.py
@@ -167,6 +167,7 @@ class html:
self.output_format = "html"
self.status_icons = {}
self.link_target = None
+ self.form_name = None
self.form_vars = []
def plugin_stylesheets(self):
@@ -410,7 +411,7 @@ class html:
(varname, value, checked_text, text))
self.form_vars.append(varname)
- def checkbox(self, varname, deflt="", cssclass = '', onclick =
None):
+ def checkbox(self, varname, deflt=False, cssclass = '', onclick = None):
error = self.user_errors.get(varname)
if error:
html = "<x class=inputerror>"
@@ -419,15 +420,11 @@ class html:
# wether we should add the default value, we need to detect
# if the form is printed for the first time. This is the
# case if "filled_in" is not set.
- if not self.var("filled_in") == self.form_name: # this form filled in
- value = self.req.vars.get(varname, deflt)
- else:
- value = self.req.vars.get(varname, "")
+ value = self.get_checkbox(varname)
+ if value == None: # form not yet filled in
+ value = deflt
- if value != "" and value != False:
- checked = " CHECKED"
- else:
- checked = ""
+ checked = value and " CHECKED" or ""
if cssclass:
cssclass = ' class="%s"' % cssclass
onclick_code = onclick and " onclick=\"%s\"" % (onclick) or
""
@@ -442,19 +439,11 @@ class html:
# between False and None. The browser does not set the variables for
# Checkboxes that are not checked :-(
def get_checkbox(self, varname, form_name = None):
- if form_name:
- try:
- if not self.var("filled_in") == self.form_name: # this form
filled in
- return None
- except:
- # self.form_name not set, we have no form
- if not self.var("filled_in"):
- return None
- elif not self.var("filled_in"):
+ if not self.has_var("filled_in") or ( # no form filled in
+ self.form_name != None and self.var("filled_in") !=
self.form_name): # wrong form filled in
return None
-
- value = self.req.vars.get(varname, "")
- return not not value
+ else:
+ return not not self.req.vars.get(varname)
def datetime_input(self, varname, default_value):
try:
diff --git a/web/plugins/views/filters.py b/web/plugins/views/filters.py
index 2a22f2d..3325604 100644
--- a/web/plugins/views/filters.py
+++ b/web/plugins/views/filters.py
@@ -188,37 +188,29 @@ class FilterServiceState(Filter):
self.prefix = prefix
def display(self):
- if html.var("filled_in"):
- defval = ""
- else:
- defval = "on"
for var, text in [(self.prefix + "st0", "OK"), (self.prefix +
"st1", "WARN"), \
- (self.prefix + "st2", "CRIT"), (self.prefix
+ "st3", "UNKNOWN"), (self.prefix + "stp",
"PENDING")]:
- html.checkbox(var, defval)
+ (self.prefix + "st2", "CRIT"), (self.prefix
+ "st3", "UNKNOWN"),
+ (self.prefix + "stp", "PENDING")]:
+ html.checkbox(var, True)
html.write(" %s " % text)
def filter(self, infoname):
headers = []
- if html.var("filled_in"):
- defval = ""
- else:
- defval = "on"
-
for i in [0,1,2,3]:
- if html.var(self.prefix + "st%d" % i, defval) == "on":
+ if html.get_checkbox(self.prefix + "st%d" % i) == False:
if self.prefix == "hd":
column = "service_last_hard_state"
else:
column = "service_state"
- headers.append("Filter: %s = %d\nFilter: service_has_been_checked =
1\nAnd: 2\n" % (column, i))
- if html.var(self.prefix + "stp", defval) == "on":
- headers.append("Filter: service_has_been_checked = 0\n")
- if len(headers) == 0:
- return "Limit: 0\n" # no allowed state
- elif len(headers) == 5: # all states allowed
+ headers.append("Filter: %s = %d\n"
+ "Filter: service_has_been_checked = 1\n"
+ "And: 2\nNegate:\n" % (column, i))
+ if html.get_checkbox(self.prefix + "stp") == False:
+ headers.append("Filter: service_has_been_checked = 1\n")
+ if len(headers) == 5: # none allowed = all allowed (makes URL building easier)
return ""
else:
- return "".join(headers) + ("Or: %d\n" % len(headers))
+ return "".join(headers)
declare_filter(215, FilterServiceState("svcstate", _("Service
states"), ""))
declare_filter(216, FilterServiceState("svchardstate", _("Service hard
states"), "hd"))
@@ -229,30 +221,24 @@ class FilterHostState(Filter):
"host", [ "hst0", "hst1", "hst2",
"hstp" ], [])
def display(self):
- if html.var("filled_in"):
- defval = ""
- else:
- defval = "on"
- for var, text in [("hst0", _("UP")), ("hst1",
_("DOWN")), ("hst2", _("UNREACH")), ("hstp",
_("PENDING"))]:
- html.checkbox(var, defval)
+ for var, text in [("hst0", _("UP")), ("hst1",
_("DOWN")),
+ ("hst2", _("UNREACH")), ("hstp",
_("PENDING"))]:
+ html.checkbox(var, True)
html.write(" %s " % text)
def filter(self, infoname):
headers = []
- if html.var("filled_in"):
- defval = ""
- else:
- defval = "on"
-
for i in [0,1,2]:
- if html.var("hst%d" % i, defval) == "on":
- headers.append("Filter: host_state = %d\nFilter:
host_has_been_checked = 1\nAnd: 2\n" % i)
- if html.var("stp", defval) == "on":
- headers.append("Filter: host_has_been_checked = 0\n")
- if len(headers) == 0:
- return "Limit: 0\n" # not allowed state
+ if html.get_checkbox("hst%d" % i) == False:
+ headers.append("Filter: host_state = %d\n"
+ "Filter: host_has_been_checked = 1\n"
+ "And: 2\nNegate:\n" % i)
+ if html.get_checkbox("hstp") == False:
+ headers.append("Filter: host_has_been_checked = 1\n")
+ if len(headers) == 4: # none allowed = all allowed (makes URL building easier)
+ return ""
else:
- return "".join(headers) + ("Or: %d\n" % len(headers))
+ return "".join(headers)
declare_filter(115, FilterHostState())