pandora
Version:
A powerful and lightweight application manager for Node.js applications powered by TypeScript.
84 lines • 3.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const pandora_metrics_1 = require("pandora-metrics");
const GlobalConfigProcessor_1 = require("../universal/GlobalConfigProcessor");
const pandora_env_1 = require("pandora-env");
const const_1 = require("../const");
const LoggerBroker_1 = require("../universal/LoggerBroker");
const pandora_dollar_1 = require("pandora-dollar");
const debug = require('debug')('pandora:MonitorManager');
const pandoraConsoleLogger = pandora_dollar_1.getPandoraConsoleLogger();
class MonitorManager {
static injectProcessMonitor() {
if (MonitorManager.injected) {
return;
}
const globalConfigProcessor = GlobalConfigProcessor_1.GlobalConfigProcessor.getInstance();
const globalConfig = globalConfigProcessor.getAllProperties();
const hooks = globalConfig['hook'];
// init environment
if (!pandora_env_1.EnvironmentUtil.getInstance().isReady()) {
// cast PANDORA_APPLICATION to type ProcessRepresentation, need processName
let processRepresentation = {};
try {
processRepresentation = JSON.parse(process.env[const_1.PANDORA_APPLICATION]);
}
catch (err) {
// ignore
}
pandora_env_1.EnvironmentUtil.getInstance().setCurrentEnvironment(new globalConfig['environment']({
appDir: processRepresentation.appDir,
appName: processRepresentation.appName,
processName: processRepresentation.processName,
pandoraLogsDir: LoggerBroker_1.getPandoraLogsDir()
}));
}
// init metrics client
let ClientCls = globalConfig['metricsClient'];
let client = ClientCls.getInstance();
pandora_metrics_1.MetricsClientUtil.setMetricsClient(client);
// support old version
global[pandora_metrics_1.MetricsConstants.GLOBAL_METRICS_KEY] = client;
// inject patch
let traceIndicator = new pandora_metrics_1.TraceIndicator();
traceIndicator.initialize();
/**
* hooks: {
* logger: Hooks.logger
* }
*/
for (const hookName in hooks) {
if (hooks[hookName] && hooks[hookName].enabled) {
try {
let PatcherCls = hooks[hookName].target;
let patcher = new PatcherCls(hooks[hookName]['initConfig']);
patcher.run();
debug(`Patcher(${process.pid}): ${hookName} hook enabled`);
}
catch (err) {
pandoraConsoleLogger.log(`Patcher(${process.pid}): enable ${hookName} hook went wrong, ${err.message}`);
}
}
else {
pandoraConsoleLogger.log(`Patcher(${process.pid}): ${hookName} hook disabled`);
}
}
// init indicators
[
new pandora_metrics_1.BaseInfoIndicator(),
new pandora_metrics_1.NodeIndicator(),
new pandora_metrics_1.ProcessIndicator(),
new pandora_metrics_1.ErrorIndicator(),
].forEach((ins) => {
ins.initialize();
});
// init metrics
client.register('node', pandora_metrics_1.MetricName.build('node.v8').tagged({
pid: process.pid
}), new pandora_metrics_1.V8GaugeSet());
MonitorManager.injected = true;
}
}
MonitorManager.injected = false;
exports.MonitorManager = MonitorManager;
//# sourceMappingURL=MonitorManager.js.map