Add ZTE-first port traffic monitoring with task wizard and ops wall.

Collect interface bit/s via CLI on a schedule, store samples in Postgres, and chart trends with uPlot.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-07-31 14:56:50 +08:00
parent a95c6598bb
commit efe8f58cd2
25 changed files with 2880 additions and 36 deletions

View file

@ -60,12 +60,65 @@ const en = {
placeholder: {
title: "Coming soon",
body: "This capability is not available yet.",
portTrafficTitle: "Port traffic monitoring",
portTrafficBody: "Planned: collect per-port traffic on a schedule and show trends. Suggested path:",
portTrafficStep1: "Task definition: NE/port scope, interval, retention",
portTrafficStep2: "Collection: prefer CLI (display/show interface); SNMP later at scale",
portTrafficStep3: "Storage: time series or hourly rollups (in/out bps, errors)",
portTrafficStep4: "UI: task list + per-port trend charts",
},
},
portTraffic: {
title: "Port traffic",
create: "New task",
backList: "Back to list",
created: "Task created",
createFailed: "Create failed",
started: "Started",
paused: "Paused",
stopped: "Stopped",
deleted: "Deleted",
confirmDelete: "Delete this task and its samples?",
empty: "No monitoring tasks yet. Create one to start.",
wall: "Ops wall",
start: "Start",
pause: "Pause",
stop: "Stop",
delete: "Delete",
step1: "Params",
step2: "NEs",
step3: "Ports",
step4: "Confirm",
prev: "Back",
next: "Next",
fieldTitle: "Task name",
titlePh: "e.g. Access uplinks",
titleRequired: "Task name is required",
portsRequired: "Select at least one port",
interval: "Interval (sec)",
retention: "Retention (days)",
concurrency: "Concurrency",
startNow: "Start after create",
neKeywordPh: "Name / IP / vendor",
selectedNe: "{{count}} NE(s) selected",
selectedPorts: "{{count}} port(s) selected",
pickNeFirst: "Select NEs in the previous step first",
discover: "Discover ports",
confirmCreate: "Create task",
wallTask: "Task",
wallPort: "Interface",
pickPort: "Select interface",
range: "Range",
kpi: {
tasks: "Tasks",
running: "Running",
ports: "Ports",
samples24h: "Samples 24h",
},
col: {
title: "Task",
status: "Status",
ports: "Ports",
interval: "Interval",
last: "Last collect",
actions: "Actions",
source: "Source",
name: "Device",
vendor: "Vendor",
},
},
configSync: {

View file

@ -60,12 +60,65 @@ const zh = {
placeholder: {
title: "功能规划中",
body: "该能力尚未开放。",
portTrafficTitle: "端口流量监控",
portTrafficBody: "规划中:按任务采集设备端口流量并展示趋势。建议路径如下。",
portTrafficStep1: "任务定义:选择网元/端口范围、采集周期与保留策略",
portTrafficStep2: "采集:优先 CLI(display/show interface),规模上来后再 SNMP",
portTrafficStep3: "存储:端口 in/out bps、error 等时序或按小时汇总",
portTrafficStep4: "界面:任务列表 + 单端口趋势图",
},
},
portTraffic: {
title: "端口流量监控",
create: "新建任务",
backList: "返回列表",
created: "任务已创建",
createFailed: "创建失败",
started: "已启动",
paused: "已暂停",
stopped: "已停止",
deleted: "已删除",
confirmDelete: "删除该任务及其采样数据?",
empty: "暂无监控任务。请先创建任务。",
wall: "监控大屏",
start: "启动",
pause: "暂停",
stop: "停止",
delete: "删除",
step1: "参数",
step2: "选网元",
step3: "选端口",
step4: "确认",
prev: "上一步",
next: "下一步",
fieldTitle: "任务名称",
titlePh: "例如:接入侧上联",
titleRequired: "请填写任务名称",
portsRequired: "请至少选择一个端口",
interval: "周期(秒)",
retention: "保留(天)",
concurrency: "并发",
startNow: "创建后立即启动",
neKeywordPh: "名称 / IP / 厂商",
selectedNe: "已选 {{count}} 台网元",
selectedPorts: "已选 {{count}} 个端口",
pickNeFirst: "请先在上一步选择网元",
discover: "拉取端口",
confirmCreate: "创建任务",
wallTask: "任务",
wallPort: "接口",
pickPort: "选择接口",
range: "时间范围",
kpi: {
tasks: "任务数",
running: "运行中",
ports: "监控端口",
samples24h: "24h 样点",
},
col: {
title: "任务",
status: "状态",
ports: "端口",
interval: "周期",
last: "最近采集",
actions: "操作",
source: "来源",
name: "设备",
vendor: "厂商",
},
},
configSync: {