Module: check_mk
Branch: master
Commit: 4e3cc33004f3ec5b19c621b64c05e4a7ac790251
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=4e3cc33004f3ec…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Mon Dec 9 14:19:56 2013 +0100
FIX Increased performance of multisite GUI with a large userbase
---
.werks/307 | 8 ++++++++
ChangeLog | 1 +
web/htdocs/htmllib.py | 14 ++++++++++++++
web/htdocs/login.py | 3 ---
web/htdocs/userdb.py | 9 +++++++++
5 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/.werks/307 b/.werks/307
new file mode 100644
index 0000000..3648423
--- /dev/null
+++ b/.werks/307
@@ -0,0 +1,8 @@
+Title: Increased performance of multisite GUI with a large userbase
+Level: 1
+Component: multisite
+Version: 1.2.3i8
+Date: 1386595064
+Class: fix
+
+
diff --git a/ChangeLog b/ChangeLog
index 126a657..47582d4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,7 @@
Multisite:
* 0302 FIX: Fixed highlight of choosen elements in foldertee/views snapin in
Chrome/IE
+ * 0307 FIX: Increased performance of multisite GUI with a large userbase
WATO:
* 0057 FIX: Fix exception in WATO host editor on custom tag without topic...
diff --git a/web/htdocs/htmllib.py b/web/htdocs/htmllib.py
index 16f2c8c..a54368d 100644
--- a/web/htdocs/htmllib.py
+++ b/web/htdocs/htmllib.py
@@ -70,6 +70,7 @@ class html:
self.help_visible = False
self.treestates = {}
self.treestates_for_id = None
+ self.caches = {}
RETURN = 13
SHIFT = 16
@@ -1246,3 +1247,16 @@ class html:
def uploaded_file(self, varname, default = None):
raise MKGeneralException("uploaded_file not implemented")
+
+ #
+ # Per request caching
+ #
+
+ def set_cache(self, name, value):
+ self.caches[name] = value
+
+ def is_cached(self, name):
+ return name in self.caches
+
+ def get_cached(self, name):
+ return self.caches.get(name)
diff --git a/web/htdocs/login.py b/web/htdocs/login.py
index 3d65284..5f691c3 100644
--- a/web/htdocs/login.py
+++ b/web/htdocs/login.py
@@ -88,9 +88,6 @@ def auth_cookie_value(username, serial):
def set_auth_cookie(username, serial):
html.set_cookie(site_cookie_name(), auth_cookie_value(username, serial))
-def get_cookie_value():
- return auth_cookie_value(config.user_id, load_serial(config.user_id))
-
def renew_cookie(cookie_name, username, serial):
# Do not renew if:
# a) The _ajaxid var is set
diff --git a/web/htdocs/userdb.py b/web/htdocs/userdb.py
index d69d733..7808dc9 100644
--- a/web/htdocs/userdb.py
+++ b/web/htdocs/userdb.py
@@ -185,6 +185,9 @@ def load_users(lock = False):
file(filename, "a")
aquire_lock(filename)
+ if html.is_cached('users'):
+ return html.get_cached('users')
+
# 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.
@@ -316,6 +319,9 @@ def load_users(lock = False):
"automation_secret" : secret,
}
+ # populate the users cache
+ html.set_cache('users', result)
+
return result
def load_custom_attr(userid, key, conv_func, default = None):
@@ -457,6 +463,9 @@ def save_users(profiles):
# to be written (like during user syncs, wato, ...)
release_lock(root_dir + "contacts.mk")
+ # populate the users cache
+ html.set_cache('users', users)
+
# Call the users_saved hook
hooks.call("users-saved", users)