25 lines
1.0 KiB
JavaScript
25 lines
1.0 KiB
JavaScript
|
|
// Runs once for all items. References upstream nodes by exact name.
|
||
|
|
const sources = $('Set sources').first().json.sources;
|
||
|
|
const runs = $('Get backup_runs (last 7d)').all().map(item => item.json);
|
||
|
|
const weekAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
|
||
|
|
|
||
|
|
const results = sources.map(source => {
|
||
|
|
const sourceRuns = runs.filter(r =>
|
||
|
|
r.machine === source.machine &&
|
||
|
|
r.destination === source.destination &&
|
||
|
|
new Date(r.timestamp) >= weekAgo
|
||
|
|
);
|
||
|
|
const hasSuccess = sourceRuns.some(r => r.status === 'success');
|
||
|
|
const hasAnyRun = sourceRuns.length > 0;
|
||
|
|
const status = hasSuccess ? 'green' : hasAnyRun ? 'yellow' : 'red';
|
||
|
|
const lastSuccess = sourceRuns
|
||
|
|
.filter(r => r.status === 'success')
|
||
|
|
.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp))[0] || null;
|
||
|
|
return { ...source, status, runs: sourceRuns, lastSuccess };
|
||
|
|
});
|
||
|
|
|
||
|
|
const overallStatus = results.some(r => r.status === 'red') ? 'red'
|
||
|
|
: results.some(r => r.status === 'yellow') ? 'yellow' : 'green';
|
||
|
|
|
||
|
|
return [{ json: { results, overallStatus } }];
|