|
1 | 1 | import { z } from "zod"; |
2 | 2 | import { createTRPCRouter, publicProcedure } from "~/server/api/trpc"; |
3 | 3 | import { getDatabase } from "~/server/database"; |
4 | | -import { exec } from "child_process"; |
5 | | -import { promisify } from "util"; |
6 | | -import { getSSHExecutionService } from "~/server/ssh-execution-service"; |
7 | | -import type { Server } from "~/types/server"; |
8 | | - |
9 | | -const execAsync = promisify(exec); |
10 | | - |
11 | | -// Helper function to check local container statuses |
12 | | -async function getLocalContainerStatuses(containerIds: string[]): Promise<Record<string, 'running' | 'stopped' | 'unknown'>> { |
13 | | - try { |
14 | | - const { stdout } = await execAsync('pct list'); |
15 | | - const statusMap: Record<string, 'running' | 'stopped' | 'unknown'> = {}; |
16 | | - |
17 | | - // Parse pct list output |
18 | | - const lines = stdout.trim().split('\n'); |
19 | | - const dataLines = lines.slice(1); // Skip header |
20 | | - |
21 | | - for (const line of dataLines) { |
22 | | - const parts = line.trim().split(/\s+/); |
23 | | - if (parts.length >= 2) { |
24 | | - const vmid = parts[0]; |
25 | | - const status = parts[1]; |
26 | | - |
27 | | - if (vmid && containerIds.includes(vmid)) { |
28 | | - statusMap[vmid] = status === 'running' ? 'running' : 'stopped'; |
29 | | - } |
30 | | - } |
31 | | - } |
32 | | - |
33 | | - // Set unknown for containers not found in pct list |
34 | | - for (const containerId of containerIds) { |
35 | | - if (!(containerId in statusMap)) { |
36 | | - statusMap[containerId] = 'unknown'; |
37 | | - } |
38 | | - } |
39 | | - |
40 | | - return statusMap; |
41 | | - } catch (error) { |
42 | | - console.error('Error checking local container statuses:', error); |
43 | | - // Return unknown for all containers on error |
44 | | - const statusMap: Record<string, 'running' | 'stopped' | 'unknown'> = {}; |
45 | | - for (const containerId of containerIds) { |
46 | | - statusMap[containerId] = 'unknown'; |
47 | | - } |
48 | | - return statusMap; |
49 | | - } |
50 | | -} |
51 | | - |
52 | | -// Helper function to check remote container statuses (multiple containers per server) |
53 | | -async function getRemoteContainerStatuses(containerIds: string[], server: Server): Promise<Record<string, 'running' | 'stopped' | 'unknown'>> { |
54 | | - return new Promise((resolve) => { |
55 | | - const sshService = getSSHExecutionService(); |
56 | | - const statusMap: Record<string, 'running' | 'stopped' | 'unknown'> = {}; |
57 | | - |
58 | | - // Initialize all containers as unknown |
59 | | - for (const containerId of containerIds) { |
60 | | - statusMap[containerId] = 'unknown'; |
61 | | - } |
62 | | - |
63 | | - void sshService.executeCommand( |
64 | | - server, |
65 | | - 'pct list', |
66 | | - (data: string) => { |
67 | | - // Parse the output to find all containers |
68 | | - const lines = data.trim().split('\n'); |
69 | | - const dataLines = lines.slice(1); // Skip header |
70 | | - |
71 | | - for (const line of dataLines) { |
72 | | - const parts = line.trim().split(/\s+/); |
73 | | - if (parts.length >= 2) { |
74 | | - const vmid = parts[0]; |
75 | | - const status = parts[1]; |
76 | | - |
77 | | - // Check if this is one of the containers we're looking for |
78 | | - if (vmid && containerIds.includes(vmid)) { |
79 | | - statusMap[vmid] = status === 'running' ? 'running' : 'stopped'; |
80 | | - } |
81 | | - } |
82 | | - } |
83 | | - |
84 | | - resolve(statusMap); |
85 | | - }, |
86 | | - (error: string) => { |
87 | | - console.error(`Error checking remote containers on server ${server.name}:`, error); |
88 | | - resolve(statusMap); // Return the map with unknown statuses |
89 | | - }, |
90 | | - (exitCode: number) => { |
91 | | - if (exitCode !== 0) { |
92 | | - resolve(statusMap); // Return the map with unknown statuses |
93 | | - } |
94 | | - } |
95 | | - ); |
96 | | - }); |
97 | | -} |
| 4 | +// Removed unused imports |
| 5 | + |
98 | 6 |
|
99 | 7 | export const installedScriptsRouter = createTRPCRouter({ |
100 | 8 | // Get all installed scripts |
@@ -357,7 +265,7 @@ export const installedScriptsRouter = createTRPCRouter({ |
357 | 265 | (error: string) => { |
358 | 266 | console.error('Command error:', error); |
359 | 267 | }, |
360 | | - (exitCode: number) => { |
| 268 | + (_exitCode: number) => { |
361 | 269 |
|
362 | 270 | // Parse the complete output to get config file paths that contain community-script tag |
363 | 271 | const configFiles = commandOutput.split('\n') |
@@ -401,7 +309,7 @@ export const installedScriptsRouter = createTRPCRouter({ |
401 | 309 | containerId, |
402 | 310 | hostname, |
403 | 311 | configPath, |
404 | | - serverId: (server as any).id, |
| 312 | + serverId: Number((server as any).id), |
405 | 313 | serverName: (server as any).name |
406 | 314 | }; |
407 | 315 | readResolve(container); |
@@ -624,7 +532,7 @@ export const installedScriptsRouter = createTRPCRouter({ |
624 | 532 |
|
625 | 533 | // Determine which servers to check |
626 | 534 | const serversToCheck = input.serverIds |
627 | | - ? allServers.filter(s => input.serverIds!.includes((s as any).id)) |
| 535 | + ? allServers.filter((s: any) => input.serverIds!.includes(Number(s.id))) |
628 | 536 | : allServers; |
629 | 537 |
|
630 | 538 |
|
@@ -963,7 +871,7 @@ export const installedScriptsRouter = createTRPCRouter({ |
963 | 871 | (error: string) => { |
964 | 872 | reject(new Error(error)); |
965 | 873 | }, |
966 | | - (exitCode: number) => { |
| 874 | + (_exitCode: number) => { |
967 | 875 | resolve(); |
968 | 876 | } |
969 | 877 | ); |
@@ -998,7 +906,7 @@ export const installedScriptsRouter = createTRPCRouter({ |
998 | 906 | ); |
999 | 907 | }); |
1000 | 908 | } |
1001 | | - } catch (error) { |
| 909 | + } catch (_error) { |
1002 | 910 | // If status check fails, continue with destroy attempt |
1003 | 911 | // The destroy command will handle the error appropriately |
1004 | 912 | } |
|
0 commit comments