37 lines
858 B
JavaScript
Executable File
37 lines
858 B
JavaScript
Executable File
'use strict';
|
|
|
|
const Gauge = require('../gauge');
|
|
const fs = require('fs');
|
|
const process = require('process');
|
|
|
|
const PROCESS_OPEN_FDS = 'process_open_fds';
|
|
|
|
module.exports = (registry, config = {}) => {
|
|
if (process.platform !== 'linux') {
|
|
return;
|
|
}
|
|
|
|
const namePrefix = config.prefix ? config.prefix : '';
|
|
const labels = config.labels ? config.labels : {};
|
|
const labelNames = Object.keys(labels);
|
|
|
|
new Gauge({
|
|
name: namePrefix + PROCESS_OPEN_FDS,
|
|
help: 'Number of open file descriptors.',
|
|
registers: registry ? [registry] : undefined,
|
|
labelNames,
|
|
collect() {
|
|
try {
|
|
const fds = fs.readdirSync('/proc/self/fd');
|
|
// Minus 1 to not count the fd that was used by readdirSync(),
|
|
// it's now closed.
|
|
this.set(labels, fds.length - 1);
|
|
} catch {
|
|
// noop
|
|
}
|
|
},
|
|
});
|
|
};
|
|
|
|
module.exports.metricNames = [PROCESS_OPEN_FDS];
|