pid1 0.0.0-dev.0 → 0.0.0-dev.3
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/README.md +45 -0
- package/dist/cli.mjs +1147 -100
- package/dist/cli.mjs.map +1 -1
- package/dist/client.d.mts +169 -2
- package/dist/client.d.mts.map +1 -0
- package/dist/client.mjs +6 -3
- package/dist/client.mjs.map +1 -1
- package/dist/index.d.mts +226 -32
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +9 -4
- package/dist/index.mjs.map +1 -0
- package/dist/logger-BN9KoHBY.mjs +926 -0
- package/dist/logger-BN9KoHBY.mjs.map +1 -0
- package/dist/task-list-zO8UZG5r.d.mts +231 -0
- package/dist/task-list-zO8UZG5r.d.mts.map +1 -0
- package/package.json +18 -19
- package/src/api/client.ts +7 -14
- package/src/api/contract.ts +117 -0
- package/src/api/server.ts +171 -57
- package/src/cli.ts +444 -150
- package/src/cron-process.ts +255 -0
- package/src/env-manager.ts +237 -0
- package/src/index.ts +12 -14
- package/src/lazy-process.ts +198 -0
- package/src/logger.ts +90 -137
- package/src/manager.ts +859 -0
- package/src/restarting-process.ts +397 -0
- package/src/task-list.ts +236 -0
- package/dist/client-Bdt88RU-.d.mts +0 -217
- package/dist/client-Bdt88RU-.d.mts.map +0 -1
- package/dist/config-BgRb4pSG.mjs +0 -186
- package/dist/config-BgRb4pSG.mjs.map +0 -1
- package/dist/config.d.mts +0 -84
- package/dist/config.d.mts.map +0 -1
- package/dist/config.mjs +0 -3
- package/dist/process-manager-gO56266Q.mjs +0 -643
- package/dist/process-manager-gO56266Q.mjs.map +0 -1
- package/src/api/router.ts +0 -150
- package/src/config.ts +0 -89
- package/src/env.ts +0 -74
- package/src/exec.ts +0 -85
- package/src/process-manager.ts +0 -632
package/src/api/server.ts
CHANGED
|
@@ -1,66 +1,180 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
1
|
+
import { implement } from "@orpc/server";
|
|
2
|
+
import {
|
|
3
|
+
api,
|
|
4
|
+
type RestartingProcessInfo,
|
|
5
|
+
type CronProcessInfo,
|
|
6
|
+
type TaskEntryInfo,
|
|
7
|
+
type ManagerStatus,
|
|
8
|
+
} from "./contract.ts";
|
|
9
|
+
import type { Manager } from "../manager.ts";
|
|
10
|
+
import type { RestartingProcess } from "../restarting-process.ts";
|
|
11
|
+
import type { CronProcess } from "../cron-process.ts";
|
|
12
|
+
|
|
13
|
+
const os = implement(api).$context<{ manager: Manager }>();
|
|
14
|
+
|
|
15
|
+
// Helper to serialize a RestartingProcess to API response
|
|
16
|
+
function serializeProcess(proc: RestartingProcess): RestartingProcessInfo {
|
|
17
|
+
return {
|
|
18
|
+
name: proc.name,
|
|
19
|
+
state: proc.state,
|
|
20
|
+
restarts: proc.restarts,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Helper to serialize a CronProcess to API response
|
|
25
|
+
function serializeCron(cron: CronProcess): CronProcessInfo {
|
|
26
|
+
return {
|
|
27
|
+
name: cron.name,
|
|
28
|
+
state: cron.state,
|
|
29
|
+
runCount: cron.runCount,
|
|
30
|
+
failCount: cron.failCount,
|
|
31
|
+
nextRun: cron.nextRun?.toISOString() ?? null,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Manager handlers
|
|
36
|
+
const managerStatus = os.manager.status.handler(async ({ context }): Promise<ManagerStatus> => {
|
|
37
|
+
const manager = context.manager;
|
|
38
|
+
const taskList = manager.getTaskList();
|
|
39
|
+
return {
|
|
40
|
+
state: manager.state,
|
|
41
|
+
processCount: manager.getRestartingProcesses().size,
|
|
42
|
+
cronCount: manager.getCronProcesses().size,
|
|
43
|
+
taskCount: taskList?.tasks.length ?? 0,
|
|
44
|
+
};
|
|
45
|
+
});
|
|
29
46
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
);
|
|
47
|
+
// Processes handlers
|
|
48
|
+
const getProcess = os.processes.get.handler(async ({ input, context }) => {
|
|
49
|
+
const proc = context.manager.getProcessByTarget(input.target);
|
|
50
|
+
if (!proc) {
|
|
51
|
+
throw new Error(`Process not found: ${input.target}`);
|
|
52
|
+
}
|
|
53
|
+
return serializeProcess(proc);
|
|
54
|
+
});
|
|
33
55
|
|
|
34
|
-
|
|
56
|
+
const listProcesses = os.processes.list.handler(async ({ context }) => {
|
|
57
|
+
const processes = Array.from(context.manager.getRestartingProcesses().values());
|
|
58
|
+
return processes.map(serializeProcess);
|
|
59
|
+
});
|
|
35
60
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
});
|
|
61
|
+
const addProcess = os.processes.add.handler(async ({ input, context }) => {
|
|
62
|
+
const proc = context.manager.addProcess(input.name, input.definition);
|
|
63
|
+
return serializeProcess(proc);
|
|
64
|
+
});
|
|
41
65
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
66
|
+
const startProcess = os.processes.start.handler(async ({ input, context }) => {
|
|
67
|
+
const proc = context.manager.startProcessByTarget(input.target);
|
|
68
|
+
return serializeProcess(proc);
|
|
69
|
+
});
|
|
45
70
|
|
|
46
|
-
|
|
71
|
+
const stopProcess = os.processes.stop.handler(async ({ input, context }) => {
|
|
72
|
+
const proc = await context.manager.stopProcessByTarget(input.target);
|
|
73
|
+
return serializeProcess(proc);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
const restartProcess = os.processes.restart.handler(async ({ input, context }) => {
|
|
77
|
+
const proc = await context.manager.restartProcessByTarget(input.target, input.force);
|
|
78
|
+
return serializeProcess(proc);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const reloadProcess = os.processes.reload.handler(async ({ input, context }) => {
|
|
82
|
+
const proc = await context.manager.reloadProcessByTarget(input.target, input.definition, {
|
|
83
|
+
restartImmediately: input.restartImmediately,
|
|
47
84
|
});
|
|
85
|
+
return serializeProcess(proc);
|
|
86
|
+
});
|
|
48
87
|
|
|
49
|
-
|
|
88
|
+
const removeProcess = os.processes.remove.handler(async ({ input, context }) => {
|
|
89
|
+
await context.manager.removeProcessByTarget(input.target);
|
|
90
|
+
return { success: true };
|
|
91
|
+
});
|
|
50
92
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
93
|
+
// Crons handlers
|
|
94
|
+
const getCron = os.crons.get.handler(async ({ input, context }) => {
|
|
95
|
+
const cron = context.manager.getCronByTarget(input.target);
|
|
96
|
+
if (!cron) {
|
|
97
|
+
throw new Error(`Cron not found: ${input.target}`);
|
|
98
|
+
}
|
|
99
|
+
return serializeCron(cron);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const listCrons = os.crons.list.handler(async ({ context }) => {
|
|
103
|
+
const crons = Array.from(context.manager.getCronProcesses().values());
|
|
104
|
+
return crons.map(serializeCron);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
const triggerCron = os.crons.trigger.handler(async ({ input, context }) => {
|
|
108
|
+
const cron = await context.manager.triggerCronByTarget(input.target);
|
|
109
|
+
return serializeCron(cron);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const startCron = os.crons.start.handler(async ({ input, context }) => {
|
|
113
|
+
const cron = context.manager.startCronByTarget(input.target);
|
|
114
|
+
return serializeCron(cron);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
const stopCron = os.crons.stop.handler(async ({ input, context }) => {
|
|
118
|
+
const cron = await context.manager.stopCronByTarget(input.target);
|
|
119
|
+
return serializeCron(cron);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
// Tasks handlers
|
|
123
|
+
const getTask = os.tasks.get.handler(async ({ input, context }) => {
|
|
124
|
+
const task = context.manager.getTaskByTarget(input.target);
|
|
125
|
+
if (!task) {
|
|
126
|
+
throw new Error(`Task not found: ${input.target}`);
|
|
127
|
+
}
|
|
128
|
+
return task as TaskEntryInfo;
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
const listTasks = os.tasks.list.handler(async ({ context }) => {
|
|
132
|
+
const taskList = context.manager.getTaskList();
|
|
133
|
+
if (!taskList) {
|
|
134
|
+
return [];
|
|
135
|
+
}
|
|
136
|
+
return taskList.tasks.map((t) => ({
|
|
137
|
+
id: t.id,
|
|
138
|
+
state: t.state,
|
|
139
|
+
processNames: t.processes.map((p) => p.name),
|
|
140
|
+
})) as TaskEntryInfo[];
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
const addTask = os.tasks.add.handler(async ({ input, context }) => {
|
|
144
|
+
const task = context.manager.addTask(input.name, input.definition);
|
|
145
|
+
return task as TaskEntryInfo;
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
const removeTask = os.tasks.remove.handler(async ({ input, context }) => {
|
|
149
|
+
const task = context.manager.removeTaskByTarget(input.target);
|
|
150
|
+
return task as TaskEntryInfo;
|
|
151
|
+
});
|
|
65
152
|
|
|
66
|
-
export
|
|
153
|
+
export const router = os.router({
|
|
154
|
+
manager: {
|
|
155
|
+
status: managerStatus,
|
|
156
|
+
},
|
|
157
|
+
processes: {
|
|
158
|
+
add: addProcess,
|
|
159
|
+
get: getProcess,
|
|
160
|
+
list: listProcesses,
|
|
161
|
+
start: startProcess,
|
|
162
|
+
stop: stopProcess,
|
|
163
|
+
restart: restartProcess,
|
|
164
|
+
reload: reloadProcess,
|
|
165
|
+
remove: removeProcess,
|
|
166
|
+
},
|
|
167
|
+
crons: {
|
|
168
|
+
get: getCron,
|
|
169
|
+
list: listCrons,
|
|
170
|
+
trigger: triggerCron,
|
|
171
|
+
start: startCron,
|
|
172
|
+
stop: stopCron,
|
|
173
|
+
},
|
|
174
|
+
tasks: {
|
|
175
|
+
get: getTask,
|
|
176
|
+
list: listTasks,
|
|
177
|
+
add: addTask,
|
|
178
|
+
remove: removeTask,
|
|
179
|
+
},
|
|
180
|
+
});
|