event_loop.coffee 657 B

123456789101112131415161718
  1. module.exports = EventLoopMonitor =
  2. monitor: (logger, interval = 1000, log_threshold = 100) ->
  3. Metrics = require "./metrics"
  4. # check for logger on startup to avoid exceptions later if undefined
  5. throw new Error("logger is undefined") if !logger?
  6. # monitor delay in setInterval to detect event loop blocking
  7. previous = Date.now()
  8. intervalId = setInterval () ->
  9. now = Date.now()
  10. offset = now - previous - interval
  11. if offset > log_threshold
  12. logger.warn {offset: offset}, "slow event loop"
  13. previous = now
  14. Metrics.timing("event-loop-millsec", offset)
  15. , interval
  16. Metrics.registerDestructor () ->
  17. clearInterval(intervalId)