feat: improve manager recovery and expose server pid in dashboard

This commit is contained in:
2026-07-21 20:45:40 +02:00
parent 268734275a
commit 8354d94cbc
6 changed files with 72 additions and 9 deletions
+1 -1
View File
@@ -19,7 +19,7 @@ export interface Wrapper {
export interface Server {
id: string; name: string; status: string; wrapperId: string; port: number;
queryPort: number; players: number; maxPlayers: number; created: number;
pid?: number; queryPort: number; players: number; maxPlayers: number; created: number;
startedAt?: number; emptySince?: number; alive?: boolean; started?: number;
}
+22 -3
View File
@@ -5,8 +5,27 @@ import { PageState } from "../components/PageState";
import { StatusBadge } from "../components/StatusBadge";
const date = (value?: number) => value ? new Date(value).toLocaleString("de-DE") : "";
export function ServerDetail() {
const { id = "" } = useParams(); const [item, setItem] = useState<Server>(); const [error, setError] = useState<Error>();
useEffect(() => { api.server(id).then(setItem).catch(setError); }, [id]); if (!item) return <PageState error={error} />;
return <><section className="title"><div><p><Link to="/servers"> Server</Link></p><h1>{item.name}</h1><StatusBadge status={item.status} /></div></section><section className="details"><div><small>ID</small><span>{item.id}</span></div><div><small>Wrapper</small><span>{item.wrapperId}</span></div><div><small>Spieler / Kapazität</small><span>{item.players} / {item.maxPlayers}</span></div><div><small>Port / Query Port</small><span>{item.port} / {item.queryPort}</span></div><div><small>Erstellt</small><span>{date(item.created)}</span></div><div><small>Gestartet</small><span>{date(item.startedAt)}</span></div><div><small>Leer seit</small><span>{date(item.emptySince)}</span></div></section></>;
const { id = "" } = useParams();
const [item, setItem] = useState<Server>();
const [error, setError] = useState<Error>();
useEffect(() => { api.server(id).then(setItem).catch(setError); }, [id]);
if (!item) return <PageState error={error} />;
return <>
<section className="title"><div><p><Link to="/servers"> Server</Link></p><h1>{item.name}</h1><StatusBadge status={item.status} /></div></section>
<section className="details">
<div><small>ID</small><span>{item.id}</span></div>
<div><small>Wrapper</small><span>{item.wrapperId}</span></div>
<div><small>PID</small><span>{item.pid ?? ""}</span></div>
<div><small>Spieler / Kapazität</small><span>{item.players} / {item.maxPlayers}</span></div>
<div><small>Port / Query Port</small><span>{item.port} / {item.queryPort}</span></div>
<div><small>Erstellt</small><span>{date(item.created)}</span></div>
<div><small>Gestartet</small><span>{date(item.startedAt)}</span></div>
<div><small>Leer seit</small><span>{date(item.emptySince)}</span></div>
</section>
</>;
}