|
const express = require('express'); |
|
const app = express(); |
|
|
|
const fs = require('node:fs'); |
|
const os = require("node:os"); |
|
const v8 = require("node:v8"); |
|
const process = require('node:process'); |
|
|
|
function handle(signal) { |
|
console.log(`Received signal ${signal}`); |
|
} |
|
|
|
process.on('SIGINT', handle); |
|
process.on('SIGTERM', handle); |
|
|
|
app.get('/', (req, res) => { |
|
console.log('Received a request.'); |
|
|
|
const files = [ |
|
"/sys/fs/cgroup/memory/memory.usage_in_bytes", |
|
"/sys/fs/cgroup/memory/memory.limit_in_bytes", |
|
"/sys/fs/cgroup/cpu/cpuacct.usage", |
|
"/sys/fs/cgroup/cpu/cpu.shares", |
|
"/sys/fs/cgroup/cpu/cpu.cfs_quota_us", |
|
"/sys/fs/cgroup/cpu/cpu.cfs_period_us", |
|
] |
|
|
|
let cgroup = {}; |
|
for (let f of files) { |
|
try { |
|
cgroup[f] = fs.readFileSync(f, 'utf8'); |
|
} catch(e) { |
|
console.error(`Cannot read cgroup info for ${f}`, e); |
|
} |
|
} |
|
|
|
let memory = { |
|
freemem: os.freemem(), |
|
totalmem: os.totalmem(), |
|
memoryUsage: process.memoryUsage(), |
|
}; |
|
|
|
let cpus = os.cpus(); |
|
let availableParallelism = os.availableParallelism(); |
|
|
|
let username = os.userInfo().username |
|
|
|
let product_name; |
|
try { |
|
product_name = fs.readFileSync('/sys/class/dmi/id/product_name', 'utf8'); |
|
} catch(e) { |
|
console.error(`Cannot read /sys/class/dmi/id/product_name`, e); |
|
} |
|
|
|
let env = process.env; |
|
|
|
let heapinfo = v8.getHeapStatistics(); |
|
|
|
let pid = process.pid; |
|
|
|
res.send({cgroup, memory, heapinfo, cpus, username, product_name, env, availableParallelism, pid}); |
|
}); |
|
|
|
const port = process.env.PORT || 8080; |
|
app.listen(port, () => { |
|
console.log('Hello world listening on port', port); |
|
}); |
|
|