Files
eveAI/common/utils/cache/regions.py
Josako a9bbd1f466 - Ensure prefix is passed for all services
- 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
2025-09-09 08:45:45 +02:00

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