authentik.enterprise.signals
Enterprise signals
1"""Enterprise signals""" 2 3from datetime import UTC, datetime 4 5from django.core.cache import cache 6from django.db.models.signals import post_delete, post_save, pre_save 7from django.dispatch import receiver 8from django.utils.timezone import get_current_timezone, now 9 10from authentik.enterprise.apps import GAUGE_LICENSE_EXPIRY, GAUGE_LICENSE_USAGE 11from authentik.enterprise.license import CACHE_KEY_ENTERPRISE_LICENSE, LicenseKey 12from authentik.enterprise.models import License, LicenseUsageStatus 13from authentik.enterprise.tasks import enterprise_update_usage 14from authentik.root.monitoring import monitoring_set 15from authentik.tasks.schedules.models import Schedule 16 17 18@receiver(monitoring_set) 19def monitoring_set_enterprise(sender, **kwargs): 20 """set enterprise gauges""" 21 summary = LicenseKey.cached_summary() 22 if summary.status == LicenseUsageStatus.UNLICENSED: 23 return 24 percentage_internal = ( 25 0 26 if summary.internal_users <= 0 27 else LicenseKey.get_internal_user_count() / (summary.internal_users / 100) 28 ) 29 percentage_external = ( 30 0 31 if summary.external_users <= 0 32 else LicenseKey.get_external_user_count() / (summary.external_users / 100) 33 ) 34 GAUGE_LICENSE_USAGE.labels(user_type="internal").set(percentage_internal) 35 GAUGE_LICENSE_USAGE.labels(user_type="external").set(percentage_external) 36 GAUGE_LICENSE_EXPIRY.set((summary.latest_valid.replace(tzinfo=UTC) - now()).total_seconds()) 37 38 39@receiver(pre_save, sender=License) 40def pre_save_license(sender: type[License], instance: License, **_): 41 """Extract data from license jwt and save it into model""" 42 status = instance.status 43 instance.name = status.name 44 instance.internal_users = status.internal_users 45 instance.external_users = status.external_users 46 instance.expiry = datetime.fromtimestamp(status.exp, tz=get_current_timezone()) 47 48 49@receiver(post_save, sender=License) 50def post_save_license(sender: type[License], instance: License, **_): 51 """Trigger license usage calculation when license is saved""" 52 cache.delete(CACHE_KEY_ENTERPRISE_LICENSE) 53 Schedule.dispatch_by_actor(enterprise_update_usage) 54 55 56@receiver(post_delete, sender=License) 57def post_delete_license(sender: type[License], instance: License, **_): 58 """Clear license cache when license is deleted""" 59 cache.delete(CACHE_KEY_ENTERPRISE_LICENSE)
@receiver(monitoring_set)
def
monitoring_set_enterprise(sender, **kwargs):
19@receiver(monitoring_set) 20def monitoring_set_enterprise(sender, **kwargs): 21 """set enterprise gauges""" 22 summary = LicenseKey.cached_summary() 23 if summary.status == LicenseUsageStatus.UNLICENSED: 24 return 25 percentage_internal = ( 26 0 27 if summary.internal_users <= 0 28 else LicenseKey.get_internal_user_count() / (summary.internal_users / 100) 29 ) 30 percentage_external = ( 31 0 32 if summary.external_users <= 0 33 else LicenseKey.get_external_user_count() / (summary.external_users / 100) 34 ) 35 GAUGE_LICENSE_USAGE.labels(user_type="internal").set(percentage_internal) 36 GAUGE_LICENSE_USAGE.labels(user_type="external").set(percentage_external) 37 GAUGE_LICENSE_EXPIRY.set((summary.latest_valid.replace(tzinfo=UTC) - now()).total_seconds())
set enterprise gauges
@receiver(pre_save, sender=License)
def
pre_save_license( sender: type[authentik.enterprise.models.License], instance: authentik.enterprise.models.License, **_):
40@receiver(pre_save, sender=License) 41def pre_save_license(sender: type[License], instance: License, **_): 42 """Extract data from license jwt and save it into model""" 43 status = instance.status 44 instance.name = status.name 45 instance.internal_users = status.internal_users 46 instance.external_users = status.external_users 47 instance.expiry = datetime.fromtimestamp(status.exp, tz=get_current_timezone())
Extract data from license jwt and save it into model
@receiver(post_save, sender=License)
def
post_save_license( sender: type[authentik.enterprise.models.License], instance: authentik.enterprise.models.License, **_):
50@receiver(post_save, sender=License) 51def post_save_license(sender: type[License], instance: License, **_): 52 """Trigger license usage calculation when license is saved""" 53 cache.delete(CACHE_KEY_ENTERPRISE_LICENSE) 54 Schedule.dispatch_by_actor(enterprise_update_usage)
Trigger license usage calculation when license is saved
@receiver(post_delete, sender=License)
def
post_delete_license( sender: type[authentik.enterprise.models.License], instance: authentik.enterprise.models.License, **_):
57@receiver(post_delete, sender=License) 58def post_delete_license(sender: type[License], instance: License, **_): 59 """Clear license cache when license is deleted""" 60 cache.delete(CACHE_KEY_ENTERPRISE_LICENSE)
Clear license cache when license is deleted