Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
This commit is contained in:
Marc 'risson' Schmitt
2025-06-04 17:03:19 +02:00
parent 66f8377c79
commit 3037701a14
3 changed files with 13 additions and 2 deletions

View File

@ -31,9 +31,11 @@ class AuthentikEnterpriseConfig(EnterpriseConfig):
@property
def tenant_schedule_specs(self) -> list[ScheduleSpec]:
from authentik.enterprise.tasks import enterprise_update_usage
return [
ScheduleSpec(
actor_name="authentik.enterprise.tasks.enterprise_update_usage",
actor_name=enterprise_update_usage.actor_name,
crontab=f"{fqdn_rand('enterprise_update_usage')} */2 * * *",
),
]

View File

@ -10,6 +10,7 @@ from django.utils.timezone import get_current_timezone
from authentik.enterprise.license import CACHE_KEY_ENTERPRISE_LICENSE
from authentik.enterprise.models import License
from authentik.enterprise.tasks import enterprise_update_usage
from authentik.tasks.schedules.models import Schedule
@receiver(pre_save, sender=License)
@ -26,7 +27,7 @@ def pre_save_license(sender: type[License], instance: License, **_):
def post_save_license(sender: type[License], instance: License, **_):
"""Trigger license usage calculation when license is saved"""
cache.delete(CACHE_KEY_ENTERPRISE_LICENSE)
enterprise_update_usage.send()
Schedule.dispatch_by_actor(enterprise_update_usage)
@receiver(post_delete, sender=License)

View File

@ -59,6 +59,14 @@ class Schedule(SerializerModel):
def __str__(self):
return self.uid
@classmethod
def dispatch_by_actor(cls, actor: Actor):
"""Dispatch a schedule by looking up its actor.
Only available for schedules without custom arguments."""
schedule = cls.objects.filter(actor_name=actor.actor_name, paused=False).first()
if schedule:
schedule.send()
@property
def serializer(self):
from authentik.tasks.schedules.api import ScheduleSerializer