Module: check_mk
Branch: master
Commit: 7b98d47e5880afc87984d6de678ad21408d6f0ef
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=7b98d47e5880af…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Wed Feb 27 09:02:54 2013 +0100
Added skeleton for empty check
---
doc/skeleton_check | 43 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/doc/skeleton_check b/doc/skeleton_check
new file mode 100644
index 0000000..be9172f
--- /dev/null
+++ b/doc/skeleton_check
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+# -*- encoding: utf-8; py-indent-offset: 4 -*-
+# +------------------------------------------------------------------+
+# | ____ _ _ __ __ _ __ |
+# | / ___| |__ ___ ___| | __ | \/ | |/ / |
+# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
+# | | |___| | | | __/ (__| < | | | | . \ |
+# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
+# | |
+# | Copyright Mathias Kettner 2013 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.
+
+# Example output from agent:
+# Put here the example output from your TCP-Based agent. If the
+# check is SNMP-Based, then remove this section
+
+def inventory_foobars(info):
+ return []
+
+def check_foobar(item, _no_params, info):
+ return 3, "UNKNOWN - Check no implemented"
+
+check_info["foobar"] = {
+ "check_function" : check_foobar,
+ "inventory_function" : inventory_foobar,
+ "service_description" : "FOOBAR",
+ "has_perfdata" : False,
+}
+
Module: check_mk
Branch: master
Commit: d65c0a577722552019482271dbc1cdacc94b16f7
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=d65c0a57772255…
Author: Mathias Kettner <mk(a)mathias-kettner.de>
Date: Tue Feb 26 15:53:44 2013 +0100
FIX: fix user database corruption in case of a race condition
Conflicts:
ChangeLog
---
ChangeLog | 1 +
web/htdocs/userdb.py | 46 +++++++++++++++++++++-------------------------
2 files changed, 22 insertions(+), 25 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 5f4185e..d0e730d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -70,6 +70,7 @@
* FIX: fixed focus bug in transform valuespec class
* FIX: stop doing snapin refreshes after they have been removed
* FIX: sidebar snapins which refresh do not register for restart detection anymore
+ * FIX: fix user database corruption in case of a race condition
* Changed sidebar snapin reload to a global interval (option:
sidebar_update_interval), defaults to 30 seconds
* Sidebar snapins are now bulk updated with one HTTP request each interval
diff --git a/web/htdocs/userdb.py b/web/htdocs/userdb.py
index 8c3096c..075a467 100644
--- a/web/htdocs/userdb.py
+++ b/web/htdocs/userdb.py
@@ -140,22 +140,27 @@ def reset_user_attributes():
user_attributes = {}
def load_users():
- # First load monitoring contacts from Check_MK's world
filename = root_dir + "contacts.mk"
- if os.path.exists(filename):
- try:
- vars = { "contacts" : {} }
- execfile(filename, vars, vars)
- contacts = vars["contacts"]
- except Exception, e:
- if config.debug:
- raise MKGeneralException(_("Cannot read configuration file %s: %s" %
- (filename, e)))
- else:
- html.log('load_users: Problem while loading contacts (%s - %s). '
- 'Initializing structure...' % (filename, e))
- contacts = {}
- else:
+
+ # Make sure that the file exists without modifying it, *if* it exists.
+ # Note the lock will be released at end of page request automatically.
+ file(filename, "a")
+ aquire_lock(filename)
+
+ # First load monitoring contacts from Check_MK's world. If this is
+ # the first time, then the file will be empty, which is no problem.
+ # Execfile will the simply leave contacts = {} unchanged.
+ try:
+ vars = { "contacts" : {} }
+ execfile(filename, vars, vars)
+ contacts = vars["contacts"]
+ except Exception, e:
+ if config.debug:
+ raise MKGeneralException(_("Cannot read configuration file %s: %s" %
+ (filename, e)))
+ else:
+ html.log('load_users: Problem while loading contacts (%s - %s). '
+ 'Initializing structure...' % (filename, e))
contacts = {}
# Now add information about users from the Web world
@@ -261,6 +266,7 @@ def load_users():
def split_dict(d, keylist, positive):
return dict([(k,v) for (k,v) in d.items() if (k in keylist) == positive])
+
def save_users(profiles):
custom_values = user_attributes.keys()
@@ -300,19 +306,9 @@ def save_users(profiles):
if p in multisite_keys + multisite_attributes(profile.get('connector'))])
filename = root_dir + "contacts.mk"
- locked = False
- if os.path.exists(filename):
- # When the file exists, lock the file before opening (and truncating) it
- aquire_lock(filename)
- locked = True
# Check_MK's monitoring contacts
out = create_user_file(filename, "w")
-
- # In create mode lock the file after creation
- if not locked:
- aquire_lock(filename)
-
out.write("# Written by Multisite UserDB\n# encoding: utf-8\n\n")
out.write("contacts.update(\n%s\n)\n" % pprint.pformat(contacts))
out.close()
Module: check_mk
Branch: master
Commit: 8ea224071278f2b921d686fb08a55e6ae380b714
URL: http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=8ea224071278f2…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Tue Feb 26 12:02:11 2013 +0100
sap.value: Fixed missing var
---
checks/sap | 9 +++++++++
1 files changed, 9 insertions(+), 0 deletions(-)
diff --git a/checks/sap b/checks/sap
index 10d3971..a0a868c 100644
--- a/checks/sap
+++ b/checks/sap
@@ -24,6 +24,15 @@
# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA.
+# This map converts between the SAP color codes (key values) and the
+# nagios state codes
+sap_nagios_state_map = [
+ 0, # GRAY (inactive or no current info available) -> OK
+ 0, # GREEN -> OK
+ 1, # YELLOW -> WARNING
+ 2, # RED -> CRITICAL
+]
+
def inventory_sap_dialog(info):
inv = []
for line in info: