feat: 安装脚本与面板支持指定统计的网卡(--iface);重跑沿用 --interval - #27
Merged
Merged
Conversation
- --iface 写入 agent.env 的 MONITOR_IFACE;重跑不带 --iface 时沿用,--iface '' 清除。 批量注册命令由整个机队共用,带不了每台机器的网卡名 - 值只允许网卡名、逗号、开头的 - 与末尾的 *:OpenRC 以 shell 方式载入 agent.env - accumulate 注释补充:agent 设了 --iface 时会拼进 boot_id,改设置即重新对基线
- 安装与批量添加弹窗新增「指定统计的网卡」:只统计 / 不统计两栏,合成 --iface; 关闭时不带 --iface,install.sh 沿用机器原有设置;打开且两栏留空即恢复默认规则 - 在线节点从 boot_id 读出当前 --iface,显示为「当前:…」并预填 - 名字不合法时指出是哪一个、标红所在输入框,命令暂不生成 - 安装弹窗改为「安装选项 / 安装命令」两段,上报间隔改成与开关一致的卡片样式 - 修正批量添加说明中 JSX 换行在中文里留下的空格
- install.sh:显式传入的 --iface 按 agent 同一套规则拒绝(单独的 *、-*、-- 开头、* 不在末尾), 避免装完 agent 起不来而脚本报成功;沿用 agent.env 的值原样写回(取最后一行),手改带引号 不再挡住之后的升级;写入改用 printf - 面板:当前设置改读 agent 上报的 metrics.iface;单台弹窗关闭开关时提示「沿用原有设置」; 示例改为 WAN / LAN 口 - accumulate 注释:boot_id 后接的是所计网卡集合的摘要
- OptionRow 加 below,开关打开后展开的内容留在同一张卡片里;网卡卡片与上报间隔不再手抄行结构。 - agent 在 boot_id 后接所计网卡集合的摘要以后,「reports a new boot」不再只意味着重启。 日志改为打印新旧两个值:只有 `/` 之后变了,就是网卡集合变了。 - install.sh 删掉一句过期注释:root 检查已经挪到了它前面。
- 上一版把新旧 boot_id 原样写进 hub 日志。那是 agent 给的文本,可以带换行伪造日志行,长度只受 帧上限约束。改为 hub 比较 `/` 之前的部分,只记「重启」或「网卡集合变了」两种固定文案。 - OptionRow 的边框移到外层之后,两列网格里较矮的卡片被拉高时,里面的 label 不跟着撑开:标题与 开关贴顶,下半截点不动。外层改为纵向 flex,行 flex-1。
- install.sh 不带 --interval 时,从上次写下的 systemd unit 或 OpenRC 服务脚本里读回原值,首次安装才取 1。 批量命令从不带这个参数,面板的安装命令原来总带着 --interval 1,重跑升级就把机器上调长的间隔 改回 1 秒;上百台节点调长间隔多半是为了减轻 hub 的负担,这样一改负担悄悄回到原样。 与 --iface 的沿用规则一致。 - 面板安装弹窗的间隔默认留空,留空不带 --interval;填了才写进命令。
与 agent 同步:只保留列出与 `-` 排除两种写法。install.sh 与面板的校验随之简化,写了 `*` 同样拒绝; 面板生成的命令不再需要给名字加引号,只有清除设置时的 `--iface ''` 还带着。
面板的间隔框留空表示沿用,靠一行说明才看得懂。改回所见即所得:默认 1,命令里总带着框里的值。 沿用只留在 install.sh:不带 --interval 的命令(批量命令、手写命令)重跑时不再把间隔改回 1。 输入框改为只收数字的文本框,没有上下箭头,滚轮也不会改动它。
区分「重启」与「网卡集合变了」要按 `/` 拆开 boot_id,hub 因此得知道 agent 的格式,两边多一处要同步的 约定,换来的只是日志好读一点。改为只记 boot_id 变了,值本身仍不进日志。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
背景
配套 monitor-probe/agent#6。agent 新增
--iface/MONITOR_IFACE,用来指定哪些网卡计入流量,主要用于软路由、PVE 宿主机这类会转发流量的机器。本 PR 让安装脚本和面板都能设置它。本 PR 叠在 #24 上(base 为
feat/uninstall-agent):面板直接复用 #24 的scriptCommand与Command,同一个命令框不写两份。#24 合并后,把本分支 rebase 到 main 再合。安装脚本
install.sh --iface LIST:写入agent.env的MONITOR_IFACE。--iface,就沿用agent.env里原来的值,并打印一行keeping --iface ...;显式传--iface ''才清除。原因:批量注册命令由整个机队共用,带不了每台机器各自的网卡名,而升级方式就是重跑安装命令,不沿用的话一次升级就把设置冲掉,重复计数又悄悄回来。'eth1'会让之后每次升级都退出。-。否则 agent 启动即退出、无限重启,而脚本却报告安装成功。字符集只允许字母、数字和._,-(因此也不收*),因为 OpenRC 会用 shell 载入agent.env。db::accumulate注释补充:agent 会把所计网卡集合的摘要拼进boot_id,集合一变就重新对基线。hub 逻辑不变。对基线的日志改为「reports a new boot_id」:重启和网卡集合变化都会触发,hub 不去拆boot_id分辨是哪一种,免得多一处要与 agent 同步的格式约定。日志里不写boot_id本身:那是 agent 给的文本,可以带换行伪造日志行。--interval同样沿用:不带--interval重跑时,从上次写下的 systemd unit(ExecStart)或 OpenRC 服务脚本(command_args)读回原值,打印keeping --interval N from the previous install,首次安装才取 1。批量命令从不带这个参数,重跑升级原来会把调长的间隔悄悄改回 1 秒;节点多的人调长间隔多半是为了减轻 hub 的负担。面板生成的单台安装命令仍总带着框里的值,所见即所得。面板
--iface,下方的安装命令随输入实时更新。--iface,install.sh 沿用机器原有的设置。--iface '',恢复默认规则。metrics.iface读出当前的--iface,显示为「当前:只统计 eth1;不统计 eth0」,并据此预填。hub 不用改;公开页的指标是白名单输出,这个字段不外泄(已实测未登录的/api/nodes)。OptionRow,它新增below:开关打开后展开的两栏留在同一张卡片里。边框因此挪到外层,外层改为纵向 flex、行flex-1,两列网格里被拉高的卡片(节点编辑的「公开显示」「离线通知」说明长短不一时)整行撑满,标题与开关垂直居中,点卡片任意处都能切换。验证
install.sh:在 Alpine + OpenRC 容器里,用临时 hub 下发的脚本逐项实测。
--iface LISTagent.env的MONITOR_IFACE--ifacekeeping --iface … from the previous install,值保留--iface ''后再重跑--iface 'eth0;reboot'、--iface 'eth0 eth1'agent.env里是MONITOR_IFACE='eth1',或有两行MONITOR_IFACE--iface不带值--iface needs a value另外用临时 systemd 单元确认过,
EnvironmentFile能原样传递以-开头的值。面板:本地用 HTTPS 代理加 vite 开发服务器,以
https://hub.example.com:8443访问临时 hub,用浏览器实际操作并截图检查。metrics.iface):--iface:开关自动打开并预填,命令里带上这个值--iface '';有非法名字时标红并暂停出命令。检查:
sh -n通过;shellcheck 只有两条原本就有的 SC2015 提示;cargo test108 个全部通过;面板tsc -b、oxlint、npm test全部通过(新增ifaceSpec/badIfaceName/ifaceChoice/currentIface的断言)。rebase 到 #24 的新提交之后:
cargo test108 个、面板tsc -b、oxlint、npm test、npm run build通过。浏览器复测安装与批量添加两个弹窗(浅色、深色、390 px):agent 带--iface在线时开关自动打开并预填,点标题文字即可切换开关,关掉后命令里不带--iface;页面与命令框都没有横向溢出。--interval沿用:Ubuntu 24.04 + systemd 与 Alpine + OpenRC 两个容器,各跑同一组步骤:--interval 5--interval 5keeping --interval 5 …,仍是 5--interval 2--interval 7 --insecure后不带间隔重跑--insecure保留--interval 0--uninstall后不带参数安装浏览器:间隔框默认 1,命令带
--interval 1;输入5a0得到50;删空时命令按 1 生成;输入框没有占位字、没有上下箭头;1280 px 与 390 px 下布局正常。校验规则三方对照
-、eth0,-、--eth0、eth0 eth1三方都拒绝;eth1、eth1,pppoe-wan、-ens19、eth1,-eth0、vmbr0、enp1s0.100、wg_0、eth0,,eth1三方都接受;eth*、*、-*、e*h0、eth0;reboot、eth0'只有 install.sh 与面板拒绝:两者只收字母、数字和._-,agent 只检查写法--iface '';只统计eth1、不统计ens19生成--iface eth1,-ens19,名字不加引号;填eth*标红并暂停出命令兼容
MONITOR_IFACE,不会出错。旧版 agent 不上报iface,面板显示为「默认规则」,这也符合实际。cargo test109 个、面板四项检查全部通过。MONITOR_IFACE,而安装脚本照常报告成功,面板只会显示「当前:默认规则」。