90 lines
2.1 KiB
JavaScript
90 lines
2.1 KiB
JavaScript
const MAX_RECENT_ERRORS = 10;
|
|
|
|
const state = {
|
|
worker: {
|
|
enabled: false,
|
|
running: false,
|
|
started_at: null,
|
|
last_run_at: null,
|
|
next_run_at: null,
|
|
last_error: null,
|
|
},
|
|
notifications: {
|
|
last_test_at: null,
|
|
last_error: null,
|
|
},
|
|
recentErrors: [],
|
|
};
|
|
|
|
function toMessage(error) {
|
|
if (!error) return null;
|
|
if (typeof error === 'string') return error;
|
|
return error.message || String(error);
|
|
}
|
|
|
|
function recordError(source, error) {
|
|
const message = toMessage(error);
|
|
if (!message) return;
|
|
|
|
state.recentErrors.unshift({
|
|
timestamp: new Date().toISOString(),
|
|
source,
|
|
message,
|
|
});
|
|
|
|
state.recentErrors = state.recentErrors.slice(0, MAX_RECENT_ERRORS);
|
|
}
|
|
|
|
function markWorkerStarted(nextRunAt = null) {
|
|
state.worker.enabled = true;
|
|
state.worker.running = true;
|
|
state.worker.started_at = state.worker.started_at || new Date().toISOString();
|
|
state.worker.next_run_at = nextRunAt;
|
|
}
|
|
|
|
function markWorkerSuccess(nextRunAt = null) {
|
|
state.worker.last_run_at = new Date().toISOString();
|
|
state.worker.last_error = null;
|
|
if (nextRunAt !== undefined) state.worker.next_run_at = nextRunAt;
|
|
}
|
|
|
|
function markWorkerError(error, nextRunAt = null) {
|
|
state.worker.last_run_at = new Date().toISOString();
|
|
state.worker.last_error = toMessage(error);
|
|
if (nextRunAt !== undefined) state.worker.next_run_at = nextRunAt;
|
|
recordError('Daily Worker', error);
|
|
}
|
|
|
|
function markNotificationTestSuccess() {
|
|
state.notifications.last_test_at = new Date().toISOString();
|
|
state.notifications.last_error = null;
|
|
}
|
|
|
|
function markNotificationError(error) {
|
|
state.notifications.last_error = toMessage(error);
|
|
recordError('Notifications', error);
|
|
}
|
|
|
|
function markNotificationSuccess() {
|
|
state.notifications.last_error = null;
|
|
}
|
|
|
|
function getStatusRuntime() {
|
|
return {
|
|
worker: { ...state.worker },
|
|
notifications: { ...state.notifications },
|
|
recentErrors: [...state.recentErrors],
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
getStatusRuntime,
|
|
markNotificationError,
|
|
markNotificationSuccess,
|
|
markNotificationTestSuccess,
|
|
markWorkerError,
|
|
markWorkerStarted,
|
|
markWorkerSuccess,
|
|
recordError,
|
|
};
|