ksmf
Version:
Modular Microframework for create minimalistic CLI/Web application or REST API
110 lines (102 loc) • 3.88 kB
JavaScript
/**
* @author Antonio Membrides Espinosa
* @email tonykssa@gmail.com
* @date 22/04/2020
* @copyright Copyright (c) 2020-2030
* @license GPL
* @version 1.0
**/
class Manager {
/**
* @type {Object|null}
*/
helper;
/**
* @type {Console|null}
*/
logger;
constructor(cfg) {
this.helper = null;
this.logger = null;
this.startUsage = process?.cpuUsage && process.cpuUsage();
this.configure(cfg);
}
configure(cfg) {
this.logger = cfg?.logger || this.logger;
}
/**
* @description Set options on Initialize Configuration Event
* @param {Object} cfg
* @param {Object} app
*/
async onInitConfig(cfg, app) {
this.app = app || await this.helper?.get('app');
this.app?.subscribe(this, 'onStart');
this.app?.subscribe(this, 'onError');
}
/**
* @description KsMf Wrapper
* @param {Object} info
*/
async onStart(info = {}) {
const app = await this.helper?.get('app');
const logger = await this.helper?.get('logger') || this.logger;
const routes = app?.server?.routes instanceof Function && app.server.routes();
logger?.info({
src: "KSMF:Monitor:onStart",
message: info?.message,
data: {
url: info?.url,
public: info?.public,
static: info?.static,
routes
}
});
}
/**
* @description error handler
* @param {Object} error
*/
async onError(error) {
const logger = await this.helper?.get('logger') || this.logger;
(logger?.error instanceof Function) && logger?.error({
src: "KSMF:Monitor:onError",
message: error?.message || error,
stack: error?.stack
});
}
/**
* @description get platform information
* @returns {Object} info
*/
info() {
let cpuUsage = (process.cpuUsage instanceof Function) && process.cpuUsage(this.startUsage);
let memory = (process.constrainedMemory instanceof Function) && process.constrainedMemory();
let memuse = (process.memoryUsage instanceof Function) && process.memoryUsage();
return {
rsc_memory: memory ?? "none",
rsc_memory_buffers: memuse?.arrayBuffers ?? "none",
rsc_memory_external: memuse?.external ?? "none",
rsc_memory_heap_total: memuse?.heapTotal ?? "none",
rsc_memory_heap_used: memuse?.heapUsed ?? "none",
rsc_memory_heap_rss: memuse?.rss ?? "none",
rsc_cpu_usage_system: cpuUsage?.system ? cpuUsage?.system / 1000000 : "none",
rsc_cpu_usage_user: cpuUsage?.user ? cpuUsage?.user / 1000000 : "none",
prd_connected: process.connected ?? "none",
prd_pid: process.pid ?? "none",
host_arch: process.config?.variables?.host_arch ?? process.arch ?? "none",
host_platform: process.platform,
host_target_arch: process.config?.variables?.target_arch ?? "none",
node_openssl_use: process.config?.variables?.node_use_openssl ?? "none",
node_openssl_version: process?.versions?.openssl ?? "none",
node_version: process?.versions?.node || process?.version || "none",
node_modules: process.versions?.modules ?? "none",
node_lts: process.release?.lts ?? "none",
node_name: process.release?.name ?? "none",
v8_use_snapshot: process.config?.variables?.v8_use_snapshot ?? "none",
v8_version: process.versions?.v8 ?? "none",
env: process.env
};
}
}
module.exports = Manager;