|
|
@@ -69,7 +69,6 @@ BANNER_TOP = getattr(configuration, 'BANNER_TOP', '')
|
|
|
BASE_PATH = getattr(configuration, 'BASE_PATH', '')
|
|
|
if BASE_PATH:
|
|
|
BASE_PATH = BASE_PATH.strip('/') + '/' # Enforce trailing slash only
|
|
|
-CACHE_TIMEOUT = getattr(configuration, 'CACHE_TIMEOUT', 900)
|
|
|
CHANGELOG_RETENTION = getattr(configuration, 'CHANGELOG_RETENTION', 90)
|
|
|
CORS_ORIGIN_ALLOW_ALL = getattr(configuration, 'CORS_ORIGIN_ALLOW_ALL', False)
|
|
|
CORS_ORIGIN_REGEX_WHITELIST = getattr(configuration, 'CORS_ORIGIN_REGEX_WHITELIST', [])
|
|
|
@@ -225,19 +224,30 @@ if 'caching' not in REDIS:
|
|
|
raise ImproperlyConfigured(
|
|
|
"REDIS section in configuration.py is missing caching subsection."
|
|
|
)
|
|
|
-CACHING_REDIS = REDIS['caching']
|
|
|
-CACHING_REDIS_HOST = CACHING_REDIS.get('HOST', 'localhost')
|
|
|
-CACHING_REDIS_PORT = CACHING_REDIS.get('PORT', 6379)
|
|
|
-CACHING_REDIS_SENTINELS = CACHING_REDIS.get('SENTINELS', [])
|
|
|
-CACHING_REDIS_USING_SENTINEL = all([
|
|
|
- isinstance(CACHING_REDIS_SENTINELS, (list, tuple)),
|
|
|
- len(CACHING_REDIS_SENTINELS) > 0
|
|
|
-])
|
|
|
-CACHING_REDIS_SENTINEL_SERVICE = CACHING_REDIS.get('SENTINEL_SERVICE', 'default')
|
|
|
-CACHING_REDIS_PASSWORD = CACHING_REDIS.get('PASSWORD', '')
|
|
|
-CACHING_REDIS_DATABASE = CACHING_REDIS.get('DATABASE', 0)
|
|
|
-CACHING_REDIS_SSL = CACHING_REDIS.get('SSL', False)
|
|
|
-CACHING_REDIS_SKIP_TLS_VERIFY = CACHING_REDIS.get('INSECURE_SKIP_TLS_VERIFY', False)
|
|
|
+CACHING_REDIS_HOST = REDIS['caching'].get('HOST', 'localhost')
|
|
|
+CACHING_REDIS_PORT = REDIS['caching'].get('PORT', 6379)
|
|
|
+CACHING_REDIS_DATABASE = REDIS['caching'].get('DATABASE', 0)
|
|
|
+CACHING_REDIS_PASSWORD = REDIS['caching'].get('PASSWORD', '')
|
|
|
+CACHING_REDIS_SENTINELS = REDIS['caching'].get('SENTINELS', [])
|
|
|
+CACHING_REDIS_SENTINEL_SERVICE = REDIS['caching'].get('SENTINEL_SERVICE', 'default')
|
|
|
+CACHING_REDIS_PROTO = 'rediss' if REDIS['caching'].get('SSL', False) else 'redis'
|
|
|
+# Unused?
|
|
|
+# CACHING_REDIS_SKIP_TLS_VERIFY = REDIS['caching'].get('INSECURE_SKIP_TLS_VERIFY', False)
|
|
|
+
|
|
|
+CACHES = {
|
|
|
+ 'default': {
|
|
|
+ 'BACKEND': 'django_redis.cache.RedisCache',
|
|
|
+ 'LOCATION': f'{CACHING_REDIS_PROTO}://{CACHING_REDIS_HOST}:{CACHING_REDIS_PORT}/{CACHING_REDIS_DATABASE}',
|
|
|
+ 'OPTIONS': {
|
|
|
+ 'CLIENT_CLASS': 'django_redis.client.DefaultClient',
|
|
|
+ 'PASSWORD': CACHING_REDIS_PASSWORD,
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+if CACHING_REDIS_SENTINELS:
|
|
|
+ CACHES['default']['LOCATION'] = f'{CACHING_REDIS_PROTO}://{CACHING_REDIS_SENTINEL_SERVICE}/{CACHING_REDIS_DATABASE}'
|
|
|
+ CACHES['default']['OPTIONS']['CLIENT_CLASS'] = 'django_redis.client.SentinelClient'
|
|
|
+ CACHES['default']['OPTIONS']['SENTINELS'] = CACHING_REDIS_SENTINELS
|
|
|
|
|
|
|
|
|
#
|
|
|
@@ -280,7 +290,6 @@ INSTALLED_APPS = [
|
|
|
'django.contrib.messages',
|
|
|
'django.contrib.staticfiles',
|
|
|
'django.contrib.humanize',
|
|
|
- 'cacheops',
|
|
|
'corsheaders',
|
|
|
'debug_toolbar',
|
|
|
'graphiql_debug_toolbar',
|
|
|
@@ -396,53 +405,6 @@ EXEMPT_EXCLUDE_MODELS = (
|
|
|
('users', 'objectpermission'),
|
|
|
)
|
|
|
|
|
|
-#
|
|
|
-# Caching
|
|
|
-#
|
|
|
-if CACHING_REDIS_USING_SENTINEL:
|
|
|
- CACHEOPS_SENTINEL = {
|
|
|
- 'locations': CACHING_REDIS_SENTINELS,
|
|
|
- 'service_name': CACHING_REDIS_SENTINEL_SERVICE,
|
|
|
- 'db': CACHING_REDIS_DATABASE,
|
|
|
- 'password': CACHING_REDIS_PASSWORD,
|
|
|
- }
|
|
|
-else:
|
|
|
- CACHEOPS_REDIS = {
|
|
|
- 'host': CACHING_REDIS_HOST,
|
|
|
- 'port': CACHING_REDIS_PORT,
|
|
|
- 'db': CACHING_REDIS_DATABASE,
|
|
|
- 'password': CACHING_REDIS_PASSWORD,
|
|
|
- 'ssl': CACHING_REDIS_SSL,
|
|
|
- 'ssl_cert_reqs': None if CACHING_REDIS_SKIP_TLS_VERIFY else 'required',
|
|
|
- }
|
|
|
-
|
|
|
-if not CACHE_TIMEOUT:
|
|
|
- CACHEOPS_ENABLED = False
|
|
|
-else:
|
|
|
- CACHEOPS_ENABLED = True
|
|
|
-
|
|
|
-
|
|
|
-CACHEOPS_DEFAULTS = {
|
|
|
- 'timeout': CACHE_TIMEOUT
|
|
|
-}
|
|
|
-CACHEOPS = {
|
|
|
- 'auth.user': {'ops': 'get', 'timeout': 60 * 15},
|
|
|
- 'auth.*': {'ops': ('fetch', 'get')},
|
|
|
- 'auth.permission': {'ops': 'all'},
|
|
|
- 'circuits.*': {'ops': 'all'},
|
|
|
- 'dcim.inventoryitem': None, # MPTT models are exempt due to raw SQL
|
|
|
- 'dcim.region': None, # MPTT models are exempt due to raw SQL
|
|
|
- 'dcim.location': None, # MPTT models are exempt due to raw SQL
|
|
|
- 'dcim.*': {'ops': 'all'},
|
|
|
- 'ipam.*': {'ops': 'all'},
|
|
|
- 'extras.*': {'ops': 'all'},
|
|
|
- 'users.*': {'ops': 'all'},
|
|
|
- 'tenancy.tenantgroup': None, # MPTT models are exempt due to raw SQL
|
|
|
- 'tenancy.*': {'ops': 'all'},
|
|
|
- 'virtualization.*': {'ops': 'all'},
|
|
|
-}
|
|
|
-CACHEOPS_DEGRADE_ON_FAILURE = True
|
|
|
-
|
|
|
|
|
|
#
|
|
|
# Django Prometheus
|