import { useState, useEffect, useCallback } from 'react'; import { api } from '../../api.js'; import { fmt, StatusBadge } from './adminHelpers.jsx'; const KNOWN_JOBS = [ { name: 'auto_statut_retard', label: 'Passage automatique en retard' }, ]; export default function JobLogsSection() { const [logs, setLogs] = useState([]); const [total, setTotal] = useState(0); const [loading, setLoading] = useState(true); const [running, setRunning] = useState(null); const [runResult, setRunResult] = useState(null); const [err, setErr] = useState(null); const [page, setPage] = useState(0); const PER_PAGE = 20; const load = useCallback(async () => { try { setLoading(true); const data = await api.get('/admin/job-logs', { limit: PER_PAGE, offset: page * PER_PAGE }); setLogs(data.rows); setTotal(data.total); } catch (e) { setErr(e.message); } finally { setLoading(false); } }, [page]); useEffect(() => { load(); }, [load]); const runJob = async (jobName) => { setRunning(jobName); setRunResult(null); try { const r = await api.post(`/admin/jobs/${jobName}/run`, {}); setRunResult({ ok: true, msg: `Exécution terminée — ${r.nb_changes} modification(s)` }); load(); } catch (e) { setRunResult({ ok: false, msg: e.message }); } finally { setRunning(null); } }; const pages = Math.ceil(total / PER_PAGE); return (
Historique d'exécution des tâches planifiées et lancement manuel.
Chargement…
} {err &&{err}
} {!loading && !err && !logs.length &&Aucun log disponible.
} {logs.length > 0 && ( <>{total} entrée{total > 1 ? 's' : ''} au total
| Date | Job | Statut | Modifs | Détails | Erreur |
|---|---|---|---|---|---|
| {fmt(l.run_at)} | {l.job_name} | {l.nb_changes > 0 ? {l.nb_changes} : 0 } | {l.details || —} | {l.error_msg || —} |