downtimer
Version:
Timeouts, but a little more relaxing
90 lines • 3.29 kB
JavaScript
import { displayError, displayTrace, getStackTrace } from './stackTrace';
import { format } from 'date-fns';
function formatTime(t) {
return format(new Date(t), 'hh:mm:ss');
}
function displayHeading(msg, colors) {
console.log(colors.heading(`[DOWNTIMER]@${formatTime(Date.now())} ${msg}`));
}
function displayScheduleTime(scheduledAt, scheduledFor) {
console.log(` Scheduled at ${formatTime(scheduledAt)}`);
const delta = Date.now() - scheduledFor;
let lateness = '';
if (delta > 10) {
lateness = ` (${delta} ms late)`;
}
else if (delta < -10) {
lateness = ` (${-delta} ms early)`;
}
console.log(` Scheduled for ${formatTime(scheduledFor)}${lateness}`);
}
export function logSchedule(mode, timer, colors) {
if (mode === 'off')
return;
displayHeading(`Schedule timer '${timer.externalId}'`, colors);
if (mode === 'minimal')
return;
console.log(' Stack trace of scheduler');
displayTrace(timer.scheduleStackTrace, colors);
}
export function logBeforeExecute(mode, timer, colors) {
if (mode === 'off')
return;
displayHeading(`Execute timer '${timer.externalId}'`, colors);
if (mode === 'minimal')
return;
displayScheduleTime(timer.scheduledAt, timer.scheduledFor);
console.log(' Stack trace of scheduler');
displayTrace(timer.scheduleStackTrace, colors);
}
export function logErrorInExecute(mode, timer, execError, colors) {
if (mode === 'off')
return;
displayHeading(`Unhandled error in timer '${timer.externalId}'`, colors);
if (mode === 'minimal')
return;
displayScheduleTime(timer.scheduledAt, timer.scheduledFor);
displayError(execError, colors);
console.log(' Stack trace of scheduler');
displayTrace(timer.scheduleStackTrace, colors);
}
export function logClearNotFound(mode, timerId, colors) {
if (mode === 'off')
return;
displayHeading(`Failed to clear timer: '${timerId}' not found (maybe it has already fired?)`, colors);
if (mode === 'minimal')
return;
displayTrace(getStackTrace(), colors);
}
export function logClearSuccess(mode, timer, colors) {
if (mode === 'off')
return;
displayHeading(`Cleared timer '${timer.externalId}'`, colors);
if (mode === 'minimal')
return;
console.log(' Stack trace of scheduler');
displayTrace(timer.scheduleStackTrace, colors);
console.log(' Stack trace of clearer');
displayTrace(getStackTrace(), colors);
}
export function logClearAll(mode, timers, colors) {
if (mode === 'off')
return;
const n = Object.keys(timers).length;
displayHeading(`Cleared ${n} timer${n === 1 ? '' : 's'}`, colors);
if (mode === 'minimal')
return;
for (const t of Object.values(timers)) {
console.log(` -> '${t.externalId}'`);
displayScheduleTime(t.scheduledAt, t.scheduledFor);
}
console.log(' Stack trace of clearer');
displayTrace(getStackTrace(), colors);
}
export function logClearOnExit(mode, timers, code, colors) {
if (mode === 'off')
return;
const n = Object.keys(timers).length;
displayHeading(`Clearing ${n} timer${n === 1 ? '' : 's'} due to exit with code ${code}`, colors);
}
//# sourceMappingURL=log.js.map