Super light wrapper around async-hooks to collect information about resources created during async operations.
const ActivityCollector = require('ah-collector')
function captureStack(hook, { uid, type, triggerId }, resource) {
// Predicate to decide if a stack should be captured or not.
// Capture only inits of the TIMERWRAP but everything of the Timeout.
return type === 'Timeout' || (type === 'TIMERWRAP' && hook === 'init')
}
const collector = new ActivityCollector({
start: process.hrtime()
, captureStack
}).enable()
setTimeout(ontimeout, 100)
function ontimeout() {
collector
.processStacks()
.dump()
}
Needs async hooks feature, therefore build from this PR for now.
npm install ah-collector
Creates an instance of an ActivityCollector
Parameters
-
$0
Object-
$0.start
Array<Number> start time obtained viaprocess.hrtime()
-
$0.stackCapturer
StackCapturer? which is used to decide if a stack should be captured as well as to capture and process it @see thlorenz/ah-stack-capturer The default capturer used doesn't ever capture a stack so this feature is turned off by default. (optional, defaultdefaultStackCapturer
) -
$0.requireInit
boolean? whentrue
any activities whoseinit
hook we missed are ignored even if we seebefore
,after
and/ordestroy
hooks. (optional, defaultfalse
)
-
Returns ActivityCollector instance of ActivityCollector
Enables the collection of async hooks. Needs to be called as otherwise nothing will be collected.
Returns ActivityCollector activityCollector
Disables the collection of async hooks.
Nothing will be collected until activityCollector.enable()
is called.
Returns ActivityCollector activityCollector
Clears all currently collected activity.
Returns ActivityCollector activityCollector
Returns an Array of all activities collected so far that are of the specified type(s).
Parameters
Returns Array activities matching the specified type(s)
A getter
that returns a map of all activities collected so far.
Returns Map activities
A getter
that returns an Array of all activities collected so far.
Returns Array activities
Processes all stacks that were captured for specific activities This is done in line, i.e. the actual stacks of the activity objects are modified.
Returns ActivityCollector activityCollector
Dumps all so far collected activities to the console. This is useful for diagnostic purposes.
If no arguments are provided, all activities are dumped.
Parameters
-
opts
Object allow tweaking which activities are dumped and how
Returns ActivityCollector activityCollector
Dumps all types in the order they were collected including id and trigger id.
Example: FSREQWRAP:id:triggerId
Static getter that denotes the type given to activities whose type is unkown since
we missed their init
event.
MIT