progress-stream

Read the progress of a stream

npm install progress-stream
42 downloads in the last day
114 downloads in the last week
159 downloads in the last month

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);

    /*
    {
        percentage: 9.05,
        transferred: 949624,
        length: 10485760,
        remaining: 9536136,
        eta: 42,
        runtime: 3,
        delta: 295396,
        speed: 949624
    }
    */
});

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);

/*
{
    percentage: 9.05,
    transferred: 949624,
    length: 10485760,
    remaining: 9536136,
    eta: 10,
    runtime: 0,
    delta: 295396,
    speed: 949624
}
*/

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.

npm loves you