UNPKG

pm2-tls-logger

Version:

A simple and efficient PM2 module that forwards logs to Typesense Server

81 lines (80 loc) 3.72 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const io_1 = __importDefault(require("@pm2/io")); const pm2_1 = __importDefault(require("pm2")); const logger_1 = require("./logger"); const lib_1 = require("./lib"); const METRICS = io_1.default.metric({ name: "Attached Processes" }); const TRANSPORTS = {}; let PM2_CONFIG = {}; function routeLog(packet, level = "info") { const processName = packet.process.name.trim(); if (processName === "pm2-tls-logger") { return; } if ((processName === PM2_CONFIG.module_name) && level === "error") return; if (!TRANSPORTS[processName]) { const systemName = PM2_CONFIG.hostname; const appName = processName; TRANSPORTS[processName] = new logger_1.Logger(systemName, appName); METRICS.set(Object.keys(TRANSPORTS).length); console.log(`Created new logger for process: ${processName}`); } return TRANSPORTS[processName].log(level, packet.data); } io_1.default.init().initModule(false, (error) => { const isInitError = (0, lib_1.handleInitError)(error); if (isInitError) return; const { configIsValid, moduleConfig } = (0, lib_1.handleModuleConfig)(io_1.default); if (!configIsValid) return; PM2_CONFIG = moduleConfig; PM2_CONFIG.hostname = (0, lib_1.getHostName)(moduleConfig); pm2_1.default.connect(() => { console.log(` Started and forwarding log outputs to ${PM2_CONFIG.host}:${PM2_CONFIG.port} as ${`system name '${PM2_CONFIG.hostname}'`}.`); pm2_1.default.launchBus((busError, bus) => { if (busError) { console.error("Error launching pm2 bus:", busError); return; } bus.on("log:out", (packet) => routeLog(packet, "info")); bus.on("log:err", (packet) => routeLog(packet, "error")); bus.on("process:event", (packet) => { if (packet.event === "exit" && TRANSPORTS[packet.process.name]) { delete TRANSPORTS[packet.process.name]; METRICS.set(Object.keys(TRANSPORTS).length); console.log(`Closed transport pipeline for exiting process '${packet.process.name}'.`); } }); }); }); }); io_1.default.action("show-attached-processes", (callback) => __awaiter(void 0, void 0, void 0, function* () { const total = Object.keys(TRANSPORTS).length; if (total === 0) { console.log("[Attached Processes] Found no attached processes, a process will be attached when it logs for the first time."); return callback({ success: true }); } console.log(`[Attached Processes] Showing ${total} attached processes:`); for (const processName in TRANSPORTS) { console.log(`\t- ${processName}`); } return callback({ success: true }); }));