appmetrics icon indicating copy to clipboard operation
appmetrics copied to clipboard

Warnings emitted on Node 14

Open jloveridge opened this issue 5 years ago • 7 comments

When appmetrics is required on node 14 multiple messages are emitted which state:

(node:74412) Warning: Accessing non-existent property '__ddProbeAttached__' of module exports inside circular dependency

The following simple script can reproduce the issue:

require('appmetrics');

jloveridge avatar Sep 15 '20 20:09 jloveridge

Same here! Node v14.15.2

Warning: Accessing non-existent property '__ddProbeAttached__' of module exports inside circular dependency

kams2160 avatar Apr 12 '21 10:04 kams2160

Same here, Node v14.16.1

dnascimb avatar Apr 20 '21 00:04 dnascimb

It's internal code unfortunately (so I cannot share it at this time), but my team managed to replace the appmetrics module completely in Node.js 14.x using methods available in the standard library

jokeyrhyme avatar Apr 20 '21 01:04 jokeyrhyme

Any update on this issue?

realjasonbourne avatar Jun 01 '22 11:06 realjasonbourne

@jokeyrhyme can you explain how you removed this package and got the required metrics?

amanthegreatone avatar Aug 29 '22 07:08 amanthegreatone

jokeyrhyme avatar Aug 30 '22 00:08 jokeyrhyme

this is what i could come up with

  // timer start time
  let trackingTime = process.hrtime();

  // last cpu usage to get difference from current cpu usage (the diff will give usage over timer period)
  let lastCpuUsage = process.cpuUsage();

  // histogram for event loop monitoring
  const histogram = perf_hooks.monitorEventLoopDelay();
  histogram.enable();

  // monitor cpu, memory, event loop
  const monitor = () => {

    // end time for the timer (diff from start time by passing as arg)
    // hrtime gives nanosecond resolution ([0] seconds, [1] remaining nanoseconds)
    const delta = process.hrtime(trackingTime);
    const nanosec = delta[0] * 1e9 + delta[1];

    // get cpu usage (user and system)
    const cpuUsage = process.cpuUsage();

    // diff from last cpu usage to get % usage over timer interval
    const userUsage = ((cpuUsage.user - lastCpuUsage.user) / nanosec) * 1000;
    const systemUsage = ((cpuUsage.system - lastCpuUsage.system) / nanosec) * 1000;
    transportClient.gauge('cpu.process', userUsage);
    transportClient.gauge('cpu.system', systemUsage);

    // update last cpu usage for next timer cycle
    lastCpuUsage = cpuUsage;

    // get process memory usage
    // Resident Set Size, is the amount of space occupied in the main memory device
    // (that is a subset of the total allocated memory) for the process
    // including all C++ and JavaScript objects and code
    const memoryUsage = process.memoryUsage();
    transportClient.gauge('memory.process.physical', memoryUsage.rss);

    transportClient.gauge('eventloop.latency.min', histogram.min / 1e6);
    transportClient.gauge('eventloop.latency.max', histogram.max / 1e6);
    transportClient.gauge('eventloop.latency.avg', histogram.mean / 1e6);

    // reset histogram to start new cycle
    histogram.reset();

    // update timer time for getting diff for next cycle
    trackingTime = process.hrtime();
  };

  // collect process metrics every 5 seconds
  setInterval(monitor, 5000);

any comments are welcome

amanthegreatone avatar Sep 01 '22 05:09 amanthegreatone