diff --git a/awx/main/routing.py b/awx/main/routing.py index 090634cbb8..2866d46ed0 100644 --- a/awx/main/routing.py +++ b/awx/main/routing.py @@ -1,14 +1,37 @@ +import redis +import logging + from django.conf.urls import url +from django.conf import settings + from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter + from . import consumers + +logger = logging.getLogger('awx.main.routing') + + +class AWXProtocolTypeRouter(ProtocolTypeRouter): + def __init__(self, *args, **kwargs): + try: + r = redis.Redis.from_url(settings.BROKER_URL) + for k in r.scan_iter('asgi:*', 500): + logger.debug(f"cleaning up Redis key {k}") + r.delete(k) + except redis.exceptions.RedisError as e: + logger.warn("encountered an error communicating with redis.") + raise e + super().__init__(*args, **kwargs) + + websocket_urlpatterns = [ url(r'websocket/$', consumers.EventConsumer), url(r'websocket/broadcast/$', consumers.BroadcastConsumer), ] -application = ProtocolTypeRouter({ +application = AWXProtocolTypeRouter({ 'websocket': AuthMiddlewareStack( URLRouter(websocket_urlpatterns) ), diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 25acabda7b..031945dd6d 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -957,6 +957,7 @@ CHANNEL_LAYERS = { "CONFIG": { "hosts": [BROKER_URL], "capacity": 10000, + "group_expiry": 157784760, # 5 years }, }, }