File size: 1,658 Bytes
66e65d0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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);
});