simple-eta

Progressively determine the eta of a process out of the percentage reported.

Usage no npm install needed!

<script type="module">
  import simpleEta from 'https://cdn.skypack.dev/simple-eta';
</script>

README

Simple ETA

Progressively determine the eta of a process out of the percentage reported.
Everything is customizable, no need to define checkpoints or any other shenanigans

Install

npm i simple-eta
const makeEta = require('simple-eta');

const eta = makeEta({ min: 0, max: 100 });

eta.start();
for (let progress = 1; progress <= 100; i += 1) {
  // Operation that takes time
  eta.report(progress);
  console.log(`Aprox. ${eta.estimate()} seconds left`);
}

Constructor

  • min {number=0} - define the lower limit of your interval
  • max {number=1} - define the upper limit of your interval
  • historyTimeConstant {number=2.5} - define (in seconds) how far into the past to consider data points as still relevant
    • higher history value: more time stable. spikes in progress speed will affect ETA less
    • lower history value: more adaptive to changes. spikes in progress speed will affect ETA more
  • autostart {boolean=true} - add the first history point when the class is instantiated or reset

Methods

.start():void

Add the first point to the history. Equivalent to .report(min).
Automatically called if autostart is true.

.reset():void

Resets the history of the ETA.

.report(number):void

Report the progress within the defined interval, adding a point to the history.
Values outside the interval will produce false results.

.estimate():number

Estimates the time left from the last .report call to complete the interval.
Time is returned in seconds. Returns Infinity when an ETA is not available.

.rate():number

Gets the estimated progress speed (progress per second).