simple-ioc
Version:
Simple Inversion of Control for node.js
36 lines • 929 B
JavaScript
var log = require( '../log/log.js' )( 'timer' );
module.exports = function( waitingTime ) {
var pub = {},
intervalObject,
timestamp,
started = {};
var startTimer = function() {
timestamp = Date.now();
if( Object.keys( started ).length )
intervalObject = setInterval( logWarning, waitingTime );
};
var stopTimer = function() {
if( intervalObject )
clearInterval( intervalObject );
intervalObject = undefined;
};
var logWarning = function() {
log.warning( 'Slow components', Object.keys( started ).map( function( name ) {
return [ name, ': ', Math.round( ( Date.now() - started[ name ] ) / 1000 ), ' s.' ].join( '' );
} ) );
};
var updateTimer = function() {
stopTimer();
startTimer();
};
pub.startTimer = function( name ) {
started[ name ] = Date.now();
updateTimer();
};
pub.stopTimer = function( name ) {
if( name )
delete started[ name ];
updateTimer();
};
return pub;
};