Harden LLDP collect ops: edge list, job reclaim, and schedule hygiene.

Add fabric link browsing, conservative job retention, hour-based intervals, multi-worker start locking, and trim canvas discover UI in favor of the LLDP page.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
oliver 2026-08-02 03:58:03 +08:00
parent d05ba0f1f7
commit e7f97b7cf6
18 changed files with 1126 additions and 479 deletions

View file

@ -236,7 +236,11 @@ const en = {
enabled: "Enable scheduled collect",
autoAddUnmatched: "Create SSH placeholder NEs for unmatched neighbors",
intervalDays: "Interval (days)",
interval: "Collect interval",
intervalUnitDays: "days",
intervalUnitHours: "hours",
concurrency: "Concurrency",
historyKeep: "Jobs to keep",
scope: "Scope",
scopeAll: "All managed NEs",
scopeSelected: "Selected NEs",
@ -245,6 +249,13 @@ const en = {
targetKeywordPh: "Name / IP / vendor",
jobsTitle: "Collect jobs",
jobDetailTitle: "Job details",
edgesTitle: "Fabric links",
edgeKeywordPh: "Endpoint name or IP",
edgeStatusAll: "All statuses",
edgeStatusActive: "Active",
edgeStatusMissing: "Missing",
missCount: "Miss cycles",
replacedBy: "Replaced",
kpi: {
nodes: "Fabric nodes",
edges: "Active links",
@ -268,6 +279,11 @@ const en = {
ended: "Ended",
neighbors: "Neighbors",
error: "Error",
aSide: "Side A",
bSide: "Side B",
aPort: "Port A",
bPort: "Port B",
lastSeen: "Last seen",
},
},
configSync: {
@ -1309,6 +1325,7 @@ const en = {
discoverLocatePeer: "Locate peer",
discoverLocateNe: "Locate NE",
discoverRawPreview: "Raw output preview (truncated when long; parsing uses full output)",
discoverGoLldp: "Details → LLDP links",
findNode: "Find",
findNodePh: "Type to search: name / IP / vendor",
findNoMatch: "No matching node on the canvas",
@ -1316,7 +1333,7 @@ const en = {
locateOnCanvas: "Click to locate on canvas",
openPortTraffic: "Open port traffic",
removeStale: "Clear missing ({{count}})",
removeStaleHint: "Delete red-marked missing edges",
removeStaleHint: "Manually delete red missing edges; scheduled collect also purges after 4 consecutive misses",
staleRemoved: "Removed {{count}} missing edge(s)",
connectHint: "Connect mode: click source node, then target (Esc or Select to exit)",
},

View file

@ -236,7 +236,11 @@ const zh = {
enabled: "启用周期调度",
autoAddUnmatched: "未纳管邻居建 SSH 占位网元",
intervalDays: "周期(天)",
interval: "采集周期",
intervalUnitDays: "天",
intervalUnitHours: "小时",
concurrency: "并发",
historyKeep: "任务保留数",
scope: "范围",
scopeAll: "全部纳管网元",
scopeSelected: "指定网元",
@ -245,6 +249,13 @@ const zh = {
targetKeywordPh: "名称 / IP / 厂商",
jobsTitle: "采集任务",
jobDetailTitle: "任务明细",
edgesTitle: "Fabric 链路",
edgeKeywordPh: "本端 / 对端名称或 IP",
edgeStatusAll: "全部状态",
edgeStatusActive: "活跃",
edgeStatusMissing: "未发现",
missCount: "未发现周期",
replacedBy: "已被替换",
kpi: {
nodes: "Fabric 网元",
edges: "活跃链路",
@ -268,6 +279,11 @@ const zh = {
ended: "结束",
neighbors: "邻居",
error: "错误",
aSide: "本端",
bSide: "对端",
aPort: "本端口",
bPort: "对端口",
lastSeen: "最近看见",
},
},
configSync: {
@ -1305,6 +1321,7 @@ const zh = {
discoverLocatePeer: "定位对端",
discoverLocateNe: "定位本端",
discoverRawPreview: "采集原文预览(过长会截断,不影响解析)",
discoverGoLldp: "查看详情 → LLDP 链路",
findNode: "定位",
findNodePh: "输入即搜:名称 / IP / 厂商",
findNoMatch: "画布上没有匹配的节点",
@ -1312,7 +1329,7 @@ const zh = {
locateOnCanvas: "点击定位到画布",
openPortTraffic: "打开端口流量",
removeStale: "清除未发现 ({{count}})",
removeStaleHint: "删除红色标记的未发现链路",
removeStaleHint: "手动删除红色未发现链路;周期采集连续 4 次未发现也会自动清理",
staleRemoved: "已删除 {{count}} 条未发现链路",
connectHint: "连线模式:依次点击源节点 → 目标节点(Esc 或切回选择退出)",
},