| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /*
- * decaffeinate suggestions:
- * DS102: Remove unnecessary code created because of implicit returns
- * DS205: Consider reworking code to avoid use of IIFEs
- * DS207: Consider shorter variations of null checks
- * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
- */
- let OpenSocketsMonitor
- const seconds = 1000
- // In Node 0.10 the default is 5, which means only 5 open connections at one.
- // Node 0.12 has a default of Infinity. Make sure we have no limit set,
- // regardless of Node version.
- require('http').globalAgent.maxSockets = Infinity
- require('https').globalAgent.maxSockets = Infinity
- const SOCKETS_HTTP = require('http').globalAgent.sockets
- const SOCKETS_HTTPS = require('https').globalAgent.sockets
- // keep track of set gauges and reset them in the next collection cycle
- const SEEN_HOSTS_HTTP = new Set()
- const SEEN_HOSTS_HTTPS = new Set()
- function collectOpenConnections(sockets, seenHosts, prefix) {
- const Metrics = require('./index')
- Object.keys(sockets).forEach(host => seenHosts.add(host))
- seenHosts.forEach(host => {
- // host: 'HOST:PORT:'
- const hostname = host.split(':')[0]
- const openConnections = (sockets[host] || []).length
- if (!openConnections) {
- seenHosts.delete(host)
- }
- Metrics.gauge(`open_connections.${prefix}.${hostname}`, openConnections)
- })
- }
- module.exports = OpenSocketsMonitor = {
- monitor(logger) {
- const interval = setInterval(
- () => OpenSocketsMonitor.gaugeOpenSockets(),
- 5 * seconds
- )
- const Metrics = require('./index')
- return Metrics.registerDestructor(() => clearInterval(interval))
- },
- gaugeOpenSockets() {
- collectOpenConnections(SOCKETS_HTTP, SEEN_HOSTS_HTTP, 'http')
- collectOpenConnections(SOCKETS_HTTPS, SEEN_HOSTS_HTTPS, 'https')
- },
- }
|