{% extends "base.html" %}
{% load scoped_tags %}
{% block title %}Scheduling{% endblock %}
{% block page_title %}Scheduling{% endblock %}
{% block page_subtitle %}Recurring schedules and scoped job execution (Layer 16){% endblock %}
{% block layer_indicator %}L16 Scheduling{% endblock %}
{% block content %}
{# Recurring Schedules #}
Recurring Schedules
{{ schedules|length }} schedule{{ schedules|length|pluralize }}
{% if schedules %}
| Name |
Type |
Expression |
Status |
Owner |
Created |
{% for sched in schedules %}
| {{ sched.name|default:"Unnamed" }} |
{% if sched.cron_expression %}
CRON
{% elif sched.interval_seconds %}
INTERVAL
{% else %}
—
{% endif %}
|
{% if sched.cron_expression %}{{ sched.cron_expression }}{% elif sched.interval_seconds %}Every {{ sched.interval_seconds }}s{% else %}—{% endif %} |
{% include "components/_state_badge.html" with state=sched.lifecycle|default:"ACTIVE" %} |
{{ sched.owner_id|truncate_id }} |
{{ sched.created_at|format_dt }} |
{% endfor %}
{% else %}
{% include "components/_empty_state.html" with title="No recurring schedules" message="Cron and interval schedules will appear here once configured." %}
{% endif %}
{# Scheduled Actions #}
Scheduled Actions
{{ actions|length }} action{{ actions|length|pluralize }}
{% if actions %}
| Name |
Action Type |
Next Run |
State |
Owner |
Config |
{% for action in actions %}
| {{ action.name|default:"Unnamed" }} |
{{ action.action_type }}
|
{% if action.next_run_at %}
{{ action.next_run_at|format_dt }}
{% else %}
Not scheduled
{% endif %}
|
{% include "components/_state_badge.html" with state=action.state|default:action.lifecycle|default:"PENDING" %} |
{{ action.owner_id|truncate_id }} |
{% if action.config %}
{{ action.config|pretty_json }}
{% else %}
None
{% endif %}
|
{% endfor %}
{% else %}
{% include "components/_empty_state.html" with title="No scheduled actions" message="Scheduled actions run at specific times. Create actions to automate recurring tasks." %}
{% endif %}
{# Recent Jobs #}
Recent Jobs
{{ recent_jobs|length }} job{{ recent_jobs|length|pluralize }}
{% if recent_jobs %}
| Job |
Action Type |
State |
Owner |
Started |
Completed |
{% for job in recent_jobs %}
| {{ job.name|default:"Unnamed Job" }} |
{{ job.action_type|default:"—" }}
|
{% include "components/_state_badge.html" with state=job.state|default:"PENDING" %} |
{{ job.owner_id|truncate_id }} |
{{ job.started_at|format_dt|default:"—" }} |
{{ job.completed_at|format_dt|default:"—" }} |
{% endfor %}
{% else %}
No jobs have been executed yet.
{% endif %}
{% endblock %}