69 lines
3.1 KiB
HTML
69 lines
3.1 KiB
HTML
{% extends "admin/layout.html" %}
|
|
{% block admin_title %}{{ job.name_str() }}{% endblock admin_title %}
|
|
|
|
{% block content %}
|
|
<h1>{{ job.name_str() }}</h1>
|
|
|
|
<table>
|
|
<tr><th>{{ t.jobs_description }}</th><td>{{ job.description_str() }}</td></tr>
|
|
<tr><th>{{ t.jobs_cron }}</th><td><code>{{ job.cron_expression_str() }}</code></td></tr>
|
|
<tr><th>{{ t.jobs_enabled }}</th><td>{% if job.enabled() %}✅{% else %}❌{% endif %}</td></tr>
|
|
<tr><th>{{ t.jobs_last_run }}</th><td>{{ job.last_run_at_str() }}</td></tr>
|
|
<tr><th>{{ t.jobs_next_run }}</th><td>{{ job.next_run_at_str() }}</td></tr>
|
|
</table>
|
|
|
|
<div style="margin: 1rem 0; display: flex; gap: .5rem; align-items: flex-end;">
|
|
<form method="post" action="/admin/jobs/{{ job.name_str() }}/run" style="margin:0;">
|
|
<button type="submit" style="padding:.4rem 1rem; background:#007bff; color:#fff; border:none; border-radius:4px; cursor:pointer;">{{ t.jobs_run_now }}</button>
|
|
</form>
|
|
<form method="post" action="/admin/jobs/{{ job.name_str() }}/toggle" style="margin:0;">
|
|
{% if job.enabled() %}
|
|
<button type="submit" style="padding:.4rem 1rem; background:#dc3545; color:#fff; border:none; border-radius:4px; cursor:pointer;">{{ t.jobs_disable }}</button>
|
|
{% else %}
|
|
<button type="submit" style="padding:.4rem 1rem; background:#28a745; color:#fff; border:none; border-radius:4px; cursor:pointer;">{{ t.jobs_enable }}</button>
|
|
{% endif %}
|
|
</form>
|
|
</div>
|
|
|
|
<h2>{{ t.jobs_cron }}</h2>
|
|
<p style="font-size:.85rem;color:#666;margin-bottom:.5rem;">{{ t.jobs_cron_help }}</p>
|
|
<form method="post" action="/admin/jobs/{{ job.name_str() }}/cron" style="display:flex;gap:.5rem;align-items:center;margin-bottom:1.5rem;">
|
|
<input name="cron_expression" value="{{ job.cron_expression_str() }}" style="width:20em;font-family:monospace;">
|
|
<button type="submit" style="padding:.4rem 1rem; background:#6c757d; color:#fff; border:none; border-radius:4px; cursor:pointer;">{{ t.jobs_cron_update }}</button>
|
|
</form>
|
|
|
|
<h2>{{ t.jobs_run_history }}</h2>
|
|
{% if runs.is_empty() %}
|
|
<p>No runs yet.</p>
|
|
{% else %}
|
|
<table>
|
|
<tr>
|
|
<th>ID</th>
|
|
<th>{{ t.jobs_run_status }}</th>
|
|
<th>{{ t.jobs_run_started }}</th>
|
|
<th>{{ t.jobs_run_duration }}</th>
|
|
<th>{{ t.jobs_run_trigger }}</th>
|
|
<th>{{ t.jobs_actions }}</th>
|
|
</tr>
|
|
{% for run in runs %}
|
|
<tr>
|
|
<td>{{ run.id_val() }}</td>
|
|
<td><span class="badge {{ run.status_badge_class() }}">{{ run.status_str() }}</span></td>
|
|
<td>{{ run.started_at_str() }}</td>
|
|
<td>{{ run.duration_display() }}</td>
|
|
<td>{{ run.trigger_str() }}</td>
|
|
<td><a href="/admin/jobs/{{ job.name_str() }}/runs/{{ run.id_val() }}">{{ t.reviews_view }}</a></td>
|
|
</tr>
|
|
{% endfor %}
|
|
</table>
|
|
{% endif %}
|
|
|
|
<p style="margin-top:1rem;"><a href="/admin/jobs">← {{ t.jobs_back_to_list }}</a></p>
|
|
|
|
<style>
|
|
.badge-completed { background: #d4edda; color: #155724; }
|
|
.badge-failed { background: #f8d7da; color: #721c24; }
|
|
.badge-processing { background: #d1ecf1; color: #0c5460; }
|
|
</style>
|
|
{% endblock content %}
|