Skip to content

Instantly share code, notes, and snippets.

@tillberg
Last active August 29, 2015 14:11
Show Gist options
  • Save tillberg/40d09a673d6636dc1770 to your computer and use it in GitHub Desktop.
Save tillberg/40d09a673d6636dc1770 to your computer and use it in GitHub Desktop.
wrap caolan async.auto with logging for sub-call start/end timings
function loggedAsyncAuto (obj, doneCb) {
var globalStart;
function time () {
return new Date().getTime();
}
function elapsed (now) {
var s = '' + (now - globalStart);
return _.times(5 - s.length, function () { return ' '; }).join('') + s;
}
var keys = _.keys(obj);
var done = _.after(keys.length, function () {
console.log('finished async.auto of [' + keys.join(', ') + '] in ' + (time() - globalStart) + ' ms');
});
var wrappedObj = _.object(keys, _.map(obj, function (fnish, name) {
var fn;
var wrappedFn = function (cb, results) {
var myStart = time();
if (!globalStart) {
globalStart = myStart;
console.log(elapsed(myStart) + ' starting async.auto of [' + keys.join(', ') + ']');
}
console.log(elapsed(myStart) + ' start ' + name);
fn(function () {
var now = time();
console.log(elapsed(now) + ' finish ' + name + ' in ' + (now - myStart) + ' ms');
done();
cb.apply(this, arguments);
}, results);
};
if (_.isFunction(fnish)) {
fn = fnish;
return wrappedFn;
} else {
fn = fnish[fnish.length - 1];
var rval = fnish.slice();
rval[rval.length - 1] = wrappedFn;
return rval;
}
}));
async.auto(wrappedObj, doneCb);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment