Bundle
dsh-sysmon
DSH Web 右下角系统状态悬浮窗:CPU(x%/y)、内存、磁盘占用,1 秒刷新
- Source
- AKS1st
- stars
- 3 stars
- License
- BSD-3-Clause
- Updated
- Updated 14 hours ago
Readme
# dsh-sysmon DSH Web 的系统状态悬浮窗:固定在页面右下角,每 1 秒刷新显示 CPU、内存、磁盘占用率。 ``` CPU 39%/16 MEM 46% DISK 22% ``` ## 显示规格 - **位置**:右下角固定悬浮,`pointer-events: none`,不遮挡界面操作。 - **配色**:默认浅灰色小字(等宽字体、11px)。 - **刷新**:1 秒一次。 ### 阈值规则 | 指标 | 默认(浅灰) | 橙色 | 红色 | | ---- | ----------- | ---- | ---- | | CPU(x%/y) | < 90%×核心数 | x ≥ 90%×核心数 | x ≥ 98%×核心数 | | 内存 | ≤ 80% | > 80% | > 90% | | 磁盘 | ≤ 80% | > 80% | > 90% | - **CPU**:`x%` 为所有核心使用率之和(可超过 100%),`y` 为总核心数;阈值按总容量比例计算。 - **内存 / 磁盘**:超过 80% 橙色、超过 90% 红色。 ## 安装 从 GitHub 仓库安装: ```sh dsh plugin --profile web add github:AKS1st/dsh-sysmon dsh web ``` 或 clone 到本地后从本地目录安装: ```sh git clone https://github.com/AKS1st/dsh-sysmon.git cd dsh-sysmon npm install npm run build dsh plugin --profile web add . dsh web ``` ## 工作方式 - **Host**(`src/index.ts`):通过 `ctx.interval` 挂载每秒运行且随插件生命周期清理的后台采样器,经 `ctx.shell` 采样(`/proc/stat`、`nproc`、`/proc/meminfo`、`df -P /`),把最新快照写入内存缓存。路由 `GET /dsh-sysmon/api` 只返回缓存(亚毫秒、零子进程开销),并拒绝非 GET 方法与跨源浏览器请求。CPU 使用率为相邻两次采样之间的增量(窗口约 1 秒),首次采样显示 0。 - **Client**(`src/client/index.ts`):创建 `#dsh-sysmon` 固定定位元素,每 1 秒 `fetch` 一次路由,带 in-flight 守卫避免请求重叠;重绘只更新三个数值节点(diff 式)。纯 DOM 实现、零运行时依赖。 ## 已知限制 - **仅 Linux**——宿主采集器读取 `/proc/stat`、`/proc/meminfo` 与 `df`;其他平台需要不同的采集器。 - **仅根文件系统**——磁盘占用只报告 `/`,按挂载点选择暂缓。 - **采样窗口近似**——CPU 百分比是相邻两次采样(约 1 秒)间隔内忙时占比,窗口内瞬时突发被平均。
Install
dsh plugin --profile web add github:AKS1st/dsh-sysmon
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install dsh-sysmon from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.