progress-estimator
Version:
Animated progress bars with estimated durations
54 lines (43 loc) • 1.21 kB
JavaScript
;
const { existsSync, mkdirSync, readFileSync, writeFileSync } = require('fs');
const { join } = require('path');
const getEstimate = (id, estimatedDuration, storagePath) => {
const durations = getPreviousDurations(id, storagePath);
if (durations.length < 3 && estimatedDuration) {
durations.push(estimatedDuration);
}
if (durations.length > 0) {
return (
durations.reduce((total, current) => total + current, 0) /
durations.length
);
} else {
return estimatedDuration;
}
};
const getPreviousDurations = (id, storagePath) => {
const path = join(storagePath, id);
if (existsSync(path)) {
return readFileSync(path, 'utf8')
.split('\n')
.filter(line => line)
.map(line => Number.parseInt(line, 10));
}
return [];
};
const updateEstimate = (id, duration, storagePath) => {
if (!existsSync(storagePath)) {
mkdirSync(storagePath);
}
const durations = getPreviousDurations(id, storagePath);
durations.push(duration);
if (durations.length > 10) {
durations.shift();
}
const path = join(storagePath, id);
writeFileSync(path, durations.join('\n'));
};
module.exports = {
getEstimate,
updateEstimate
};