+ size="small"
+ rowKey="id"
+ columns={columns}
+ dataSource={list}
+ pagination={false}
+ style={{ marginTop: 6 }}
+ />
+
+ ))
+ )}
+
+ {draft ? (
+
+
+
+ setDraftField('name', e.target.value)}
+ style={{ width: 180 }}
+ />
+ setDraftField('region', e.target.value)}
+ style={{ width: 130 }}
+ />
+ setDraftField('target', e.target.value)}
+ style={{ width: 230, fontFamily: 'monospace' }}
+ />
+ setDraftField('interval', v ?? 60)}
+ addonAfter="s"
+ style={{ width: 120 }}
+ />
+
+
+
+ {t('pages.nodes.probeTasks.autoJoin')}{' '}
+ setDraftField('autoJoin', v)} />
+
+
+
+
+
+
+
+
+ ) : (
+ } onClick={startCreate} style={{ marginTop: 8 }}>
+ {t('pages.nodes.probeTasks.add')}
+
+ )}
+
+ );
+}
diff --git a/frontend/src/test/node-list-category-chips.test.tsx b/frontend/src/test/node-list-category-chips.test.tsx
index f718bf0..5ee90b1 100644
--- a/frontend/src/test/node-list-category-chips.test.tsx
+++ b/frontend/src/test/node-list-category-chips.test.tsx
@@ -17,6 +17,7 @@ function renderNodes(nodes: NodeRecord[]) {
onSelectionChange={noop}
onAdd={noop}
onMtls={noop}
+ onProbeTasks={noop}
onEdit={noop}
onDelete={noop}
onProbe={noop}
diff --git a/frontend/src/test/node-list-rowkey.test.tsx b/frontend/src/test/node-list-rowkey.test.tsx
index dae7a71..6c402a1 100644
--- a/frontend/src/test/node-list-rowkey.test.tsx
+++ b/frontend/src/test/node-list-rowkey.test.tsx
@@ -29,6 +29,7 @@ describe('NodeList desktop table row keys', () => {
onSelectionChange={noop}
onAdd={noop}
onMtls={noop}
+ onProbeTasks={noop}
onEdit={noop}
onDelete={noop}
onProbe={noop}
diff --git a/internal/web/translation/ar-EG.json b/internal/web/translation/ar-EG.json
index 0193ad8..f42ae08 100644
--- a/internal/web/translation/ar-EG.json
+++ b/internal/web/translation/ar-EG.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/en-US.json b/internal/web/translation/en-US.json
index 53ad2e5..4c61c79 100644
--- a/internal/web/translation/en-US.json
+++ b/internal/web/translation/en-US.json
@@ -1099,6 +1099,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/es-ES.json b/internal/web/translation/es-ES.json
index 502a9ea..8a7d67f 100644
--- a/internal/web/translation/es-ES.json
+++ b/internal/web/translation/es-ES.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/fa-IR.json b/internal/web/translation/fa-IR.json
index 3831b8e..aa66fe0 100644
--- a/internal/web/translation/fa-IR.json
+++ b/internal/web/translation/fa-IR.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/id-ID.json b/internal/web/translation/id-ID.json
index 431de16..2b5b0b7 100644
--- a/internal/web/translation/id-ID.json
+++ b/internal/web/translation/id-ID.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/ja-JP.json b/internal/web/translation/ja-JP.json
index 557a717..ad3cf75 100644
--- a/internal/web/translation/ja-JP.json
+++ b/internal/web/translation/ja-JP.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/pt-BR.json b/internal/web/translation/pt-BR.json
index 6a4ccc3..5f9d10a 100644
--- a/internal/web/translation/pt-BR.json
+++ b/internal/web/translation/pt-BR.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/ru-RU.json b/internal/web/translation/ru-RU.json
index ab1dcda..ecddc29 100644
--- a/internal/web/translation/ru-RU.json
+++ b/internal/web/translation/ru-RU.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/tr-TR.json b/internal/web/translation/tr-TR.json
index 946e2c4..7c9676e 100644
--- a/internal/web/translation/tr-TR.json
+++ b/internal/web/translation/tr-TR.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/uk-UA.json b/internal/web/translation/uk-UA.json
index 72a85c7..cd14b86 100644
--- a/internal/web/translation/uk-UA.json
+++ b/internal/web/translation/uk-UA.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/vi-VN.json b/internal/web/translation/vi-VN.json
index cdb4854..09c92d0 100644
--- a/internal/web/translation/vi-VN.json
+++ b/internal/web/translation/vi-VN.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {
diff --git a/internal/web/translation/zh-CN.json b/internal/web/translation/zh-CN.json
index bb903cc..2d59afa 100644
--- a/internal/web/translation/zh-CN.json
+++ b/internal/web/translation/zh-CN.json
@@ -981,6 +981,33 @@
"save": "保存状态页信息",
"saved": "状态页信息已保存",
"saveFailed": "状态页信息保存失败"
+ },
+ "probeTasks": {
+ "title": "延迟探测",
+ "intro": "由 agent 节点执行的 TCP 延迟探测。修改在各 agent 下一次拉取配置时生效(约 30 秒),无需重启。",
+ "loading": "加载中…",
+ "empty": "还没有探测任务,新增一个开始测延迟。",
+ "add": "新增探测",
+ "name": "名称",
+ "target": "目标",
+ "targetPlaceholder": "主机:端口,如 1.1.1.1:443",
+ "interval": "间隔(秒)",
+ "region": "地区",
+ "ungrouped": "未分组",
+ "autoJoin": "自动加入",
+ "autoJoinOn": "自动",
+ "nodes": "指派节点",
+ "nodesPlaceholder": "选择节点",
+ "actions": "操作",
+ "edit": "编辑",
+ "delete": "删除",
+ "deleteConfirm": "删除这个探测及其历史数据?",
+ "save": "保存",
+ "cancel": "取消",
+ "saved": "探测任务已保存",
+ "deleted": "探测任务已删除",
+ "loadFailed": "探测任务加载失败",
+ "saveFailed": "操作失败"
}
},
"settings": {
diff --git a/internal/web/translation/zh-TW.json b/internal/web/translation/zh-TW.json
index 0ad20e1..1ad93f0 100644
--- a/internal/web/translation/zh-TW.json
+++ b/internal/web/translation/zh-TW.json
@@ -959,6 +959,33 @@
"save": "Save status page info",
"saved": "Status page info saved",
"saveFailed": "Saving status page info failed"
+ },
+ "probeTasks": {
+ "title": "Probe tasks",
+ "intro": "TCP latency probes run by agent nodes. Changes apply on each agent's next config poll (about 30 s); nothing restarts.",
+ "loading": "Loading…",
+ "empty": "No probe tasks yet. Add one to start measuring latency.",
+ "add": "Add probe",
+ "name": "Name",
+ "target": "Target",
+ "targetPlaceholder": "host:port, e.g. 1.1.1.1:443",
+ "interval": "Interval (s)",
+ "region": "Region",
+ "ungrouped": "Ungrouped",
+ "autoJoin": "Auto-join",
+ "autoJoinOn": "Auto",
+ "nodes": "Nodes",
+ "nodesPlaceholder": "Assign nodes",
+ "actions": "Actions",
+ "edit": "Edit",
+ "delete": "Delete",
+ "deleteConfirm": "Delete this probe and its history?",
+ "save": "Save",
+ "cancel": "Cancel",
+ "saved": "Probe task saved",
+ "deleted": "Probe task deleted",
+ "loadFailed": "Failed to load probe tasks",
+ "saveFailed": "Operation failed"
}
},
"settings": {