authentik.policies.signals
authentik policy signals
1"""authentik policy signals""" 2 3from django.core.cache import cache 4from django.db import connection 5from django.db.models.signals import post_save 6from django.dispatch import receiver 7from structlog.stdlib import get_logger 8 9from authentik.core.api.applications import user_app_cache_key 10from authentik.core.models import Group, User 11from authentik.policies.apps import GAUGE_POLICIES_CACHED 12from authentik.policies.models import Policy, PolicyBinding, PolicyBindingModel 13from authentik.policies.types import CACHE_PREFIX 14from authentik.root.monitoring import monitoring_set 15 16LOGGER = get_logger() 17 18 19@receiver(monitoring_set) 20def monitoring_set_policies(sender, **kwargs): 21 """set policy gauges""" 22 GAUGE_POLICIES_CACHED.labels(tenant=connection.schema_name).set( 23 len(cache.keys(f"{CACHE_PREFIX}*") or []) 24 ) 25 26 27@receiver(post_save, sender=Policy) 28@receiver(post_save, sender=PolicyBinding) 29@receiver(post_save, sender=PolicyBindingModel) 30@receiver(post_save, sender=Group) 31@receiver(post_save, sender=User) 32def invalidate_policy_cache(sender, instance, **_): 33 """Invalidate Policy cache when policy is updated""" 34 if sender == Policy: 35 total = 0 36 for binding in PolicyBinding.objects.filter(policy=instance): 37 prefix = f"{CACHE_PREFIX}{binding.policy_binding_uuid.hex}_{binding.policy.pk.hex}*" 38 keys = cache.keys(prefix) 39 total += len(keys) 40 cache.delete_many(keys) 41 LOGGER.debug("Invalidating policy cache", policy=instance, keys=total) 42 # Also delete user application cache 43 keys = cache.keys(user_app_cache_key("*")) or [] 44 cache.delete_many(keys)
LOGGER =
<BoundLoggerLazyProxy(logger=None, wrapper_class=None, processors=None, context_class=None, initial_values={}, logger_factory_args=())>
@receiver(monitoring_set)
def
monitoring_set_policies(sender, **kwargs):
20@receiver(monitoring_set) 21def monitoring_set_policies(sender, **kwargs): 22 """set policy gauges""" 23 GAUGE_POLICIES_CACHED.labels(tenant=connection.schema_name).set( 24 len(cache.keys(f"{CACHE_PREFIX}*") or []) 25 )
set policy gauges
@receiver(post_save, sender=Policy)
@receiver(post_save, sender=PolicyBinding)
@receiver(post_save, sender=PolicyBindingModel)
@receiver(post_save, sender=Group)
@receiver(post_save, sender=User)
def
invalidate_policy_cache(sender, instance, **_):
28@receiver(post_save, sender=Policy) 29@receiver(post_save, sender=PolicyBinding) 30@receiver(post_save, sender=PolicyBindingModel) 31@receiver(post_save, sender=Group) 32@receiver(post_save, sender=User) 33def invalidate_policy_cache(sender, instance, **_): 34 """Invalidate Policy cache when policy is updated""" 35 if sender == Policy: 36 total = 0 37 for binding in PolicyBinding.objects.filter(policy=instance): 38 prefix = f"{CACHE_PREFIX}{binding.policy_binding_uuid.hex}_{binding.policy.pk.hex}*" 39 keys = cache.keys(prefix) 40 total += len(keys) 41 cache.delete_many(keys) 42 LOGGER.debug("Invalidating policy cache", policy=instance, keys=total) 43 # Also delete user application cache 44 keys = cache.keys(user_app_cache_key("*")) or [] 45 cache.delete_many(keys)
Invalidate Policy cache when policy is updated