| 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); | |
| }); | |