Security News
Supply Chain Attack Detected in @solana/web3.js Library
A supply chain attack has been detected in versions 1.95.6 and 1.95.7 of the popular @solana/web3.js library.
@dnlup/doc
Advanced tools
Get usage and health data about your Node.js process.
doc
is a small module that helps you collect health metrics about your Node.js process.
It does that by using only the API available on Node itself (no native dependencies).
It doesn't have any ties with an APM platform, so you are free to use anything you want for that purpose.
Its API lets you access both computed and raw values, where possible.
doc([options])
doc.Sampler
CpuMetric
ResourceUsageMetric
EventLoopDelayMetric
EventLoopUtilizationMetric
GCMetric
gcMetric.pause
GCEntry
GCAggregatedEntry
new GCAggregatedEntry()
gcAggregatedEntry.flags
gcAggregatedEntry.flags.no
gcAggregatedEntry.flags.constructRetained
gcAggregatedEntry.flags.forced
gcAggregatedEntry.flags.synchronousPhantomProcessing
gcAggregatedEntry.flags.allAvailableGarbage
gcAggregatedEntry.flags.allExternalMemory
gcAggregatedEntry.flags.scheduleIdle
doc.errors
$ npm i @dnlup/doc
$ npm i @dnlup/doc@next
You can import the module by using either CommonJS or ESM.
By default doc
returns a Sampler
instance that collects metrics about cpu, memory usage, event loop delay and event loop utilization.
const doc = require('@dnlup/doc')
const sampler = doc() // Use the default options
sampler.on('sample', () => {
doStuffWithCpuUsage(sampler.cpu.usage)
doStuffWithMemoryUsage(sampler.memory)
doStuffWithEventLoopDelay(sampler.eventLoopDelay.computed)
doStuffWithEventLoopUtilization(sampler.eventLoopUtilization.utilization) // Available only on Node versions that support it
})
import doc from '@dnlup/doc'
const sampler = doc()
sampler.on('sample', () => {
doStuffWithCpuUsage(sampler.cpu.usage)
doStuffWithMemoryUsage(sampler.memory)
doStuffWithEventLoopDelay(sampler.eventLoopDelay.computed)
doStuffWithEventLoopUtilization(sampler.eventLoopUtilization.utilization) // Available only on Node versions that support it
})
A Sampler
holds a snapshot of the metrics taken at the specified sample interval.
This behavior makes the instance stateful. On every tick, a new snapshot will overwrite the previous one.
You can disable the metrics that you don't need.
const doc = require('@dnlup/doc')
// Collect only the event loop delay
const sampler = doc({ collect: { cpu: false, memory: false } })
sampler.on('sample', () => {
// `sampler.cpu` will be `undefined`
// `sampler.memory` will be `undefined`
doStuffWithEventLoopDelay(sampler.eventLoopDelay.computed)
doStuffWithEventLoopUtilization(sampler.eventLoopUtilization.utilization) // Available only on Node versions that support it
})
You can enable more metrics if you need them.
const doc = require('@dnlup/doc')
const sampler = doc({ collect: { gc: true } })
sampler.on('sample', () => {
doStuffWithCpuUsage(sampler.cpu.usage)
doStuffWithMemoryUsage(sampler.memory)
doStuffWithEventLoopDelay(sampler.eventLoopDelay.computed)
doStuffWithEventLoopUtilization(sampler.eventLoopUtilization.utilization) // Available only on Node versions that support it
doStuffWithGarbageCollectionDuration(sampler.gc.pause)
})
const doc = require('@dnlup/doc')
const sampler = doc({ collect: { activeHandles: true } })
sampler.on('sample', () => {
doStuffWithCpuUsage(sampler.cpu.usage)
doStuffWithMemoryUsage(sampler.memory)
doStuffWithEventLoopDelay(sampler.eventLoopDelay.computed)
doStuffWithEventLoopUtilization(sampler.eventLoopUtilization.utilization) // Available only on Node versions that support it
doStuffWithActiveHandles(sampler.activeHandles)
})
You can find more examples in the examples
folder.
doc([options])
It creates a metrics Sampler
instance with the given options.
doc.Sampler
EventEmitter
.Metrics sampler.
It collects the selected metrics at a regular interval. A Sampler
instance is stateful so, on each tick,
only the values of the last sample are available. Each time the sampler emits the sample
event, it will overwrite the previous one.
doc.Sampler([options])
options
<Object>
sampleInterval
<number>
: sample interval (ms) to get a sample. On each sampleInterval
ms a sample
event is emitted. Default: 1000
Under the hood the package uses monitorEventLoopDelay
to track the event loop delay.autoStart
<boolean>
: start automatically to collect metrics. Default: true
.unref
<boolean>
: unref the timer used to schedule the sampling interval. Default: true
.gcOptions
<Object>
: Garbage collection options
aggregate
<boolean>
: Track and aggregate statistics about each garbage collection operation (see https://nodejs.org/docs/latest-v18.x/api/perf_hooks.html#perf_hooks_performanceentry_kind). Default: false
flags
<boolean>
: , Track statistics about the flags of each (aggregated) garbage collection operation (see https://nodejs.org/docs/latest-v18.x/api/perf_hooks.html#perf_hooks_performanceentry_flags). aggregate
has to be true
to enable this option. Default: true
on Node version 12.17.0
and newer.eventLoopDelayOptions
<Object>
: Options to setup monitorEventLoopDelay
. Default: { resolution: 10 }
collect
<Object>
: enable/disable the collection of specific metrics.
cpu
<boolean>
: enable cpu metric. Default: true
.resourceUsage
<boolean>
: enable resourceUsage metric. Default: false
.eventLoopDelay
<boolean>
: enable eventLoopDelay metric. Default: true
.eventLoopUtilization
<boolean>
: enable eventLoopUtilization metric. Default: true
on Node version 12.19.0
and newer.memory
<boolean>
: enable memory metric. Default: true
.gc
<boolean>
: enable garbage collection metric. Default: false
.activeHandles
<boolean>
: enable active handles collection metric. Default: false
.If options.collect.resourceUsage
is set to true
, options.collect.cpu
will be set to false because the cpu metric is already available in the resource usage metric
.
sample
'Emitted every sampleInterval
, it signals that new data the sampler has collected new data.
sampler.start()
Start collecting metrics.
sampler.stop()
Stop collecting metrics.
sampler.cpu
Resource usage metric instance.
sampler.resourceUsage
Resource usage metric instance.
sampler.eventLoopDelay
Event loop delay metric instance.
sampler.eventLoopUtilization
Event loop utilization metric instance.
sampler.gc
Garbage collector metric instance.
sampler.activeHandles
<number>
Number of active handles returned by process._getActiveHandles()
.
sampler.memory
<object>
Object returned by process.memoryUsage()
.
CpuMetric
It exposes both computed and raw values of the cpu usage.
cpuMetric.usage
<number>
Cpu usage in percentage.
cpuMetric.raw
<object>
Raw value returned by process.cpuUsage()
.
ResourceUsageMetric
It exposes both computed and raw values of the process resource usage.
resourceUsage.cpu
<number>
Cpu usage in percentage.
resourceUsage.raw
<object>
Raw value returned by process.resourceUsage()
.
EventLoopDelayMetric
It exposes both computed and raw values about the event loop delay.
eventLoopDelay.computed
<number>
Event loop delay in milliseconds. It computes this value using the mean
of the Histogram
instance.
eventLoopDelay.raw
<Histogram>
Exposes the Histogram
instance.
eventLoopDelay.compute(raw)
raw
<number>
The raw value obtained using the Histogram
API.<number>
The computed delay value.EventLoopUtilizationMetric
It exposes statistics about the event loop utilization.
eventLoopUtilization.idle
<number>
The idle
value in the object returned by performance.eventLoopUtilization()
during the sampleInterval
window.
eventLoopUtilization.active
<number>
The active
value in the object returned by performance.eventLoopUtilization()
during the sampleInterval
window.
eventLoopUtilization.utilization
<number>
The utilization
value in the object returned by performance.eventLoopUtilization()
during the sampleInterval
window.
eventLoopUtilization.raw
<object>
Raw value returned by performance.eventLoopUtilization()
during the sampleInterval
window.
GCMetric
It exposes the garbage collector activity statistics in the specified sampleInterval
using hdr histograms.
new GCMetric(options)
options
<object>
: Configuration options
aggregate
<boolean>
: See gcOptions.aggregate
in the Sampler options.flags
<boolean>
: See gcOptions.flags
in the Sampler options.gcMetric.pause
It tracks the global activity of the garbage collector.
gcMetric.major
The activity of the operation of type major
. It's present only if GCMetric
has been created with the option aggregate
equal to true
.
gcMetric.minor
The activity of the operation of type minor
. It's present only if GCMetric
has been created with the option aggregate
equal to true
.
gcMetric.incremental
The activity of the operation of type incremental
. It's present only if GCMetric
has been created with the option aggregate
equal to true
.
gcMetric.weakCb
The activity of the operation of type weakCb
. It's present only if GCMetric
has been created with the option aggregate
equal to true
.
GCEntry
It contains garbage collection data, represented with an histogram. All timing values are expressed in nanoseconds.
new GCEntry()
The initialization doesn't require options. It is created internally by a GCMetric
.
gcEntry.totalDuration
<number>
It is the total time of the entry in nanoseconds.
gcEntry.totalCount
<number>
It is the total number of operations counted.
gcEntry.mean
<number>
It is the mean value of the entry in nanoseconds.
gcEntry.max
<number>
It is the maximum value of the entry in nanoseconds.
gcEntry.min
<number>
It is the minimum value of the entry in nanoseconds.
gcEntry.stdDeviation
<number>
It is the standard deviation of the entry in nanoseconds.
gcEntry.getPercentile(percentile)
percentile
<number>
: Get a percentile from the histogram.<number>
The percentileGCAggregatedEntry
It extends GCEntry
and contains garbage collection data plus the flags associated with it (see https://nodejs.org/dist/latest-v18.x/docs/api/perf_hooks.html#performanceentryflags).
new GCAggregatedEntry()
The initialization doesn't require options. It is created internally by a GCMetric
.
gcAggregatedEntry.flags
<object>
This object contains the various histograms of each flag.
gcAggregatedEntry.flags.no
gcAggregatedEntry.flags.constructRetained
gcAggregatedEntry.flags.forced
gcAggregatedEntry.flags.synchronousPhantomProcessing
gcAggregatedEntry.flags.allAvailableGarbage
gcAggregatedEntry.flags.allExternalMemory
gcAggregatedEntry.flags.scheduleIdle
doc.errors
In the errors
object are exported all the custom errors used by the module.
Error | Error Code | Description |
---|---|---|
InvalidArgumentError | DOC_ERR_INVALID_ARG | An invalid option or argument was used |
NotSupportedError | DOC_ERR_NOT_SUPPORTED | A metric is not supported on the Node.js version used |
Node diagnostics channel are supported.
const diagnosticsChannel = require('diagnostics_channel')
const doc = require('@dnlup/doc)
diagnosticsChannel.subscribe(doc.constants.DOC_CHANNEL, s => {
console.log('A new instance', s)
})
diagnosticsChannel.subscribe(doc.constants.DOC_SAMPLES_CHANNEL, s => {
console.log('A new sample', s)
})
doc()
FAQs
Get usage and health data about your Node.js process
The npm package @dnlup/doc receives a total of 280 weekly downloads. As such, @dnlup/doc popularity was classified as not popular.
We found that @dnlup/doc demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A supply chain attack has been detected in versions 1.95.6 and 1.95.7 of the popular @solana/web3.js library.
Research
Security News
A malicious npm package targets Solana developers, rerouting funds in 2% of transactions to a hardcoded address.
Security News
Research
Socket researchers have discovered malicious npm packages targeting crypto developers, stealing credentials and wallet data using spyware delivered through typosquats of popular cryptographic libraries.