varaverk: replace User Scripts dependency with native job tracking
run_job.sh: new wrapper called by scheduler cron for every job. Writes /var/log/varaverk/<id>.json (status/start/end/exit/pid) and /var/log/varaverk/<id>.log (latest run output, overwritten). Maps exit 0→ok, 1→warn, 2+→error so watchdog "took action" runs show warn not error. scheduler: cron now calls bash run_job.sh instead of inline bash -c. Added vv_job_stat_path(). LOG_DIR moved to config.php (shared). monitor: vv_scripts_status() now reads /var/log/varaverk/*.json and */*.json — no User Scripts tmpScripts dependency at all. Stale running detection via /proc/<pid> check. Returns error_count in addition to running/ok/warn counts. pages/monitor.php: added error pill (red ✗), error icon/color in list, duration shown next to age for each script entry.
This commit is contained in:
@@ -341,6 +341,7 @@ function vvRenderScripts() {
|
||||
const running = sc.running_count ?? 0;
|
||||
const ok = sc.ok_count ?? 0;
|
||||
const warn = sc.warn_count ?? 0;
|
||||
const errors = sc.error_count ?? 0;
|
||||
const now = Math.floor(Date.now() / 1000);
|
||||
|
||||
function vvScriptPill(type, count, color, bg, border, icon) {
|
||||
@@ -354,7 +355,8 @@ function vvRenderScripts() {
|
||||
if (running > 0) html += vvScriptPill('running', running, '#4fc3f7', '#0a2233', '#1e4060', '●');
|
||||
if (ok > 0) html += vvScriptPill('ok', ok, '#4caf50', '#0a1f0a', '#1a3a1a', '✓');
|
||||
if (warn > 0) html += vvScriptPill('warn', warn, '#ff9800', '#1f1200', '#3a2200', '!');
|
||||
if (!running && !ok && !warn) html += `<span style="font-size:10px;color:#555;">No recent runs</span>`;
|
||||
if (errors > 0) html += vvScriptPill('error', errors, '#f44336', '#2a0a0a', '#5a1a1a', '✗');
|
||||
if (!running && !ok && !warn && !errors) html += `<span style="font-size:10px;color:#555;">No recent runs</span>`;
|
||||
html += `</div>`;
|
||||
|
||||
const filtered = vvScriptsFilter ? scList.filter(s => s.status === vvScriptsFilter) : scList;
|
||||
@@ -362,13 +364,14 @@ function vvRenderScripts() {
|
||||
filtered.forEach(s => {
|
||||
const diff = now - (s.last_ts ?? now);
|
||||
const ago = diff < 60 ? diff + 's' : diff < 3600 ? Math.floor(diff / 60) + 'm' : diff < 86400 ? Math.floor(diff / 3600) + 'h' : Math.floor(diff / 86400) + 'd';
|
||||
const icon = s.status === 'running' ? '●' : s.status === 'ok' ? '✓' : s.status === 'warn' ? '!' : '?';
|
||||
const color = s.status === 'running' ? '#4fc3f7' : s.status === 'ok' ? '#4caf50' : s.status === 'warn' ? '#ff9800' : '#555';
|
||||
const icon = s.status === 'running' ? '●' : s.status === 'ok' ? '✓' : s.status === 'warn' ? '!' : s.status === 'error' ? '✗' : '?';
|
||||
const color = s.status === 'running' ? '#4fc3f7' : s.status === 'ok' ? '#4caf50' : s.status === 'warn' ? '#ff9800' : s.status === 'error' ? '#f44336' : '#555';
|
||||
const name = s.name.length > 24 ? s.name.slice(0, 23) + '…' : s.name;
|
||||
const dur = s.duration != null ? ` ${s.duration}s` : '';
|
||||
listHtml += `<div style="display:flex;align-items:center;gap:5px;margin-bottom:4px;font-size:11px;">
|
||||
<span style="color:${color};flex-shrink:0;width:10px;text-align:center;">${icon}</span>
|
||||
<span style="color:#888;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;">${name}</span>
|
||||
<span style="color:#444;font-size:10px;flex-shrink:0;">${ago}</span>
|
||||
<span style="color:#444;font-size:10px;flex-shrink:0;">${ago}${dur}</span>
|
||||
</div>`;
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user