{% extends "admin/_layout.html" %} {% from "_macros.html" import icon %} {% set section = "schedules" %} {% block title %}{{ t("Scheduling") }} - {{ brand.name }}{% endblock %} {% block heading %}{{ t("Scheduling") }}{% endblock %} {% block admin_content %}

{{ tm("A schedule runs a piece of work because time has passed rather than because somebody asked just now — a daily summary, a check every Monday, a reminder in an hour. Each one has its own chat and replies into it, or files a report. People make their own under %(scheduled)s; what you decide here is whether the feature exists and what it may spend.", scheduled=t("Scheduled")) }}

{{ icon("shield", "icon--sm") }} {{ tm("This is the one thing here that spends model time with nobody watching. A schedule pointed at a chat that can run commands would run them unattended, so a scheduled task is never an agent chat — but everything else a model can reach, it can reach on a timer. Give %(permission)s under %(groups)s to the people who should have it; it is off for everybody by default.", permission=t("Schedule work"), groups=t("Groups & permissions")) }}
{% if saved %}
{{ icon("check", "icon--sm") }} {{ t("Saved.") }}
{% endif %}

{{ t("Switch") }}

{{ t("Off by default. Turning this off stops everything firing and deletes nothing — schedules keep their place and resume when it is turned back on.") }} {% if total == 1 %} {{ t("There is 1 schedule on this instance, %(active)s of them not paused.", active=active) }} {% elif total %} {{ t("There are %(total)s schedules on this instance, %(active)s of them not paused.", total=total, active=active) }} {% endif %}

{{ t("How often it looks") }}

{{ t("Seconds. This is how late a run can be, not how often anything happens: the finest a schedule can be set to is one minute, so anything under that buys nothing. One indexed query per tick.") }}

{{ t("Seconds. A floor on how often one schedule may come round. Raise it if people are setting things to run more often than the work takes.") }}

{{ t("What it may spend") }}

{{ t("Refused at the point of creation, with the reason. Existing schedules over a lowered limit keep running; only new ones are refused.") }}

{{ t("Fifty schedules due at nine o'clock must not open fifty replies against one endpoint. The rest wait their turn rather than being dropped.") }}

{{ t("A schedule that comes round faster than its chat can answer would build a backlog for ever. Past this, a run is skipped and says so on the schedule rather than joining the queue.") }}

{% endblock %}