Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
This commit is contained in:
Marc 'risson' Schmitt
2025-06-10 16:55:56 +02:00
parent 7c49de9cba
commit 7f8f7376e0
6 changed files with 177 additions and 7 deletions

View File

@ -0,0 +1,32 @@
# Generated by Django 5.1.10 on 2025-06-10 14:17
import pgtrigger.compiler
import pgtrigger.migrations
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("authentik_tasks", "0001_initial"),
]
operations = [
pgtrigger.migrations.AddTrigger(
model_name="task",
trigger=pgtrigger.compiler.Trigger(
name="update_aggregated_status",
sql=pgtrigger.compiler.UpsertTriggerSql(
constraint="CONSTRAINT",
declare="DECLARE aggregated_status TEXT; max_log_level TEXT;",
func="\n NEW.aggregated_status := CASE\n WHEN NEW.status != 'done' THEN NEW.status\n ELSE COALESCE((\n SELECT CASE\n WHEN bool_or(msg->'log_level' = 'error') THEN 'error'\n WHEN bool_or(msg->'log_level' = 'warning') THEN 'warning'\n WHEN bool_or(msg->'log_level' = 'info') THEN 'info'\n ELSE 'done'\n END\n FROM jsonb_array_elements(NEW._messages) AS msg\n ), 'done')\n END;\n\n RETURN NEW;\n ",
hash="9f97b7e85dd6428402da79d4f748740f0a3ac88c",
operation="INSERT OR UPDATE",
pgid="pgtrigger_update_aggregated_status_f18c4",
table="authentik_tasks_task",
timing="DEFERRABLE INITIALLY IMMEDIATE",
when="AFTER",
),
),
),
]

View File

@ -0,0 +1,36 @@
# Generated by Django 5.1.10 on 2025-06-10 14:17
import pgtrigger.compiler
import pgtrigger.migrations
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("authentik_tasks", "0002_task_update_aggregated_status"),
]
operations = [
pgtrigger.migrations.RemoveTrigger(
model_name="task",
name="update_aggregated_status",
),
pgtrigger.migrations.AddTrigger(
model_name="task",
trigger=pgtrigger.compiler.Trigger(
name="update_aggregated_status",
sql=pgtrigger.compiler.UpsertTriggerSql(
constraint="CONSTRAINT",
declare="DECLARE aggregated_status TEXT; max_log_level TEXT;",
func="\n NEW.aggregated_status := CASE\n WHEN NEW.state != 'done' THEN NEW.state\n ELSE COALESCE((\n SELECT CASE\n WHEN bool_or(msg->'log_level' = 'error') THEN 'error'\n WHEN bool_or(msg->'log_level' = 'warning') THEN 'warning'\n WHEN bool_or(msg->'log_level' = 'info') THEN 'info'\n ELSE 'done'\n END\n FROM jsonb_array_elements(NEW._messages) AS msg\n ), 'done')\n END;\n\n RETURN NEW;\n ",
hash="7187c511fa7d22f8c34f2068c37b9bf2e51b9e40",
operation="INSERT OR UPDATE",
pgid="pgtrigger_update_aggregated_status_f18c4",
table="authentik_tasks_task",
timing="DEFERRABLE INITIALLY IMMEDIATE",
when="AFTER",
),
),
),
]

View File

@ -0,0 +1,36 @@
# Generated by Django 5.1.10 on 2025-06-10 14:19
import pgtrigger.compiler
import pgtrigger.migrations
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("authentik_tasks", "0003_remove_task_update_aggregated_status_and_more"),
]
operations = [
pgtrigger.migrations.RemoveTrigger(
model_name="task",
name="update_aggregated_status",
),
pgtrigger.migrations.AddTrigger(
model_name="task",
trigger=pgtrigger.compiler.Trigger(
name="update_aggregated_status",
sql=pgtrigger.compiler.UpsertTriggerSql(
constraint="CONSTRAINT",
declare="DECLARE aggregated_status TEXT; max_log_level TEXT;",
func="\n NEW.aggregated_status := CASE\n WHEN NEW.state != 'done' THEN NEW.state\n ELSE COALESCE((\n SELECT CASE\n WHEN bool_or(msg->>'log_level' = 'error') THEN 'error'\n WHEN bool_or(msg->>'log_level' = 'warning') THEN 'warning'\n WHEN bool_or(msg->>'log_level' = 'info') THEN 'info'\n ELSE 'done'\n END\n FROM jsonb_array_elements(NEW._messages) AS msg\n ), 'done')\n END;\n\n RETURN NEW;\n ",
hash="6f01e43ff57b11081bff98b7e7b296ccaaa7cf7f",
operation="INSERT OR UPDATE",
pgid="pgtrigger_update_aggregated_status_f18c4",
table="authentik_tasks_task",
timing="DEFERRABLE INITIALLY IMMEDIATE",
when="AFTER",
),
),
),
]

View File

@ -0,0 +1,35 @@
# Generated by Django 5.1.10 on 2025-06-10 14:26
import pgtrigger.compiler
import pgtrigger.migrations
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("authentik_tasks", "0004_remove_task_update_aggregated_status_and_more"),
]
operations = [
pgtrigger.migrations.RemoveTrigger(
model_name="task",
name="update_aggregated_status",
),
pgtrigger.migrations.AddTrigger(
model_name="task",
trigger=pgtrigger.compiler.Trigger(
name="update_aggregated_status",
sql=pgtrigger.compiler.UpsertTriggerSql(
constraint="CONSTRAINT",
func="\n NEW.aggregated_status := CASE\n WHEN NEW.state != 'done' THEN NEW.state\n ELSE COALESCE((\n SELECT CASE\n WHEN bool_or(msg->>'log_level' = 'error') THEN 'error'\n WHEN bool_or(msg->>'log_level' = 'warning') THEN 'warning'\n WHEN bool_or(msg->>'log_level' = 'info') THEN 'info'\n ELSE 'done'\n END\n FROM jsonb_array_elements(NEW._messages) AS msg\n ), 'done')\n END;\n\n RETURN NEW;\n ",
hash="328d7b7a131530f4ecc68f1cadb0146cf948fd03",
operation="INSERT OR UPDATE",
pgid="pgtrigger_update_aggregated_status_f18c4",
table="authentik_tasks_task",
timing="DEFERRABLE INITIALLY IMMEDIATE",
when="AFTER",
),
),
),
]

View File

@ -0,0 +1,33 @@
# Generated by Django 5.1.10 on 2025-06-10 14:33
import pgtrigger.compiler
import pgtrigger.migrations
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("authentik_tasks", "0005_remove_task_update_aggregated_status_and_more"),
]
operations = [
pgtrigger.migrations.RemoveTrigger(
model_name="task",
name="update_aggregated_status",
),
pgtrigger.migrations.AddTrigger(
model_name="task",
trigger=pgtrigger.compiler.Trigger(
name="update_aggregated_status",
sql=pgtrigger.compiler.UpsertTriggerSql(
func="\n NEW.aggregated_status := CASE\n WHEN NEW.state != 'done' THEN NEW.state\n ELSE COALESCE((\n SELECT CASE\n WHEN bool_or(msg->>'log_level' = 'error') THEN 'error'\n WHEN bool_or(msg->>'log_level' = 'warning') THEN 'warning'\n WHEN bool_or(msg->>'log_level' = 'info') THEN 'info'\n ELSE 'done'\n END\n FROM jsonb_array_elements(NEW._messages) AS msg\n ), 'done')\n END;\n\n RETURN NEW;\n ",
hash="ebc09bc08c1624966c0c58a52f243fe25a842058",
operation="INSERT OR UPDATE",
pgid="pgtrigger_update_aggregated_status_f18c4",
table="authentik_tasks_task",
when="BEFORE",
),
),
),
]

View File

@ -89,17 +89,15 @@ class Task(SerializerModel):
pgtrigger.Trigger(
name="update_aggregated_status",
operation=pgtrigger.Insert | pgtrigger.Update,
when=pgtrigger.After,
timing=pgtrigger.Immediate,
declare=[("aggregated_status", "TEXT"), ("max_log_level", "TEXT")],
when=pgtrigger.Before,
func=f"""
NEW.aggregated_status := CASE
WHEN NEW.status != '{TaskState.DONE.value}' THEN NEW.status
WHEN NEW.state != '{TaskState.DONE.value}' THEN NEW.state
ELSE COALESCE((
SELECT CASE
WHEN bool_or(msg->'log_level' = 'error') THEN 'error'
WHEN bool_or(msg->'log_level' = 'warning') THEN 'warning'
WHEN bool_or(msg->'log_level' = 'info') THEN 'info'
WHEN bool_or(msg->>'log_level' = 'error') THEN 'error'
WHEN bool_or(msg->>'log_level' = 'warning') THEN 'warning'
WHEN bool_or(msg->>'log_level' = 'info') THEN 'info'
ELSE '{TaskState.DONE.value}'
END
FROM jsonb_array_elements(NEW._messages) AS msg