feat(panel, netmgr §11): MeowPanel 网络管理页—netmgrd 期2 面板侧
后端(patch_v2/meowpanel/meowpanel.c,/api/audio 同款透传模式): - GET /api/net/status → 0xE0 概览 JSON(接口表 + WiFi/BT 摘要 + 速率) - GET /api/net/conns?entity= → 0xE8 连接表(解析 entity|本端|远端|状态|寿命|域名 → JSON,transit 截断标记) - GET /api/net/dns → 0xEC status(mode/enabled/upstream/缓存命中/查询/deny/resolv_modified) - POST /api/net/dns/flush → 0xEC flush(写级:HTTP 层走 require_auth;IPC 身份由 netmgrd 判定) - GET /api/net/log → TF MeowOS/logs/ 最新 net_*.log tail(256KB 上限,1000 行) - netmgrd 不在/超时/应答异常 → 503 降级 JSON(NET_UNAVAILABLE),面板其它页不受影响 - 新增 --sock-net / env MEOW_NET_SOCK(宿主/qemu 测试用) 前端(web/,MD3/MIUIx 双主题沿用 270 落地件): - 侧栏新增「网络」入口(#/net);接口卡 + WiFi 摘要 + 蓝牙摘要 + 每实体连接表 (entity 前缀筛选 + 5s 轮询)+ DNS 代理卡(统计 + 清缓存按钮)+ 日志查看器 - netmgrd 不在 → 显示「网络管理服务不可用」占位 + 重试,不白屏不报错栈 验证:宿主 cc -Wall -Wextra 0 warning;mipsel 交叉编译 0 warning;假 netmgrd IPC 桩 (Python 帧级桩)联调五端点含 entity 过滤/flush 成功与 403/503 降级全通过;headless Chromium 渲染 #/net(服务在线/离线两态)与 #/perf #/audio 无回归。 后端起二进制 md5: 21c70046476d3bf63e76f3d63e9eca2c(mipsel 静态)。 遗留(主会话部署时决策):netmgrd flush 写级依 SO_PEERCRED 判系统身份,面板 exe 位于 /usr/data/mnt/sd_0/MeowOS/opt/MeowPanel/(非 /usr/bin/meow_* 亦非 os.meow.* 包)→ 真机 上 flush 会被 netmgrd 拒(403)。需在 netmgrd classify_exe 增认面板路径,或接受 403 只读。 不部署到设备(留主会话热更)。
This commit is contained in:
1 parent
52edf0c9e4
commit
d8eeef5c57
6 files changed
+484
-2
No files matched your search
@@ -301,6 +301,19 @@ input[type=range]{ width:100%; accent-color:var(--primary); }
|
||||
/* 日志查看 */
|
||||
.log-view{ background:var(--surface-dim); border-radius:var(--radius-m); padding:12px; max-height:60vh; overflow:auto; font-family:var(--mono); font-size:12px; white-space:pre-wrap; color:var(--on-surface); }
|
||||
|
||||
/* 网络管理页(meow_netmgrd) */
|
||||
.net-kind{ color:var(--on-surface-variant); font-size:12px; }
|
||||
.net-state{ display:inline-block; padding:2px 8px; border-radius:999px; font-size:12px; background:var(--surface-variant); color:var(--on-surface-variant); }
|
||||
.net-state.ok{ background:rgba(76,175,80,.15); color:var(--success); }
|
||||
.net-state.warn{ background:rgba(255,179,0,.15); color:var(--warning); }
|
||||
.net-state.listen{ background:rgba(74,139,245,.15); color:var(--primary); }
|
||||
.net-state.down{ background:rgba(207,102,121,.15); color:var(--error); }
|
||||
.net-badge{ display:inline-block; padding:1px 7px; border-radius:999px; font-size:11px; font-family:var(--mono); background:var(--surface-variant); color:var(--on-surface-variant); margin-right:2px; }
|
||||
.net-badge.app{ background:rgba(74,139,245,.18); color:var(--primary); }
|
||||
.net-badge.svc{ background:rgba(76,175,80,.18); color:var(--success); }
|
||||
.net-badge.proc{ background:rgba(255,179,0,.18); color:var(--warning); }
|
||||
.net-entity{ font-family:var(--mono); font-size:12px; word-break:break-all; }
|
||||
|
||||
/* 通知列表 */
|
||||
.notif{ display:flex; gap:12px; padding:12px; border-radius:var(--radius-m); background:var(--surface-variant); margin-bottom:10px; align-items:flex-start; border:var(--outline-w) solid var(--outline-variant); }
|
||||
.notif .n-ico{ width:36px; height:36px; border-radius:var(--radius-m); background:var(--primary); color:var(--on-primary); display:flex; align-items:center; justify-content:center; flex:0 0 36px; font-weight:700; }
|
||||
|
||||
Reference in new issue
Block a user