Module: check_mk
Branch: master
Commit: 178d21532289bfd8cf4df6616118a95daa6c2bab
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=178d21532289bf…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Thu Jul 13 11:45:43 2017 +0200
EC: host config cache is now updated on core config reload
Change-Id: I1d14fe6a4661fc8cf88c0727f807f33fa73281da
---
bin/mkeventd | 32 +++++++++++++++++++++++++++-----
1 file changed, 27 insertions(+), 5 deletions(-)
diff --git a/bin/mkeventd b/bin/mkeventd
index 841007f..69af468 100755
--- a/bin/mkeventd
+++ b/bin/mkeventd
@@ -594,7 +594,6 @@ def check_timeperiod(tpname):
# | It fetches and caches the information during runtine of the EC. |
# '----------------------------------------------------------------------'
-# TODO: Reload config on core reload
class HostConfig(object):
def __init__(self):
self._set_logger()
@@ -623,12 +622,16 @@ class HostConfig(object):
def get_by_event_host_name(self, event_host_name, deflt=None):
try:
+ self._update_from_core()
+ except:
+ self.logger.exception("Failed to get host info from core. Try again
later.")
+ return
+
+ try:
return self._event_host_to_host[event_host_name]
except KeyError:
pass # Not cached yet
- self._update_from_core()
-
# Note: It is important that we use exactly the same algorithm here as in the
core
# (enterprise/core/src/World.cc getHostByDesignation)
#
@@ -651,9 +654,10 @@ class HostConfig(object):
def _update_from_core(self):
- if self._got_config_from_core:
+ if not self._has_core_config_reloaded():
return
+ self.initialize()
self.logger.debug("Fetching host config from core")
columns = [
@@ -675,7 +679,25 @@ class HostConfig(object):
self._hosts_by_lower_address[host["alias"].lower()] = host
self.logger.debug("Got %d hosts from core" % len(self._hosts_by_name))
- self._got_config_from_core = True
+ self._got_config_from_core = self._get_core_start_time()
+
+
+ def _has_core_config_reloaded(self):
+ if not self._got_config_from_core:
+ return True
+
+ if self._get_core_start_time() > self._got_config_from_core:
+ return True
+
+ return False
+
+
+ def _get_core_start_time(self):
+ query = (
+ "GET status\n"
+ "Columns: program_start\n"
+ )
+ return livestatus.LocalConnection().query_value(query)