# 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