Remove Komodo backend in favor of native hosts
This commit is contained in:
@@ -1,77 +0,0 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import type { RequestHandler } from './$types';
|
||||
import { getServer } from '$lib/server/fleet/servers.js';
|
||||
import { config } from '$lib/server/config.js';
|
||||
import { tcpProbeAll } from '$lib/server/integrations/netProbe.js';
|
||||
|
||||
/**
|
||||
* Multi-target TCP reachability probe. Fires parallel connect attempts at a
|
||||
* fixed matrix of candidate hosts + the configured KOMODO_ADDRESS host, so
|
||||
* we can see at a glance which network paths reach anything and where
|
||||
* packets die (DNS, routing, or refused-at-port).
|
||||
*/
|
||||
export const POST: RequestHandler = async ({ params }) => {
|
||||
const name = params.name;
|
||||
if (!name) return json({ ok: false, error: 'missing server name' }, { status: 400 });
|
||||
|
||||
const row = getServer(name);
|
||||
if (!row) return json({ ok: false, error: `unknown server: ${name}` }, { status: 404 });
|
||||
|
||||
// Parse the configured Komodo URL to extract host+port.
|
||||
let komodoHost: string | null = null;
|
||||
let komodoPort: number | null = null;
|
||||
if (config.komodo.address) {
|
||||
try {
|
||||
const u = new URL(config.komodo.address);
|
||||
komodoHost = u.hostname;
|
||||
komodoPort = u.port ? Number.parseInt(u.port, 10) : u.protocol === 'https:' ? 443 : 80;
|
||||
} catch {
|
||||
/* leave null */
|
||||
}
|
||||
}
|
||||
|
||||
const probePort = komodoPort ?? 9120;
|
||||
|
||||
// Build the trial matrix. Every trial hits the same target port (the
|
||||
// Komodo port) via a different network path, so we can see which paths
|
||||
// reach the same service.
|
||||
const trials: Array<{ label: string; host: string; port: number }> = [
|
||||
{ label: `127.0.0.1:${probePort} (container loopback)`, host: '127.0.0.1', port: probePort },
|
||||
{ label: `host.docker.internal:${probePort} (bridge gateway alias)`, host: 'host.docker.internal', port: probePort },
|
||||
{ label: `172.17.0.1:${probePort} (default bridge gateway)`, host: '172.17.0.1', port: probePort }
|
||||
];
|
||||
|
||||
if (komodoHost && !trials.some((t) => t.host === komodoHost)) {
|
||||
trials.push({
|
||||
label: `${komodoHost}:${probePort} (KOMODO_ADDRESS)`,
|
||||
host: komodoHost,
|
||||
port: probePort
|
||||
});
|
||||
}
|
||||
|
||||
// RCON's default host is worth testing too — even though RCON is UDP,
|
||||
// if TCP to the same host also fails, it's a routing/firewall issue,
|
||||
// not a UDP-specific one.
|
||||
const rconHost = row.rcon_host ?? config.rcon.host;
|
||||
if (rconHost && !trials.some((t) => t.host === rconHost)) {
|
||||
trials.push({
|
||||
label: `${rconHost}:${probePort} (RCON_HOST)`,
|
||||
host: rconHost,
|
||||
port: probePort
|
||||
});
|
||||
}
|
||||
|
||||
const results = await tcpProbeAll(trials, config.httpTimeoutMs);
|
||||
|
||||
return json({
|
||||
ok: true,
|
||||
config: {
|
||||
komodoAddress: config.komodo.address || null,
|
||||
komodoHost,
|
||||
komodoPort,
|
||||
rconHost,
|
||||
probeTimeoutMs: config.httpTimeoutMs
|
||||
},
|
||||
results
|
||||
});
|
||||
};
|
||||
@@ -1,27 +0,0 @@
|
||||
import { json } from '@sveltejs/kit';
|
||||
import type { RequestHandler } from './$types';
|
||||
import { komodoResolvePortDetailed } from '$lib/server/integrations/komodo.js';
|
||||
import { getServer, setServerField } from '$lib/server/fleet/servers.js';
|
||||
|
||||
/**
|
||||
* Trigger a fresh Komodo GetDeployment lookup for a specific server and
|
||||
* return the structured result — including a snippet of the response so
|
||||
* the UI can render "here's where we found the port" (or "here's what
|
||||
* Komodo returned; extend extractUdpPort for this shape").
|
||||
*
|
||||
* On success, the resolved port is written to servers.game_port so the
|
||||
* next RCON attempt uses it without waiting for another sweep tick.
|
||||
*/
|
||||
export const POST: RequestHandler = async ({ params }) => {
|
||||
const name = params.name;
|
||||
if (!name) return json({ ok: false, reason: 'no-name', detail: 'missing server name' }, { status: 400 });
|
||||
|
||||
const row = getServer(name);
|
||||
if (!row) return json({ ok: false, reason: 'no-name', detail: `unknown server: ${name}` }, { status: 404 });
|
||||
|
||||
const result = await komodoResolvePortDetailed(name);
|
||||
if (result.ok) {
|
||||
setServerField(name, 'game_port', result.port);
|
||||
}
|
||||
return json(result);
|
||||
};
|
||||
Reference in New Issue
Block a user