From 9ac878f26163d8f8219db5e088e6daf2517b1f6b Mon Sep 17 00:00:00 2001 From: Starbeamrainbowlabs Date: Mon, 31 Jan 2022 03:05:12 +0000 Subject: [PATCH] InfoBroker: add initial meta table. This particular table contains information about the currently running systemquery instance. TODO: Add other interesting things such as # of connected peers etc. --- src/lib/core/InfoBroker.mjs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) 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](); } }