@metrics/process
Version:
Module for collecting different process and system metrics and providing them as a metric stream
71 lines (57 loc) • 1.31 kB
JavaScript
;
const Metric = require("@metrics/metric");
const fs = require("fs");
const CollectorMaxFileDescriptors = class CollectorMaxFileDescriptors {
constructor(prefix = "") {
Object.defineProperty(this, "prefix", {
value: prefix,
});
Object.defineProperty(this, "collected", {
writable: true,
value: false,
});
}
get [Symbol.toStringTag]() {
return "CollectorMaxFileDescriptors";
}
collect(timestamp) {
if (process.platform !== "linux") {
return null;
}
if (this.collected) {
return null;
}
return new Promise((resolve) => {
fs.readFile("/proc/self/limits", "utf8", (error, limits) => {
if (error) {
resolve(null);
return;
}
const lines = limits.split("\n");
let result = "";
lines.find((line) => {
if (line.startsWith("Max open files")) {
[, result] = line.split(/ +/);
return true;
}
return false;
});
if (result === "") {
resolve(null);
return;
}
resolve([
new Metric({
name: `${this.prefix}process_max_fds`,
description: "Maximum number of open file descriptors",
type: 1,
value: parseInt(result, 10),
timestamp,
}),
]);
this.collected = true;
});
});
}
};
module.exports = CollectorMaxFileDescriptors;