@yamanzyan/monitorx 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js ADDED
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+ import net from "node:net";
3
+ import { commands } from "./cli/commands.js";
4
+ import { handleResponse } from "./cli/data-handler.js";
5
+ import { printHelp } from "./cli/help.js";
6
+ import logger from "./logger.js";
7
+ import { SOCKET_PATH } from "./protocol.js";
8
+ function connect() {
9
+ return new Promise((resolve, reject) => {
10
+ const client = net.createConnection(SOCKET_PATH, () => resolve(client));
11
+ client.on("error", reject);
12
+ });
13
+ }
14
+ // --- Main ---
15
+ const [, , command, arg1, ...args] = process.argv;
16
+ if (command === "help") {
17
+ printHelp(arg1);
18
+ process.exit(0);
19
+ }
20
+ if (arg1 && arg1.includes("-")) {
21
+ logger.error("Invalid argument:", arg1);
22
+ logger.info("Arguments cannot contain dashes. Please provide a process name or id.");
23
+ process.exit(1);
24
+ }
25
+ try {
26
+ const client = await connect();
27
+ client.on("data", (data) => {
28
+ const message = JSON.parse(data.toString());
29
+ handleResponse(message, client);
30
+ });
31
+ const handler = commands[command];
32
+ if (handler) {
33
+ await handler(client, arg1, ...args);
34
+ }
35
+ else {
36
+ logger.error("Unknown command:", command);
37
+ client.unref();
38
+ }
39
+ }
40
+ catch (err) {
41
+ logger.error("Failed to connect to daemon. Is it running?");
42
+ }
43
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAmB,WAAW,EAAE,MAAM,eAAe,CAAC;AAE7D,SAAS,OAAO;IACf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACxE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,eAAe;AAEf,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAElD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,IAAI,CAAC,CAAC;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,CAAC,IAAI,CACV,uEAAuE,CACvE,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,IAAI,CAAC;IACJ,MAAM,MAAM,GAAG,MAAM,OAAO,EAAE,CAAC;IAE/B,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1B,MAAM,OAAO,GAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACP,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;AACF,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACd,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/daemon.js ADDED
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env node
2
+ import fs from "node:fs";
3
+ import net from "node:net";
4
+ import { spawn, fork } from "node:child_process";
5
+ import { createHandler } from "./handlers.js";
6
+ import { ProcessManager } from "./process-manager.js";
7
+ import { MONITORX_PATH, SOCKET_PATH } from "./protocol.js";
8
+ const DAEMONIZE_ARG = "--daemonize";
9
+ const IS_WORKER_ARG = "--is-worker";
10
+ fs.mkdirSync(MONITORX_PATH, { recursive: true });
11
+ if (process.argv.includes(DAEMONIZE_ARG)) {
12
+ if (await isDaemonRunning()) {
13
+ process.exit(0);
14
+ }
15
+ const child = spawn(process.execPath, [
16
+ process.argv[1],
17
+ ...process.argv.slice(2).filter((arg) => arg !== DAEMONIZE_ARG),
18
+ ], {
19
+ detached: true,
20
+ stdio: "ignore",
21
+ });
22
+ child.unref();
23
+ process.exit(0);
24
+ }
25
+ if (process.argv.includes(IS_WORKER_ARG)) {
26
+ startWorker();
27
+ }
28
+ else {
29
+ if (await isDaemonRunning()) {
30
+ console.log("monitorx daemon is already running");
31
+ process.exit(0);
32
+ }
33
+ startWatcher();
34
+ }
35
+ function isDaemonRunning() {
36
+ if (!fs.existsSync(SOCKET_PATH)) {
37
+ return Promise.resolve(false);
38
+ }
39
+ return new Promise((resolve) => {
40
+ const socket = net.createConnection(SOCKET_PATH);
41
+ const cleanup = () => socket.destroy();
42
+ socket.once("connect", () => {
43
+ cleanup();
44
+ resolve(true);
45
+ });
46
+ socket.once("error", () => {
47
+ cleanup();
48
+ try {
49
+ fs.unlinkSync(SOCKET_PATH);
50
+ }
51
+ catch {
52
+ // Another process may have removed the stale socket first.
53
+ }
54
+ resolve(false);
55
+ });
56
+ });
57
+ }
58
+ function startWatcher() {
59
+ let worker = null;
60
+ let shuttingDown = false;
61
+ function spawnWorker() {
62
+ if (shuttingDown)
63
+ return;
64
+ worker = fork(process.argv[1], [...process.argv.slice(2), IS_WORKER_ARG], {
65
+ stdio: "inherit",
66
+ });
67
+ worker.on("exit", (code) => {
68
+ if (!shuttingDown && code !== 0) {
69
+ console.error(`Worker crashed with code ${code}. Restarting...`);
70
+ setTimeout(spawnWorker, 1000);
71
+ }
72
+ });
73
+ }
74
+ spawnWorker();
75
+ function shutdown() {
76
+ shuttingDown = true;
77
+ if (worker) {
78
+ worker.kill();
79
+ }
80
+ process.exit(0);
81
+ }
82
+ process.on("SIGINT", shutdown);
83
+ process.on("SIGTERM", shutdown);
84
+ }
85
+ function startWorker() {
86
+ if (fs.existsSync(SOCKET_PATH)) {
87
+ fs.unlinkSync(SOCKET_PATH);
88
+ }
89
+ const processManager = new ProcessManager();
90
+ const handle = createHandler(processManager);
91
+ // Restore processes from previous state (e.g., after a crash)
92
+ processManager.restore();
93
+ const server = net.createServer((socket) => {
94
+ let buf = "";
95
+ socket.on("data", (chunk) => {
96
+ buf += chunk.toString();
97
+ const lines = buf.split("\n");
98
+ buf = lines.pop();
99
+ for (const line of lines) {
100
+ if (line.trim()) {
101
+ const message = JSON.parse(line);
102
+ handle(message, socket);
103
+ }
104
+ }
105
+ });
106
+ });
107
+ server.listen(SOCKET_PATH, () => {
108
+ // Don't log when daemonized
109
+ });
110
+ function shutdown() {
111
+ processManager.sync();
112
+ processManager.killAll();
113
+ server.close(() => {
114
+ if (fs.existsSync(SOCKET_PATH)) {
115
+ fs.unlinkSync(SOCKET_PATH);
116
+ }
117
+ process.exit(0);
118
+ });
119
+ }
120
+ process.on("SIGINT", shutdown);
121
+ process.on("SIGTERM", shutdown);
122
+ }
123
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import net from "node:net";
2
+ import { ProcessManager } from "./process-manager.js";
3
+ import { DaemonMessage } from "./protocol.js";
4
+ export declare function createHandler(processManager: ProcessManager): (message: DaemonMessage, socket: net.Socket) => void;
@@ -0,0 +1,131 @@
1
+ import { MessageType } from "./protocol.js";
2
+ export function createHandler(processManager) {
3
+ const handlers = {
4
+ [MessageType.START](message, socket) {
5
+ if (message.type === MessageType.START) {
6
+ const hasIds = message.ids && message.ids.length > 0;
7
+ const hasProcesses = message.processes.length > 0;
8
+ if (hasIds) {
9
+ // Existing processes found — restart them
10
+ processManager.start(hasProcesses
11
+ ? message.processes[0]
12
+ : { name: "", script: "" }, message.cwd, message.ids);
13
+ }
14
+ else if (hasProcesses) {
15
+ // No existing processes — start fresh from config/script
16
+ for (const proc of message.processes) {
17
+ processManager.start(proc, message.cwd, [], message.byScript);
18
+ }
19
+ }
20
+ else {
21
+ // Nothing to start
22
+ socket.write(JSON.stringify({
23
+ type: MessageType.ERROR,
24
+ message: `No process found${message.name ? ` with name: ${message.name}` : ""}`,
25
+ }));
26
+ return;
27
+ }
28
+ const list = processManager.list();
29
+ socket.write(JSON.stringify({ type: MessageType.LS, data: list }));
30
+ }
31
+ },
32
+ [MessageType.LOGS](message, socket) {
33
+ if (message.type === MessageType.LOGS) {
34
+ const state = processManager.subscribe(message.ids, socket);
35
+ if (!state) {
36
+ socket.write(JSON.stringify({
37
+ type: MessageType.ERROR,
38
+ message: `No process found for ids: ${message.ids}`,
39
+ }));
40
+ }
41
+ }
42
+ },
43
+ [MessageType.STOP](message, socket) {
44
+ if (message.type === MessageType.STOP) {
45
+ processManager.stop(message.ids);
46
+ const list = processManager.list();
47
+ socket.write(JSON.stringify({ type: MessageType.LS, data: list }));
48
+ }
49
+ },
50
+ [MessageType.RESTART](message, socket) {
51
+ if (message.type === MessageType.RESTART) {
52
+ if (message.ids.length === 0) {
53
+ socket.write(JSON.stringify({
54
+ type: MessageType.ERROR,
55
+ message: "Restart requires at least one id",
56
+ }));
57
+ return;
58
+ }
59
+ const restarted = processManager.restart(message.ids);
60
+ if (!restarted) {
61
+ socket.write(JSON.stringify({
62
+ type: MessageType.ERROR,
63
+ message: `No process found for ids: ${message.ids}`,
64
+ }));
65
+ }
66
+ else {
67
+ const list = processManager.list();
68
+ socket.write(JSON.stringify({ type: MessageType.LS, data: list }));
69
+ }
70
+ }
71
+ },
72
+ [MessageType.DELETE](message, socket) {
73
+ if (message.type === MessageType.DELETE) {
74
+ const deleted = processManager.delete(message.ids);
75
+ if (!deleted) {
76
+ socket.write(JSON.stringify({
77
+ type: MessageType.ERROR,
78
+ message: `No process found for ids: ${message.ids}`,
79
+ }));
80
+ }
81
+ else {
82
+ const list = processManager.list();
83
+ socket.write(JSON.stringify({ type: MessageType.LS, data: list }));
84
+ }
85
+ }
86
+ },
87
+ [MessageType.LS]: listHandler,
88
+ [MessageType.LIST]: listHandler,
89
+ };
90
+ function listHandler(_message, socket) {
91
+ const list = processManager.list();
92
+ socket.write(JSON.stringify({ type: MessageType.LS, data: list }));
93
+ }
94
+ function getIds(message) {
95
+ if (message.type === MessageType.START) {
96
+ // Case 4: start by name — resolve name to ids of stopped processes
97
+ if (message.name) {
98
+ const ids = processManager.getIdsByName(message.name);
99
+ return ids ? Array.from(ids) : [];
100
+ }
101
+ // Case 1: start from config — check if processes already exist
102
+ if (!message.byScript && message.processes.length > 0) {
103
+ const existingProcessIds = processManager.getIdsByName(message.processes[0].name);
104
+ return existingProcessIds ? Array.from(existingProcessIds) : [];
105
+ }
106
+ return [];
107
+ }
108
+ if ("id" in message && typeof message.id === "number") {
109
+ return [message.id];
110
+ }
111
+ else if ("name" in message && typeof message.name === "string") {
112
+ const ids = processManager.getIdsByName(message.name);
113
+ return ids ? Array.from(ids) : [];
114
+ }
115
+ return [];
116
+ }
117
+ return function handle(message, socket) {
118
+ const handler = handlers[message.type];
119
+ if (handler) {
120
+ const ids = getIds(message);
121
+ handler({
122
+ ...message,
123
+ ids: ids.length > 0 ? ids : [],
124
+ }, socket);
125
+ }
126
+ else {
127
+ console.log("Unknown message type:", message.type);
128
+ }
129
+ };
130
+ }
131
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ declare const logger: import("omnilogs").FlexibleLogger;
2
+ export default logger;
package/dist/logger.js ADDED
@@ -0,0 +1,12 @@
1
+ import { createLogger } from 'omnilogs';
2
+ const logger = createLogger({
3
+ serviceName: 'monitorx',
4
+ level: 'info',
5
+ transports: {
6
+ console: {
7
+ type: 'compact'
8
+ },
9
+ }
10
+ });
11
+ export default logger;
12
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,GAAG,YAAY,CAAC;IAC3B,WAAW,EAAE,UAAU;IACvB,KAAK,EAAE,MAAM;IACb,UAAU,EAAE;QACX,OAAO,EAAE;YACR,IAAI,EAAE,SAAS;SACf;KACD;CACD,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { BufferList } from "bl";
2
+ import { ChildProcess } from "node:child_process";
3
+ import net from "node:net";
4
+ import { LsMessageData, ProcessConfig } from "./protocol.js";
5
+ interface ProcessState {
6
+ id: number;
7
+ child: ChildProcess;
8
+ buffer: BufferList;
9
+ subscribers: Set<net.Socket>;
10
+ startTime?: number;
11
+ status?: "running" | "stopped" | "errored";
12
+ name: string;
13
+ script: string;
14
+ cwd: string;
15
+ mode: "fork" | "cluster";
16
+ instances?: number;
17
+ workerId?: number;
18
+ }
19
+ export declare class ProcessManager {
20
+ private processes;
21
+ private nameToId;
22
+ private idCounter;
23
+ constructor();
24
+ getIdsByName(name: string): number[];
25
+ start(proc: ProcessConfig, cwd: string, ids: number[], byScript?: boolean): void;
26
+ private _doFork;
27
+ private _forkWorker;
28
+ private _spawnProcess;
29
+ stop(ids: number[]): boolean;
30
+ restart(ids: number[]): boolean;
31
+ subscribe(ids: number[], socket: net.Socket): ProcessState | null | undefined;
32
+ list(): LsMessageData[];
33
+ has(ids: number[]): boolean;
34
+ killAll(): void;
35
+ delete(ids: number[]): boolean;
36
+ sync(): void;
37
+ restore(): void;
38
+ private _notify;
39
+ private _attachOutputHandlers;
40
+ private _getProcessResourceUsage;
41
+ }
42
+ export {};