feat: 添加节点可观测性查询功能,支持获取节点的系统配置、指标快照、流量报告和健康事件

This commit is contained in:
ryan
2026-03-14 11:07:32 +08:00
parent d9d02e749a
commit 1f294d72b9
7 changed files with 307 additions and 0 deletions
@@ -6,6 +6,7 @@ import type {
NodeBootstrapToken,
NodeItem,
NodeMutationPayload,
NodeObservability,
} from '@/features/nodes/types';
import type { ReleaseChannel } from '@/features/update/types';
@@ -67,3 +68,20 @@ export function requestNodeOpenrestyRestart(id: number) {
method: 'POST',
});
}
export function getNodeObservability(
id: number,
options?: { hours?: number; limit?: number },
) {
const params = new URLSearchParams();
if (options?.hours) {
params.set('hours', String(options.hours));
}
if (options?.limit) {
params.set('limit', String(options.limit));
}
const query = params.toString();
return apiRequest<NodeObservability>(
`/nodes/${id}/observability${query ? `?${query}` : ''}`,
);
}
+60
View File
@@ -57,3 +57,63 @@ export interface NodeAgentUpdatePayload {
channel?: ReleaseChannel;
tag_name?: string;
}
export interface NodeSystemProfile {
hostname: string;
os_name: string;
os_version: string;
kernel_version: string;
architecture: string;
cpu_model: string;
cpu_cores: number;
total_memory_bytes: number;
total_disk_bytes: number;
uptime_seconds: number;
reported_at: string;
}
export interface NodeMetricSnapshot {
captured_at: string;
cpu_usage_percent: number;
memory_used_bytes: number;
memory_total_bytes: number;
storage_used_bytes: number;
storage_total_bytes: number;
disk_read_bytes: number;
disk_write_bytes: number;
network_rx_bytes: number;
network_tx_bytes: number;
openresty_rx_bytes: number;
openresty_tx_bytes: number;
openresty_connections: number;
}
export interface NodeTrafficReport {
window_started_at: string;
window_ended_at: string;
request_count: number;
error_count: number;
unique_visitor_count: number;
status_codes_json: string;
top_domains_json: string;
source_countries_json: string;
}
export interface NodeHealthEvent {
event_type: string;
severity: string;
status: string;
message: string;
first_triggered_at: string;
last_triggered_at: string;
reported_at: string;
resolved_at?: string | null;
}
export interface NodeObservability {
node_id: string;
profile: NodeSystemProfile | null;
metric_snapshots: NodeMetricSnapshot[];
traffic_reports: NodeTrafficReport[];
health_events: NodeHealthEvent[];
}