diff --git a/src/lib/core/InfoBroker.mjs b/src/lib/core/InfoBroker.mjs index 6df6744..49ac2f8 100644 --- a/src/lib/core/InfoBroker.mjs +++ b/src/lib/core/InfoBroker.mjs @@ -1,14 +1,23 @@ "use strict"; +import path from 'path'; +import fs from 'fs'; + import sysinfo from 'systeminformation'; import log from '../../lib/io/NamespacedLog.mjs'; const l = log("infobroker"); +// HACK: Make sure __dirname is defined when using es6 modules. I forget where I found this - a PR with a source URL would be great :D +const __dirname = import.meta.url.slice(7, import.meta.url.lastIndexOf("/")); + + class InfoBroker { constructor() { + this.sym_meta = Symbol("____meta_info____") this.allowed_tables = { // name → sysinfo name cpu: "cpu", + meta: this.sym_meta }; } @@ -16,6 +25,16 @@ class InfoBroker { return Object.keys(this.allowed_tables).includes(name); } + async make_table_meta() { + return { + version: JSON.parse(fs.promises.readFile(path.resolve(__dirname, "../../../package.json"), "utf-8")).version, + versions_env: process.versions, + pid: process.pid, + uptime: process.uptime(), + memory: process.memoryUsage(), + }; + } + async fetch_table(name) { if(!(typeof name === "string")) throw new Exception(`Error: Expected name to be of type string, but received value of type ${typeof name} instead.`); @@ -25,7 +44,11 @@ class InfoBroker { return null; } - return await sysinfo[this.allowed_tables[name]](); + let name_translated = this.allowed_tables[name]; + if(name_translated === this.sym_meta) + return await this.make_table_meta(); + + return await sysinfo[name_translated](); } }