progress-stream
Read the progress of a stream. Supports speed and eta.
Gets the lengths of the stream automatically if you're using the request or http module. You can also pass the length on initiation. Progress-stream will also check to see if the stream already have a length property.
npm install progress-stream
Usage
This example copies a large file, and prints out the percentage, speed and remaining every 100ms.
var progress = require('progress-stream');
var fs = require('fs');
var stat = fs.statSync(filename);
var str = progress({
length: stat.size,
time: 100
});
str.on('progress', function(progress) {
console.log(progress);
});
fs.createReadStream(filename)
.pipe(str)
.pipe(fs.createWriteStream(output));
Methods
progress([options], [onprogress])
You can instantiate in two ways:
var str = progress({time:100});
str.on('progress', function(progress) { ... });
or inline the progress listener
var str = progress({time:100}, function(progress) { ... });
Properties
.progress
You can get the progress from the progress property.
var str = progress({time:100});
console.log(str.progress);
Events
on('progress', function(progress) { ... })
var str = progress({time:100});
str.on('progress', function(progress) { ... });
Options
time(integer)
Sets how often progress events is emitted. If omitted then defaults to emit every time a chunk is received.
speed(integer)
Sets how long the speedometer needs to calculate the speed. Defaults to 5 sec.
length(integer)
If you already know the length of the stream, then you can set it. Defaults to 0.
drain(boolean)
In case you don't want to include a readstream after progress-stream, set to true to drain automatically. Defaults to false.
Examples
Using the request module
This example uses request to download a 100 MB file, and writes out the percentage every second.
You can also find an example in test/request.js
.
var progress = require('progress-stream');
var req = require('request');
var fs = require('fs');
var str = progress({
time: 1000
});
str.on('progress', function(progress) {
console.log(Math.round(progress.percentage)+'%');
});
req('http://cachefly.cachefly.net/100mb.test', { headers: { 'user-agent': 'test' }})
.pipe(str)
.pipe(fs.createWriteStream('test.data'));
Using the http module
In test/http.js
it's shown how to do it with the http module.