Add auto-restart for crashed processing loops, remove sync clock badge

- Auto-restart: ProcessorManager detects fatal task crashes via done
  callback and restarts with exponential backoff (2s-30s, max 5 attempts
  in 5 min window). Manual stop disables auto-restart. Restart state
  exposed in target state API and via WebSocket events.
- Remove "Running"/"Paused" badge label from sync clock dashboard cards
  (pause/play button already conveys state).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-10 01:53:04 +03:00
parent 30fa107ef7
commit 954e37c2ca
3 changed files with 171 additions and 11 deletions

View File

@@ -279,11 +279,6 @@ function _updateSyncClocksInPlace(syncClocks) {
if (!card) continue;
const speedEl = card.querySelector('.dashboard-clock-speed');
if (speedEl) speedEl.textContent = `${c.speed}x`;
const badge = card.querySelector('.dashboard-badge-active, .dashboard-badge-stopped');
if (badge) {
badge.className = c.is_running ? 'dashboard-badge-active' : 'dashboard-badge-stopped';
badge.textContent = c.is_running ? t('sync_clock.status.running') : t('sync_clock.status.paused');
}
const btn = card.querySelector('.dashboard-target-actions .dashboard-action-btn');
if (btn) {
btn.className = `dashboard-action-btn ${c.is_running ? 'stop' : 'start'}`;
@@ -294,10 +289,6 @@ function _updateSyncClocksInPlace(syncClocks) {
}
function renderDashboardSyncClock(clock) {
const statusBadge = clock.is_running
? `<span class="dashboard-badge-active">${t('sync_clock.status.running')}</span>`
: `<span class="dashboard-badge-stopped">${t('sync_clock.status.paused')}</span>`;
const toggleAction = clock.is_running
? `dashboardPauseClock('${clock.id}')`
: `dashboardResumeClock('${clock.id}')`;
@@ -313,7 +304,7 @@ function renderDashboardSyncClock(clock) {
<div class="dashboard-target-info">
<span class="dashboard-target-icon">${ICON_CLOCK}</span>
<div>
<div class="dashboard-target-name">${escapeHtml(clock.name)} ${statusBadge}</div>
<div class="dashboard-target-name">${escapeHtml(clock.name)}</div>
${subtitle ? `<div class="dashboard-target-subtitle">${subtitle}</div>` : ''}
</div>
</div>