summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2019-10-28 12:09:28 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2019-10-28 12:09:28 +0100
commit40c22649a813ace2ac1e64c67456028827306d54 (patch)
treeac3390dd1254cb32a763b62313e31ddebe7bf241 /ishtar_common/models.py
parent8eaac41ffb80a878a7492bd633f4d53aa47219e3 (diff)
downloadIshtar-40c22649a813ace2ac1e64c67456028827306d54.tar.bz2
Ishtar-40c22649a813ace2ac1e64c67456028827306d54.zip
Fix statistics for operations - Warehouse: long timeout for stats
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py40
1 files changed, 22 insertions, 18 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index ffa5323dd..7e62417ac 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -3193,15 +3193,15 @@ class StatsCache(models.Model):
def update_stats(statscache, item, funcname):
if not settings.USE_BACKGROUND_TASK:
- raw_value = getattr(item, funcname)()
- if not isinstance(raw_value, dict):
- values = {"_raw_": raw_value}
- else:
- values = raw_value
- statscache.values = values
+ current_values = statscache.values
+ if not current_values:
+ current_values = {}
+ value = getattr(item, funcname)()
+ current_values[funcname] = value
+ statscache.values = current_values
statscache.updated = datetime.datetime.now()
statscache.save()
- return values
+ return current_values
now = datetime.datetime.now()
if statscache.update_requested and (
@@ -3226,16 +3226,17 @@ def _update_stats(app, model, model_pk, funcname):
item = model.objects.get(pk=model_pk)
except model.DoesNotExist:
return
- raw_value = getattr(item, funcname)()
- if not isinstance(raw_value, dict):
- values = {"_raw_": raw_value}
- else:
- values = raw_value
- sc.values = values
+ current_values = sc.values
+ if not current_values:
+ current_values = {}
+ value = getattr(item, funcname)()
+ current_values[funcname] = value
+
+ sc.values = current_values
sc.update_requested = None
sc.updated = datetime.datetime.now()
sc.save()
- sc, __ = StatsCache.objects.get_or_create(
+ StatsCache.objects.get_or_create(
model=model_name, model_pk=model_pk
)
@@ -3253,14 +3254,17 @@ class DashboardFormItem(object):
model=model_name, model_pk=self.pk
)
now = datetime.datetime.now()
- if not update and sc.values and (
+ values = {}
+ from_cache = False
+ if not update and sc.values and funcname in sc.values and (
sc.updated + datetime.timedelta(seconds=timeout)) > now:
values = sc.values
from_cache = True
- else:
+ if funcname not in values:
values = update_stats(sc, self, funcname)
- from_cache = False
- if "_raw_" in values:
+ if funcname in values:
+ values = values[funcname]
+ elif "_raw_" in values:
values = values["_raw_"]
if expected_type is not None and not isinstance(values, expected_type):
if from_cache: