Source code for smarter.apps.proxy.receivers

"""Receiver functions for proxy signals."""

# pylint: disable=W0613

from django.db.models.signals import post_delete, post_save
from django.dispatch import receiver

from smarter.lib import logging
from smarter.lib.django.waffle import SmarterWaffleSwitches

from .caching import invalidate_all_cached_proxies_for_user_profile
from .models import Proxy
from .signals import broker_ready, proxy_request_completed, proxy_request_failed

logger = logging.getSmarterLogger(
    __name__, any_switches=[SmarterWaffleSwitches.RECEIVER_LOGGING, SmarterWaffleSwitches.PROXY_LOGGING]
)
logger_prefix = logging.formatted_text(__name__)


[docs] @receiver(broker_ready) def log_broker_ready(sender, broker, **kwargs): """Log when the broker is ready.""" logger.debug("%s %s is ready", logger_prefix, broker)
[docs] @receiver(proxy_request_completed) def log_proxy_request_completed(sender, proxy, user_profile, method, path, status, usage, elapsed, **kwargs): """Log each request that a Proxy forwarded.""" logger.debug( "%s Proxy %s forwarded %s %s for %s: %s in %.2fs, usage %s", logger_prefix, proxy.name, method, path, user_profile, status, elapsed, usage, )
[docs] @receiver(proxy_request_failed) def log_proxy_request_failed(sender, proxy, user_profile, method, path, error, elapsed, **kwargs): """Log each request that a Proxy refused, or could not forward.""" logger.debug("%s Proxy %s failed %s %s for %s: %s", logger_prefix, proxy.name, method, path, user_profile, error)
[docs] @receiver(post_save, sender=Proxy) @receiver(post_delete, sender=Proxy) def invalidate_proxy_caches(sender, instance: Proxy, **kwargs): """Invalidate the owner's cached Proxy lists, which the web console's list view uses.""" try: invalidate_all_cached_proxies_for_user_profile(user_profile=instance.user_profile) # pylint: disable=broad-except except Exception as e: logger.warning("%s failed to invalidate the cached proxies of %s: %s", logger_prefix, instance, e)