From b974568e31acf4c57abaa4fcfc49f7e174b50702 Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Mon, 21 Oct 2019 23:55:27 +0200
Subject: [PATCH] Added django-cacheops to cache expensive count queries

---
 api/config/settings/common.py | 16 ++++++++++++++--
 api/requirements/base.txt     |  1 +
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/api/config/settings/common.py b/api/config/settings/common.py
index 43a7a29f5..3237718e0 100644
--- a/api/config/settings/common.py
+++ b/api/config/settings/common.py
@@ -515,7 +515,6 @@ CACHES = {
         "LOCATION": "local-cache",
     },
 }
-
 CACHES["default"]["BACKEND"] = "django_redis.cache.RedisCache"
 
 CHANNEL_LAYERS = {
@@ -530,7 +529,20 @@ CACHES["default"]["OPTIONS"] = {
     "IGNORE_EXCEPTIONS": True,  # mimics memcache behavior.
     # http://niwinz.github.io/django-redis/latest/#_memcached_exceptions_behavior
 }
-
+CACHEOPS_DURATION = env("CACHEOPS_DURATION", default=0)
+CACHEOPS_ENABLED = bool(CACHEOPS_DURATION)
+
+if CACHEOPS_ENABLED:
+    INSTALLED_APPS += ("cacheops",)
+    CACHEOPS_REDIS = env("CACHE_URL", default=CACHE_DEFAULT)
+    CACHEOPS_PREFIX = lambda _: "cacheops"  # noqa
+    CACHEOPS_DEFAULTS = {"timeout": CACHEOPS_DURATION}
+    CACHEOPS = {
+        "users.user": {"ops": "get"},
+        "music.album": {"ops": "count"},
+        "music.artist": {"ops": "count"},
+        "music.track": {"ops": "count"},
+    }
 
 # CELERY
 INSTALLED_APPS += ("funkwhale_api.taskapp.celery.CeleryConfig",)
diff --git a/api/requirements/base.txt b/api/requirements/base.txt
index 63b1063f6..4f87e1ba8 100644
--- a/api/requirements/base.txt
+++ b/api/requirements/base.txt
@@ -72,3 +72,4 @@ django-oauth-toolkit==1.2
 django-storages==1.7.1
 boto3<3
 unicode-slugify
+django-cacheops==4.2
-- 
GitLab