Move port traffic to device-centric monitoring with a dedicated wall and collect logs.

Split the ops wall to its own route with fullscreen charts, persist collect errors as device events, and polish wall legend layout.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-08-01 15:45:20 +08:00
parent 5079343b2a
commit 214bc56774
24 changed files with 3309 additions and 1357 deletions

View file

@ -533,9 +533,14 @@ export type NeConfigSnapshotDetail = NeConfigSnapshotMeta & {
config_alt_text: string;
};
export type PortTrafficTask = {
export type PortTrafficDevice = {
id: string;
title: string;
source: string;
ne_id: string;
ne_name: string;
ne_ip: string;
vendor: string;
note: string;
status: string;
interval_sec: number;
retention_days: number;
@ -550,9 +555,13 @@ export type PortTrafficTask = {
updated_at?: string | null;
};
/** @deprecated use PortTrafficDevice */
export type PortTrafficTask = PortTrafficDevice;
export type PortTrafficTarget = {
id: string;
task_id: string;
device_id: string;
task_id?: string;
series_id?: string;
source: string;
target_id: string;
@ -568,9 +577,20 @@ export type PortTrafficTarget = {
created_at?: string | null;
};
export type PortTrafficEvent = {
id: string;
device_id: string;
target_row_id: string;
ifname: string;
level: string;
message: string;
created_at?: string | null;
};
export type PortTrafficSeries = {
id: string;
task_id: string;
device_id: string;
task_id?: string;
title: string;
status: string;
active_target: PortTrafficTarget | null;
@ -578,17 +598,20 @@ export type PortTrafficSeries = {
created_at?: string | null;
};
export type PortTrafficTargetIn = {
source: "managed" | "ume";
target_id: string;
ne_name?: string;
ne_ip?: string;
vendor?: string;
export type PortTrafficIfaceIn = {
ifname: string;
if_description?: string;
bw_bps?: number;
};
export type PortTrafficTargetIn = PortTrafficIfaceIn & {
source?: "managed" | "ume";
target_id?: string;
ne_name?: string;
ne_ip?: string;
vendor?: string;
};
export type PortTrafficDiscoverPort = {
ifname: string;
attribute: string;
@ -642,10 +665,12 @@ export type PortTrafficCompare = {
};
export type PortTrafficDashboard = {
task_count: number;
running_task_count: number;
device_count: number;
running_device_count: number;
active_target_count: number;
sample_count_24h: number;
last_sample_at?: string | null;
task_count?: number;
running_task_count?: number;
};