- Add eveai-tem secret (Scaleway Transactional Email) to allow sending emails - Adapted security URLs - Certification problem in regions solved - Redis insight added to tools in k8s - Introduced new way of connection pooling for Redis - TRA-79 - intrernal server error bij registreren catalog
91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
# common/utils/cache/regions.py
|
|
import time
|
|
|
|
import redis
|
|
from dogpile.cache import make_region
|
|
import ssl
|
|
|
|
def get_redis_config(app):
|
|
"""
|
|
Create Redis configuration dict based on app config.
|
|
Handles both authenticated and non-authenticated setups.
|
|
"""
|
|
app.logger.debug(f"Creating Redis config")
|
|
# Parse the REDIS_BASE_URI to get all components
|
|
# redis_uri = urlparse(app.config['REDIS_BASE_URI'])
|
|
|
|
config = {
|
|
'host': app.config['REDIS_URL'],
|
|
'port': app.config['REDIS_PORT'],
|
|
'max_connections': 20,
|
|
'retry_on_timeout': True,
|
|
'socket_keepalive': True,
|
|
'socket_keepalive_options': {},
|
|
}
|
|
|
|
# Add authentication if provided
|
|
un = app.config.get('REDIS_USER')
|
|
pw = app.config.get('REDIS_PASS')
|
|
if un and pw:
|
|
config.update({
|
|
'username': un,
|
|
'password': pw
|
|
})
|
|
|
|
# SSL support using centralised config
|
|
cert_path = app.config.get('REDIS_CA_CERT_PATH')
|
|
redis_scheme = app.config.get('REDIS_SCHEME')
|
|
if cert_path and redis_scheme == 'rediss':
|
|
config.update({
|
|
'connection_class': redis.SSLConnection,
|
|
'ssl_cert_reqs': ssl.CERT_REQUIRED,
|
|
'ssl_check_hostname': app.config.get('REDIS_SSL_CHECK_HOSTNAME', True),
|
|
'ssl_ca_certs': cert_path,
|
|
})
|
|
|
|
app.logger.debug(f"config for Redis connection: {config}")
|
|
|
|
return config
|
|
|
|
|
|
def create_cache_regions(app):
|
|
"""Initialise all cache regions with app config"""
|
|
redis_config = get_redis_config(app)
|
|
redis_pool = redis.ConnectionPool(**redis_config)
|
|
regions = {}
|
|
startup_time = int(time.time())
|
|
|
|
# Region for model-related caching (ModelVariables etc)
|
|
model_region = make_region(name='eveai_model').configure(
|
|
'dogpile.cache.redis',
|
|
arguments={'connection_pool': redis_pool},
|
|
replace_existing_backend=True
|
|
)
|
|
regions['eveai_model'] = model_region
|
|
|
|
# Region for eveai_chat_workers components (Specialists, Retrievers, ...)
|
|
eveai_chat_workers_region = make_region(name='eveai_chat_workers').configure(
|
|
'dogpile.cache.redis',
|
|
arguments={'connection_pool': redis_pool},
|
|
replace_existing_backend=True
|
|
)
|
|
regions['eveai_chat_workers'] = eveai_chat_workers_region
|
|
|
|
# Region for eveai_workers components (Processors, ...)
|
|
eveai_workers_region = make_region(name='eveai_workers').configure(
|
|
'dogpile.cache.redis',
|
|
arguments={'connection_pool': redis_pool}, # Same config for now
|
|
replace_existing_backend=True
|
|
)
|
|
regions['eveai_workers'] = eveai_workers_region
|
|
|
|
eveai_config_region = make_region(name='eveai_config').configure(
|
|
'dogpile.cache.redis',
|
|
arguments={'connection_pool': redis_pool},
|
|
replace_existing_backend=True
|
|
)
|
|
regions['eveai_config'] = eveai_config_region
|
|
|
|
return regions
|
|
|