diff --git a/src/backend/ssh/widgets/login-stats-collector.ts b/src/backend/ssh/widgets/login-stats-collector.ts index e5fb78f8..50f36df9 100644 --- a/src/backend/ssh/widgets/login-stats-collector.ts +++ b/src/backend/ssh/widgets/login-stats-collector.ts @@ -1,5 +1,6 @@ import type { Client } from "ssh2"; import { execCommand } from "./common-utils.js"; +import { statsLogger } from "../../utils/logger.js"; export interface LoginRecord { user: string; diff --git a/src/backend/ssh/widgets/processes-collector.ts b/src/backend/ssh/widgets/processes-collector.ts index a479d5e5..221ab177 100644 --- a/src/backend/ssh/widgets/processes-collector.ts +++ b/src/backend/ssh/widgets/processes-collector.ts @@ -8,8 +8,8 @@ export async function collectProcessesMetrics(client: Client): Promise<{ top: Array<{ pid: string; user: string; - cpu: number; - mem: number; + cpu: string; + mem: string; command: string; }>; }> { @@ -18,8 +18,8 @@ export async function collectProcessesMetrics(client: Client): Promise<{ const topProcesses: Array<{ pid: string; user: string; - cpu: number; - mem: number; + cpu: string; + mem: string; command: string; }> = []; @@ -38,8 +38,8 @@ export async function collectProcessesMetrics(client: Client): Promise<{ topProcesses.push({ pid: parts[1], user: parts[0], - cpu: Number.isFinite(cpuVal) ? cpuVal : 0, - mem: Number.isFinite(memVal) ? memVal : 0, + cpu: Number.isFinite(cpuVal) ? cpuVal.toString() : "0", + mem: Number.isFinite(memVal) ? memVal.toString() : "0", command: parts.slice(10).join(" ").substring(0, 50), }); } diff --git a/src/ui/desktop/apps/host-manager/HostManagerViewer.tsx b/src/ui/desktop/apps/host-manager/HostManagerViewer.tsx index 014f93e5..91beed2e 100644 --- a/src/ui/desktop/apps/host-manager/HostManagerViewer.tsx +++ b/src/ui/desktop/apps/host-manager/HostManagerViewer.tsx @@ -363,7 +363,12 @@ export function HostManagerViewer({ onEditHost }: SSHManagerHostViewerProps) { ), ); - const blob = new Blob([JSON.stringify(cleanExportData, null, 2)], { + // Wrap in hosts array for valid import format + const exportFormat = { + hosts: [cleanExportData], + }; + + const blob = new Blob([JSON.stringify(exportFormat, null, 2)], { type: "application/json", }); const url = URL.createObjectURL(blob); diff --git a/src/ui/desktop/authentication/Auth.tsx b/src/ui/desktop/authentication/Auth.tsx index 51d97918..a87923a3 100644 --- a/src/ui/desktop/authentication/Auth.tsx +++ b/src/ui/desktop/authentication/Auth.tsx @@ -799,59 +799,76 @@ export function Auth({ if (dbConnectionFailed) { return (
-
-

- {t("errors.databaseConnection")} -

-

- {t("messages.databaseConnectionFailed")} -

-
- -
- -
- -
-
-
- -
- +
+
+

+ {t("errors.databaseConnection")} +

+

+ {t("messages.databaseConnectionFailed")} +

- {isElectron() && currentServerUrl && ( + +
+ +
+ +
- -
- {currentServerUrl} -
+
- +
- )} + {isElectron() && currentServerUrl && ( +
+
+ +
+ {currentServerUrl} +
+
+ +
+ )} +
);