You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.6 KiB
73 lines
1.6 KiB
'use strict'; |
|
|
|
var captureLastRun = require('last-run').capture; |
|
var releaseLastRun = require('last-run').release; |
|
|
|
var metadata = require('./metadata'); |
|
|
|
var uid = 0; |
|
|
|
function Storage(fn) { |
|
var meta = metadata.get(fn); |
|
|
|
this.fn = meta.orig || fn; |
|
this.uid = uid++; |
|
this.name = meta.name; |
|
this.branch = meta.branch || false; |
|
this.captureTime = Date.now(); |
|
this.startHr = []; |
|
} |
|
|
|
Storage.prototype.capture = function() { |
|
captureLastRun(this.fn, this.captureTime); |
|
}; |
|
|
|
Storage.prototype.release = function() { |
|
releaseLastRun(this.fn); |
|
}; |
|
|
|
function createExtensions(ee) { |
|
return { |
|
create: function(fn) { |
|
return new Storage(fn); |
|
}, |
|
before: function(storage) { |
|
storage.startHr = process.hrtime(); |
|
ee.emit('start', { |
|
uid: storage.uid, |
|
name: storage.name, |
|
branch: storage.branch, |
|
time: Date.now(), |
|
}); |
|
}, |
|
after: function(result, storage) { |
|
if (result && result.state === 'error') { |
|
return this.error(result.value, storage); |
|
} |
|
storage.capture(); |
|
ee.emit('stop', { |
|
uid: storage.uid, |
|
name: storage.name, |
|
branch: storage.branch, |
|
duration: process.hrtime(storage.startHr), |
|
time: Date.now(), |
|
}); |
|
}, |
|
error: function(error, storage) { |
|
if (Array.isArray(error)) { |
|
error = error[0]; |
|
} |
|
storage.release(); |
|
ee.emit('error', { |
|
uid: storage.uid, |
|
name: storage.name, |
|
branch: storage.branch, |
|
error: error, |
|
duration: process.hrtime(storage.startHr), |
|
time: Date.now(), |
|
}); |
|
}, |
|
}; |
|
} |
|
|
|
module.exports = createExtensions;
|
|
|