feat(web): monitors list/detail/form UI
Server Deploy / deploy (push) Successful in 2m1s

This commit is contained in:
2026-07-21 14:16:08 +01:00
parent e413009faa
commit 57151826ae
5 changed files with 630 additions and 0 deletions
+92
View File
@@ -34,6 +34,69 @@ export interface Server {
inventory?: Inventory;
}
export type MonitorType = "http" | "tcp" | "icmp" | "tls";
export type MonitorStatus = "up" | "down" | "pending";
export interface MonitorTarget {
url?: string;
host?: string;
port?: number;
method?: string;
expected_status?: number;
keyword?: string;
tls_warn_days?: number;
}
export interface MonitorState {
status: MonitorStatus;
last_check_at?: string;
latency_ms: number;
message?: string;
cert_expiry_at?: string;
fails: number;
}
export interface Monitor {
monitor_id: string;
name: string;
type: MonitorType;
target: MonitorTarget;
interval_sec: number;
runner: string; // "server" or a server_id
retries: number;
enabled: boolean;
channel_ids?: string[];
state: MonitorState;
created_at: string;
}
export interface MonitorInput {
name: string;
type: MonitorType;
target: MonitorTarget;
interval_sec: number;
runner: string;
retries: number;
enabled: boolean;
channel_ids?: string[];
}
export interface Incident {
incident_id: string;
monitor_id: string;
started_at: string;
resolved_at?: string;
cause?: string;
}
export interface Rollup {
monitor_id: string;
period_start: string;
checks: number;
up_count: number;
sum_latency: number;
}
export interface ConsoleConnectRequest {
server_id: string;
protocol: string;
@@ -278,6 +341,35 @@ export const api = {
return `curl -fsSL "${window.location.origin}/update" | bash`;
},
// Monitors
listMonitors(): Promise<Monitor[]> {
return request<Monitor[]>("/monitors");
},
getMonitor(monitorId: string): Promise<Monitor> {
return request<Monitor>(`/monitors/${monitorId}`);
},
createMonitor(input: MonitorInput): Promise<Monitor> {
return request<Monitor>("/monitors", { method: "POST", body: JSON.stringify(input) });
},
updateMonitor(monitorId: string, input: Partial<MonitorInput>): Promise<void> {
return request<void>(`/monitors/${monitorId}`, { method: "PUT", body: JSON.stringify(input) });
},
deleteMonitor(monitorId: string): Promise<void> {
return request<void>(`/monitors/${monitorId}`, { method: "DELETE" });
},
getMonitorIncidents(monitorId: string): Promise<Incident[]> {
return request<Incident[]>(`/monitors/${monitorId}/incidents`);
},
getMonitorUptime(monitorId: string): Promise<Rollup[]> {
return request<Rollup[]>(`/monitors/${monitorId}/uptime`);
},
getLatestAgentVersion(): Promise<{ version: string }> {
return request<{ version: string }>("/agent/latest-version");
},