@@ -10,6 +10,18 @@ import type { IntervalHistogram as PerfIntervalHistogram } from 'perf_hooks';
1010import { monitorEventLoopDelay } from 'perf_hooks' ;
1111import type { IntervalHistogram } from '../types' ;
1212
13+ /**
14+ * Nanosecond to milisecond conversion unit
15+ */
16+ export const ONE_MILLISECOND_AS_NANOSECONDS = 1_000_000 ;
17+
18+ /**
19+ * Converts time metric from ns to ms
20+ **/
21+ export function nsToMs ( metric : number ) {
22+ return metric / ONE_MILLISECOND_AS_NANOSECONDS ;
23+ }
24+
1325export class EventLoopDelaysMonitor {
1426 private readonly loopMonitor : PerfIntervalHistogram ;
1527 private fromTimestamp : Date ;
@@ -28,26 +40,36 @@ export class EventLoopDelaysMonitor {
2840 * Collect gathers event loop delays metrics from nodejs perf_hooks.monitorEventLoopDelay
2941 * the histogram calculations start from the last time `reset` was called or this
3042 * EventLoopDelaysMonitor instance was created.
43+ *
44+ * Returns metrics in milliseconds.
45+
3146 * @returns {IntervalHistogram }
3247 */
48+
3349 public collect ( ) : IntervalHistogram {
3450 const lastUpdated = new Date ( ) ;
3551 this . loopMonitor . disable ( ) ;
36- const { min, max, mean, exceeds, stddev } = this . loopMonitor ;
52+ const {
53+ min : minNs ,
54+ max : maxNs ,
55+ mean : meanNs ,
56+ exceeds : exceedsNs ,
57+ stddev : stddevNs ,
58+ } = this . loopMonitor ;
3759
3860 const collectedData : IntervalHistogram = {
39- min,
40- max,
41- mean,
42- exceeds,
43- stddev,
61+ min : nsToMs ( minNs ) ,
62+ max : nsToMs ( maxNs ) ,
63+ mean : nsToMs ( meanNs ) ,
64+ exceeds : nsToMs ( exceedsNs ) ,
65+ stddev : nsToMs ( stddevNs ) ,
4466 fromTimestamp : this . fromTimestamp . toISOString ( ) ,
4567 lastUpdatedAt : lastUpdated . toISOString ( ) ,
4668 percentiles : {
47- 50 : this . loopMonitor . percentile ( 50 ) ,
48- 75 : this . loopMonitor . percentile ( 75 ) ,
49- 95 : this . loopMonitor . percentile ( 95 ) ,
50- 99 : this . loopMonitor . percentile ( 99 ) ,
69+ 50 : nsToMs ( this . loopMonitor . percentile ( 50 ) ) ,
70+ 75 : nsToMs ( this . loopMonitor . percentile ( 75 ) ) ,
71+ 95 : nsToMs ( this . loopMonitor . percentile ( 95 ) ) ,
72+ 99 : nsToMs ( this . loopMonitor . percentile ( 99 ) ) ,
5173 } ,
5274 } ;
5375
0 commit comments