Metadata-Version: 2.4
Name: fourier-resm
Version: 1.2.0
Summary: 远程主机资源监控工具：SSH 采集 CPU / 内存 / 网络 / 磁盘 / 温度 + 持续 ping，支持 Web 实时面板与日志回放
Author: Fourier
License: MIT
Project-URL: Homepage, https://gitlab.fftaicorp.com/pfs/resource_monitor
Project-URL: Source, https://gitlab.fftaicorp.com/pfs/resource_monitor
Keywords: monitoring,ssh,ping,resource,system,flask,dashboard
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: System Administrators
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: POSIX :: Linux
Classifier: Operating System :: MacOS
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: System :: Monitoring
Classifier: Topic :: System :: Networking :: Monitoring
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: paramiko>=3.0.0
Requires-Dist: flask>=3.0.0
Dynamic: license-file

# fourier-resm · 远程主机监控工具

[![PyPI version](https://img.shields.io/pypi/v/fourier-resm.svg)](https://pypi.org/project/fourier-resm/)
[![Python versions](https://img.shields.io/pypi/pyversions/fourier-resm.svg)](https://pypi.org/project/fourier-resm/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)

持续 ping 目标 IP 并通过 SSH 采集目标机器的系统资源（CPU / 内存 / Swap / 网络 / 磁盘 IO / CPU 温度 / loadavg），实时写入 CSV 日志，并附带 Web 实时面板与日志回放。

PyPI: <https://pypi.org/project/fourier-resm/>

## 安装

```bash
pip install fourier-resm
```

## 快速开始

```bash
fourier-resm <user> <host>
```

默认会：交互式提示输入 SSH 密码 → 启动 Web 面板于 <http://0.0.0.0:8000/>。

示例：
```bash
fourier-resm root 192.168.1.100
fourier-resm ubuntu 10.0.0.5 --ping-interval 0.5 --res-interval 1 -o ./logs
fourier-resm root 192.168.1.100 -k ~/.ssh/id_rsa --no-ask-pass    # 用密钥
fourier-resm root 192.168.1.100 --no-web                          # 仅 CLI
fourier-resm --replay-only ./logs                                 # 只读回放目录
fourier-resm --replay-only ./logs/ping_1.2.3.4_20260423_120000.csv # 只读回放单会话
```

## 功能

- **Ping**：默认 1s 一次（可调 0.05 ~ 60s），延迟精度 0.001 ms。
- **SSH 资源采集**：通过远端 `/proc/*` 计算 1 秒区间的 CPU / 网络 / 磁盘速率：
  - `cpu_percent`
  - `mem_total/used/avail_MB`、`mem_percent`
  - `swap_total/used_MB`、`swap_percent`
  - `net_rx/tx`（Mbps 与 MB/s 双单位）
  - `disk_read/write`（MB/s）
  - `cpu_temp_C`（优先 coretemp/k10temp/thermal_zone）
  - `loadavg`（1/5/15 分钟）
  - 每块网卡的 rx/tx 速率
- **实时写盘**：每条记录立即 flush 到 CSV。
- **Web 面板**：6 个 KPI + 6 张 Chart.js 实时图，支持「最近 N 分钟」窗口、运行时调节采样频率。
- **日志回放**：列出历史会话，双端点时间滑块 + 播放头，全部图表同步回放，支持变速。
- **断线自动重连**：SSH 断开后指数退避重连；ping 线程独立不受影响。

## 参数

| 参数 | 说明 | 默认 |
| --- | --- | --- |
| `user` | SSH 用户名（位置参数） | 必填 |
| `host` | 目标 IP / 主机名（位置参数） | 必填 |
| `-P/--port` | SSH 端口 | 22 |
| `-k/--key` | SSH 私钥路径 | 无（尝试 ssh-agent / 默认密钥） |
| `-p/--password` | SSH 密码（不建议命令行传入） | 无 |
| `--no-ask-pass` | 禁用交互式密码输入 | 默认**开启**交互 |
| `--ping-interval` | Ping 间隔（秒） | 1.0 |
| `--res-interval` | 资源采样间隔（秒） | 2.0 |
| `-o/--output` | 日志目录 | `./logs` |
| `--replay-only PATH` | 只读回放模式：只读取历史日志目录或单个 CSV，会自动启用 Web，不进行采集与写盘 | 无 |
| `--no-web` | 禁用 Web 面板 | 默认**开启** Web |
| `--web-host` | Web 监听地址 | `0.0.0.0` |
| `--web-port` | Web 监听端口 | 8000 |

## 输出

在 `-o` 指定目录（默认 `./logs`）下生成：

- `ping_<host>_<时间戳>.csv`：`timestamp, host, latency(ms), status`
- `resource_<host>_<时间戳>.csv`：含 CPU / 内存 / Swap / 网络(Mbps & MB/s) / 磁盘 / CPU 温度 / loadavg / 每网卡速率

控制台每 5 秒打印一次 ping 丢包 / min/avg/max 汇总。

## 目标机器要求

- Linux，有 `python3`（或 `python`）；仅读取 `/proc/*` 与 `/sys/class/thermal|hwmon`。
- SSH 可连接。
- 若 ICMP 被禁用，ping 会全部超时，但 SSH 资源采集仍正常工作。

## 源码开发

```bash
git clone https://gitlab.fftaicorp.com/pfs/resource_monitor.git
cd resource_monitor
pip install -e .
fourier-resm <user> <host>
```

## License

MIT — 见 [LICENSE](./LICENSE)。
