Includes atomic migrations, per-rule reminder semantics, first-run helper script and the note on the undecided UI chat idea. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
48 lines
4.0 KiB
HTML
48 lines
4.0 KiB
HTML
<form method="post" action="{{ action }}">
|
||
{{ csrf_input }}
|
||
<label for="r-name">Name *</label>
|
||
<input id="r-name" name="name" type="text" value="{{ form.name }}" autocomplete="off" required>
|
||
<label for="r-host">Host-Muster (leer = alle, z. B. web*)</label>
|
||
<input id="r-host" name="match_host" type="text" value="{{ form.match_host }}" autocomplete="off" autocapitalize="none">
|
||
<label for="r-service">Service-Muster (leer = alle, z. B. Disk*)</label>
|
||
<input id="r-service" name="match_service" type="text" value="{{ form.match_service }}" autocomplete="off" autocapitalize="none">
|
||
<label for="r-state">Mindest-Schweregrad (nur für Probleme)</label>
|
||
<select id="r-state" name="min_state">
|
||
{% for value, name in state_options %}<option value="{{ value }}" {% if value == form.min_state %}selected{% endif %}>{{ value }} – {{ name }}</option>{% endfor %}
|
||
</select>
|
||
<label for="r-contains">Ausgabe enthält (optional, Teilstring ohne Groß-/Kleinschreibung, keine Regex)</label>
|
||
<input id="r-contains" name="output_contains" type="text" maxlength="200" value="{{ form.output_contains }}" autocomplete="off" autocapitalize="none">
|
||
<fieldset>
|
||
<legend>Alarmarten</legend>
|
||
{% for kind, label in kind_options.items() %}
|
||
<label class="check"><input type="checkbox" name="kinds" value="{{ kind }}" {% if kind in form.kinds %}checked{% endif %}> {{ label }}</label>
|
||
{% endfor %}
|
||
</fieldset>
|
||
<fieldset>
|
||
<legend>Ziele</legend>
|
||
{% for choice in choices %}
|
||
<label class="check"><input type="checkbox" name="targets" value="{{ choice.value }}" {% if choice.value in selected %}checked{% endif %}> {{ choice.label }}</label>
|
||
{% else %}
|
||
<p class="muted">Kein Chat-Backend mit Standardziel aktiviert.</p>
|
||
{% endfor %}
|
||
<label class="check"><input type="checkbox" name="use_default_targets" value="1" {% if form.use_default_targets %}checked{% endif %}> Standardziele aller aktivierten Backends zusätzlich verwenden</label>
|
||
<label for="r-extra">Weitere Ziele (je Zeile <code>backend:ziel</code>, z. B. <code>matrix:!raum:server</code>)</label>
|
||
<textarea id="r-extra" name="extra_targets" rows="3" autocomplete="off" autocapitalize="none">{{ extra_text }}</textarea>
|
||
<p class="muted">Ohne Ziele und ohne Standardziele wird bei Treffer nichts gesendet.</p>
|
||
</fieldset>
|
||
<fieldset>
|
||
<legend>Verhalten</legend>
|
||
<label for="r-delay">Verzögerung in Minuten (leer = Standard aus "Alarmierung", 0 = sofort; bei mehreren Treffern gilt die kleinste)</label>
|
||
<input id="r-delay" name="delay_minutes" type="number" min="0" max="1440" step="1" value="{{ form.delay_minutes if form.delay_minutes is not none else '' }}">
|
||
<label for="r-reminder">Erinnerung alle N Stunden bei offenem CRIT (leer = Standard aus "Alarmierung", 0 = aus für diese Regel, max. 168; bei mehreren Treffern schaltet eine 0 die Erinnerung aus, sonst gilt der kleinste Wert)</label>
|
||
<input id="r-reminder" name="reminder_hours" type="number" min="0" max="168" step="1" value="{{ form.reminder_hours if form.reminder_hours is not none else '' }}">
|
||
<label class="check"><input type="checkbox" name="ai_enabled" value="1" {% if form.ai_enabled %}checked{% endif %}> KI-Analyse für diese Alarme</label>
|
||
<label for="r-hint">KI-Hinweis (optional, max. 800 Zeichen; Zusatzkontext für die Analyse, kein Ersatz für den Schutzhinweis)</label>
|
||
<textarea id="r-hint" name="ai_hint" rows="4" maxlength="800" autocomplete="off">{{ form.ai_hint }}</textarea>
|
||
<label class="check"><input type="checkbox" name="loud" value="1" {% if form.loud %}checked{% endif %}> Laut (aus = leise: Telegram ohne Benachrichtigungston, Matrix als Notice)</label>
|
||
</fieldset>
|
||
<label class="check"><input type="checkbox" name="stop_on_match" value="1" {% if form.stop_on_match %}checked{% endif %}> Weitere Regeln nach Treffer nicht mehr auswerten</label>
|
||
<label class="check"><input type="checkbox" name="enabled" value="1" {% if form.enabled %}checked{% endif %}> Regel aktiv</label>
|
||
<div class="actions"><button type="submit">{{ submit_label }}</button></div>
|
||
</form>
|