UNPKG

huntsman

Version:

Super configurable async web spider

62 lines (48 loc) 1.9 kB
var stats = { errors: 0, success: 0, codes: {} }; var lastResponse = new Date().getTime(); var rps = { prev: 0, now: 0 }; var log = { prev: '', now: '' }; var bytes = { prev: 0, now: 0, total: 0 }; var pollInterval = setInterval( function(){ bytes.prev = bytes.now; rps.prev = rps.now; bytes.now = rps.now = 0; // Clear interval after 10 seconds of inactivity if( ( new Date().getTime() - 10000 ) > ( lastResponse ) ){ clearInterval( pollInterval ); } }, 1000 ); var emit = function( emitter, res, options ){ log.prev = log.now; log.now = ''; if( emitter.queue ) log.now += ' \x1b[1;34mQueued\x1b[0;34m:' + emitter.queue.data.length + '\x1b[0m'; log.now += ' \x1b[1;32m✓\x1b[0;32m ' + stats.success + '\x1b[0m'; log.now += ' \x1b[1;31m✘\x1b[1;31m ' + stats.errors + '\x1b[0m'; rps.now++; log.now += ' \x1b[1;33m⌚\x1b[0;33m ' + ( rps.prev || 0 ) + '\x1b[0m'; // log.now += ' \x1b[1;33m:\x1b[0;33m ' + Math.round( bytes.total / 1048576 ) + 'mb\x1b[0m'; // log.now += ' \x1b[1;33m:\x1b[0;33m ' + Math.round( bytes.prev / 1048576 ) + 'mb/s\x1b[0m'; log.now += '\x1b[1;10m :\x1b[0m ' + res.uri; if( options && options.tail ){ process.stderr.write( '\r' + log.now ); if( log.prev.length > log.now.length ){ process.stderr.write( new Array( log.prev.length - log.now.length + 1 ).join( ' ' ) ); } } else process.stderr.write( log.now + '\n' ); }; module.exports = function( options ){ return function( huntsman, err, res, cb ){ lastResponse = new Date().getTime(); if( err ) stats.errors++; else stats.success++; if( !( res.statusCode in stats.codes ) ) stats.codes[ res.statusCode ] = 0; stats.codes[ res.statusCode ]++; if( 'string' === typeof( res.body ) ){ bytes.now += res.body.length; bytes.total += res.body.length; } emit( huntsman, res, options ); return cb(); }; };