OpenStats:macOS 菜单栏系统监控初始版本
- 菜单栏:CPU/GPU/内存多样式、网速两行、温度、风扇 - 面板:概览仪表盘、进程、散热、防休眠,液态玻璃与浅色/深色主题 - 采集层:CPU/内存/网络/GPU/磁盘/电池/进程/SMC 温度与风扇,按界面分级采样 - root 辅助工具:风扇调速、合盖不睡眠,断开时自动恢复 - XcodeGen 工程、单元测试、截图模式
This commit is contained in:
commit
4741d40e1b
65 files changed
+6903
No files matched your search
@@ -0,0 +1,156 @@
|
||||
<p align="center">
|
||||
<img src="App/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png" width="112" alt="OpenStats 图标">
|
||||
</p>
|
||||
|
||||
<h1 align="center">OpenStats</h1>
|
||||
|
||||
<p align="center">
|
||||
<b>轻量、原生的 macOS 菜单栏系统监控</b><br>
|
||||
CPU · GPU · 内存 · 网络 · 磁盘 · 电池 · 温度 · 风扇调速 · 防休眠<br>
|
||||
<a href="https://getopenstats.com">getopenstats.com</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="https://img.shields.io/badge/macOS-14%2B-111827?logo=apple&logoColor=white" alt="macOS 14+">
|
||||
<img src="https://img.shields.io/badge/Swift-6-F05138?logo=swift&logoColor=white" alt="Swift 6">
|
||||
<img src="https://img.shields.io/badge/Apple%20Silicon-原生-2563EB" alt="Apple Silicon">
|
||||
<img src="https://img.shields.io/badge/状态-开发中-D97706" alt="开发中">
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<img src="docs/images/overview-dark.png" width="49%" alt="概览(深色)">
|
||||
<img src="docs/images/overview-light.png" width="49%" alt="概览(浅色)">
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## 为什么做 OpenStats
|
||||
|
||||
市面上的菜单栏监控要么功能单一,要么常驻耗电。OpenStats 的目标很简单:
|
||||
|
||||
- **一眼看全**:点开菜单栏就是一整屏仪表盘,不用翻页、不用下拉。
|
||||
- **足够省电**:面板收起时只采集菜单栏用到的指标,M5 Max 实测 **约 0.3% CPU、16 MB 内存**。
|
||||
- **原生体验**:Swift 6 + AppKit + SwiftUI,macOS 26 起使用系统液态玻璃,跟随浅色 / 深色外观。
|
||||
|
||||
## 功能
|
||||
|
||||
### 菜单栏
|
||||
|
||||
<p><img src="docs/images/menubar-dark.png" width="600" alt="菜单栏"></p>
|
||||
|
||||
| 指标 | 显示方式 |
|
||||
|---|---|
|
||||
| CPU / GPU / 内存 | 数字、柱状图、圆环、饼图、柱状图 + 数字,逐项可选 |
|
||||
| 网速 | 两行显示:绿点上传、蓝点下载,完整单位(KB/s、MB/s、GB/s) |
|
||||
| CPU 温度 / 风扇转速 | 迷你数值 |
|
||||
| 防休眠 | 开启时显示咖啡杯图标 |
|
||||
|
||||
高负载时可选数值变红提醒;数值等宽右对齐,刷新时菜单栏不抖动。
|
||||
|
||||
### 面板
|
||||
|
||||
- **概览仪表盘**:健康评分、芯片 / 内存 / 系统 / 运行时长徽章,CPU 柱状历史、GPU 折线、内存面积图、磁盘、网络双线、风扇、各核心负载(超级核 / 性能核 / 能效核分组)、电池环形图、高占用进程、快捷开关。
|
||||
- **进程**:按 CPU 或内存排序,辅助进程归并显示为所属应用。
|
||||
- **散热**:CPU / GPU / 内存 / 电池 / 掌托温度;风扇实时转速与调速。
|
||||
- **防休眠**:屏幕常亮、仅系统不休眠、**合盖后继续运行**,支持定时与低电量自动关闭。
|
||||
|
||||
<p align="center">
|
||||
<img src="docs/images/thermal-dark.png" width="49%" alt="散热">
|
||||
<img src="docs/images/keepawake-light.png" width="49%" alt="防休眠">
|
||||
</p>
|
||||
|
||||
### 风扇调速
|
||||
|
||||
| 模式 | 行为 |
|
||||
|---|---|
|
||||
| 自动 | 交还 macOS 温控 |
|
||||
| 降温 | 固定在最低到最高转速的 60% |
|
||||
| 强冷 | 最高转速 |
|
||||
| 自定义 | 滑块自由设定 |
|
||||
|
||||
安全机制:自定义模式下 CPU 达到设定温度(默认 95°C)自动交还系统控制;应用退出、崩溃或断开连接时风扇自动恢复。
|
||||
|
||||
### 设置
|
||||
|
||||
<p><img src="docs/images/settings-menubar-light.png" width="600" alt="设置"></p>
|
||||
|
||||
外观(跟随系统 / 浅色 / 深色)、登录时启动、刷新频率、温度单位、菜单栏显示项与样式、风扇安全温度、合盖模式电量下限。
|
||||
|
||||
## 技术实现
|
||||
|
||||
| 数据 | 来源 |
|
||||
|---|---|
|
||||
| CPU | `host_processor_info`,按 `hw.perflevelN` 区分核心类型 |
|
||||
| 内存 | `host_statistics64`,口径与活动监视器一致;`kern.memorystatus_vm_pressure_level` |
|
||||
| 网络 | `sysctl(NET_RT_IFLIST2)` 读取 64 位计数器(避免 `getifaddrs` 32 位回绕) |
|
||||
| GPU | `IOAccelerator` 的 `PerformanceStatistics` |
|
||||
| 温度 / 风扇 | AppleSMC;启动时枚举全部 SMC 键按前缀归类,**不硬编码芯片型号** |
|
||||
| 进程 | `proc_pid_rusage`,CPU 时间与墙钟时间同用 mach 时间单位 |
|
||||
| 电池 | `IOPowerSources` + `AppleSmartBattery` |
|
||||
|
||||
采集按界面需要分级:面板收起时只采菜单栏用到的指标;锁屏、屏幕休眠、系统睡眠时暂停。图表全部用 Canvas 自绘,面板关闭后立即销毁视图。
|
||||
|
||||
## 辅助工具与安全
|
||||
|
||||
风扇调速和“合盖后继续运行”需要系统权限,由 `SMAppService.daemon` 注册的辅助工具完成,首次使用时在“系统设置 › 通用 › 登录项”中批准一次。
|
||||
|
||||
- 只暴露固定的几个操作:设置风扇目标转速、恢复自动、切换 `pmset disablesleep`,**不提供任意命令执行**。
|
||||
- 通过 XPC 通信,并校验调用方代码签名。
|
||||
- 客户端断开时自动恢复风扇与睡眠设置;异常退出后下次开机也会恢复。
|
||||
|
||||
## 安装
|
||||
|
||||
尚未发布正式版本。发布后将提供经过 Developer ID 签名与 Apple 公证的 DMG。
|
||||
|
||||
## 从源码构建
|
||||
|
||||
需要 Xcode 16 及以上,以及 [XcodeGen](https://github.com/yonaskolb/XcodeGen):
|
||||
|
||||
```bash
|
||||
brew install xcodegen
|
||||
make run # 生成工程、编译并启动(Debug)
|
||||
make run CONFIG=Release # Release 构建
|
||||
make test # 单元测试
|
||||
make snapshot # 用本机实时数据渲染各页面截图到 build/snapshots
|
||||
make open # 生成并用 Xcode 打开工程
|
||||
```
|
||||
|
||||
开发调试参数:
|
||||
|
||||
- `--snapshot <目录>`:输出面板、设置页、菜单栏的浅色 / 深色截图
|
||||
- `--show-panel`:启动后展开并固定面板,用于测量面板打开时的资源占用
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
App/ 应用入口与图标
|
||||
Helper/ root 辅助工具及其 launchd 配置
|
||||
Packages/OpenStatsKit/
|
||||
Sources/SMC SMC 读写、风扇控制、温度传感器归类
|
||||
Sources/Metrics 指标采集与分级调度(MetricsHub)
|
||||
Sources/HelperShared XPC 协议
|
||||
Sources/OpenStatsUI 设计 token、面板、设置窗口、菜单栏绘制
|
||||
Tests/MetricsTests 单元测试
|
||||
project.yml XcodeGen 工程描述
|
||||
scripts/make-icon.swift 生成应用图标
|
||||
docs/PLAN.md 技术方案与调研记录
|
||||
```
|
||||
|
||||
## 路线图
|
||||
|
||||
- [x] 菜单栏多指标与多种显示样式
|
||||
- [x] 概览仪表盘、进程、散热、防休眠
|
||||
- [x] 液态玻璃面板与浅色 / 深色主题
|
||||
- [x] 风扇调速与合盖运行(辅助工具)
|
||||
- [ ] Developer ID 签名、公证与 DMG 发布
|
||||
- [ ] Sparkle 自动更新
|
||||
- [ ] 功耗、磁盘读写等更多指标
|
||||
- [ ] 桌面小组件
|
||||
|
||||
## 致谢
|
||||
|
||||
SMC 通信与 Apple Silicon 风扇控制流程移植自 [exelban/stats](https://github.com/exelban/stats)(MIT License),详见 [ThirdPartyNotices.md](ThirdPartyNotices.md)。
|
||||
|
||||
## 许可证
|
||||
|
||||
待定。
|
||||
Reference in new issue
Block a user