2022-01-30 00:51:28 +00:00
|
|
|
"use strict";
|
|
|
|
|
2022-01-31 03:05:12 +00:00
|
|
|
import path from 'path';
|
|
|
|
import fs from 'fs';
|
|
|
|
|
2022-01-30 00:51:28 +00:00
|
|
|
import sysinfo from 'systeminformation';
|
|
|
|
|
|
|
|
import log from '../../lib/io/NamespacedLog.mjs'; const l = log("infobroker");
|
|
|
|
|
2022-01-31 03:05:12 +00:00
|
|
|
// 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("/"));
|
|
|
|
|
|
|
|
|
2022-01-30 00:51:28 +00:00
|
|
|
class InfoBroker {
|
|
|
|
constructor() {
|
2022-01-31 03:05:12 +00:00
|
|
|
this.sym_meta = Symbol("____meta_info____")
|
2022-01-30 00:51:28 +00:00
|
|
|
this.allowed_tables = {
|
|
|
|
// name → sysinfo name
|
|
|
|
cpu: "cpu",
|
2022-01-31 03:05:12 +00:00
|
|
|
meta: this.sym_meta
|
2022-01-30 00:51:28 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
is_valid_table(name) {
|
|
|
|
return Object.keys(this.allowed_tables).includes(name);
|
|
|
|
}
|
|
|
|
|
2022-01-31 03:05:12 +00:00
|
|
|
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(),
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2022-01-30 00:51:28 +00:00
|
|
|
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.`);
|
|
|
|
|
|
|
|
if(!this.is_valid_table(name)) {
|
|
|
|
l.warn(`Unrecognised table '${name}' requested, returning null`);
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2022-01-31 03:05:12 +00:00
|
|
|
let name_translated = this.allowed_tables[name];
|
|
|
|
if(name_translated === this.sym_meta)
|
|
|
|
return await this.make_table_meta();
|
|
|
|
|
|
|
|
return await sysinfo[name_translated]();
|
2022-01-30 00:51:28 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default InfoBroker;
|