host-check-tool 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- host_check_tool-0.1.0/LICENSE +21 -0
- host_check_tool-0.1.0/PKG-INFO +167 -0
- host_check_tool-0.1.0/README.md +133 -0
- host_check_tool-0.1.0/procdiag/__init__.py +11 -0
- host_check_tool-0.1.0/procdiag/cli.py +820 -0
- host_check_tool-0.1.0/procdiag/config.py +307 -0
- host_check_tool-0.1.0/procdiag/core/__init__.py +56 -0
- host_check_tool-0.1.0/procdiag/core/result.py +137 -0
- host_check_tool-0.1.0/procdiag/core/rule.py +76 -0
- host_check_tool-0.1.0/procdiag/core/sampler.py +168 -0
- host_check_tool-0.1.0/procdiag/core/util.py +144 -0
- host_check_tool-0.1.0/procdiag/diagnosis/__init__.py +48 -0
- host_check_tool-0.1.0/procdiag/diagnosis/cpu.py +551 -0
- host_check_tool-0.1.0/procdiag/diagnosis/engine.py +389 -0
- host_check_tool-0.1.0/procdiag/diagnosis/io_disk.py +660 -0
- host_check_tool-0.1.0/procdiag/diagnosis/leak.py +434 -0
- host_check_tool-0.1.0/procdiag/diagnosis/memory.py +430 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/CPU-PERIODIC-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/CPU-SATURATION-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/CPU-SINGLECORE-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/DISK-FULL-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/DISK-GROWTH-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/DISK-JOURNAL-01.j2 +9 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/FD-LEAK-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/IO-BOTTLENECK-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/MEM-LEAK-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/MEM-PRESSURE-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/SWAP-THRASH-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/THREAD-LEAK-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/templates/ZOMBIE-01.j2 +5 -0
- host_check_tool-0.1.0/procdiag/diagnosis/trend.py +252 -0
- host_check_tool-0.1.0/procdiag/export.py +85 -0
- host_check_tool-0.1.0/procdiag/plugins.py +75 -0
- host_check_tool-0.1.0/procdiag/recorder.py +517 -0
- host_check_tool-0.1.0/procdiag/report.py +731 -0
- host_check_tool-0.1.0/procdiag/samplers/__init__.py +22 -0
- host_check_tool-0.1.0/procdiag/samplers/cgroup.py +229 -0
- host_check_tool-0.1.0/procdiag/samplers/disk.py +171 -0
- host_check_tool-0.1.0/procdiag/samplers/process.py +290 -0
- host_check_tool-0.1.0/procdiag/samplers/selfmeter.py +179 -0
- host_check_tool-0.1.0/procdiag/samplers/system.py +330 -0
- host_check_tool-0.1.0/procdiag/samplers/trigger.py +251 -0
- host_check_tool-0.1.0/procdiag/scheduler.py +146 -0
- host_check_tool-0.1.0/procdiag/service.py +128 -0
- host_check_tool-0.1.0/procdiag/storage.py +779 -0
- host_check_tool-0.1.0/pyproject.toml +52 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 hardwork9047
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: host-check-tool
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Local-first Linux host resource diagnosis (procdiag): record CPU/memory/disk over time, then explain what to fix.
|
|
5
|
+
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Keywords: linux,monitoring,diagnostics,psi,cgroup,procdiag,cli,sysadmin
|
|
8
|
+
Author: hardwork9047
|
|
9
|
+
Author-email: tomatosimple1104@gmail.com
|
|
10
|
+
Requires-Python: >=3.10,<4.0
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: System Administrators
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
|
+
Classifier: Topic :: System :: Monitoring
|
|
24
|
+
Classifier: Topic :: System :: Systems Administration
|
|
25
|
+
Requires-Dist: click (>=8.1,<9.0)
|
|
26
|
+
Requires-Dist: jinja2 (>=3.1,<4.0)
|
|
27
|
+
Requires-Dist: psutil (>=7.0,<8.0)
|
|
28
|
+
Requires-Dist: pydantic (>=2.7,<3.0)
|
|
29
|
+
Project-URL: Documentation, https://github.com/mikawa-bushi/host-check-tool/blob/main/docs/procdiag.md
|
|
30
|
+
Project-URL: Homepage, https://github.com/mikawa-bushi/host-check-tool
|
|
31
|
+
Project-URL: Repository, https://github.com/mikawa-bushi/host-check-tool
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
34
|
+
# host-check-tool
|
|
35
|
+
|
|
36
|
+
This package ships **`procdiag`** — a local-first Linux host-resource diagnosis
|
|
37
|
+
tool that is the sibling of
|
|
38
|
+
[network-check-tool / netdiag](https://github.com/mikawa-bushi/network-check-tool).
|
|
39
|
+
|
|
40
|
+
| | network-check-tool | **host-check-tool** |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| 配布物名 (PyPI) | `network-check-tool` | `host-check-tool` |
|
|
43
|
+
| 主役 CLI | `netdiag` | **`procdiag`** |
|
|
44
|
+
| 問いの分担 | 「どの層が壊れていて、なぜか」 | 「なぜこの PC が重い・落ちる・ディスクが満杯か」 |
|
|
45
|
+
| 根拠 | ネットワーク層のプローブ | CPU/メモリ/ディスクの時系列記録 |
|
|
46
|
+
|
|
47
|
+
`netdiag` がその場で測るのに対して、`procdiag` は**一定期間かけて記録し、
|
|
48
|
+
後から診断する**。ファクトリ・エッジ PC など IT 人材が常駐しない環境での
|
|
49
|
+
事後診断・改善提案を主用途とする。
|
|
50
|
+
|
|
51
|
+

|
|
52
|
+

|
|
53
|
+
|
|
54
|
+
## Quick Start
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# インストール
|
|
58
|
+
pip install host-check-tool
|
|
59
|
+
|
|
60
|
+
# 設定と data/ ディレクトリを生成
|
|
61
|
+
procdiag init
|
|
62
|
+
|
|
63
|
+
# 記録を開始 (Ctrl-C で安全に停止)
|
|
64
|
+
procdiag record
|
|
65
|
+
|
|
66
|
+
# 別のターミナルから — または記録停止後に実行
|
|
67
|
+
procdiag check
|
|
68
|
+
|
|
69
|
+
# HTML + JSON レポートを生成
|
|
70
|
+
procdiag report --out report.html --json report.json
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## コマンドリファレンス
|
|
74
|
+
|
|
75
|
+
| コマンド | 内容 |
|
|
76
|
+
|---|---|
|
|
77
|
+
| `procdiag init [DIR]` | `config.py` と `data/` を生成 |
|
|
78
|
+
| `procdiag record` | 常駐ループで CPU/メモリ/ディスクを記録 |
|
|
79
|
+
| `procdiag check` | 記録済みデータに診断ルールを実行し改善提案を出力 |
|
|
80
|
+
| `procdiag report` | HTML + JSON レポートを一括生成 |
|
|
81
|
+
| `procdiag status` | 記録期間・サンプル数・自己負荷を表示 |
|
|
82
|
+
| `procdiag explain [RULE\|sampler]` | ルールまたはサンプラーの詳細を表示 |
|
|
83
|
+
| `procdiag list-rules` | 登録済みルールを一覧表示 |
|
|
84
|
+
| `procdiag list-samplers` | 登録済みサンプラーを Tier 別に一覧表示 |
|
|
85
|
+
| `procdiag export` | 記録データを CSV または JSON でエクスポート |
|
|
86
|
+
| `procdiag prune` | 保持ポリシーの手動実行 |
|
|
87
|
+
| `procdiag service print` | systemd ユニットファイルを表示 |
|
|
88
|
+
| `procdiag service install` | user systemd ユニットを配置 |
|
|
89
|
+
|
|
90
|
+
主要オプション:
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
procdiag record --duration 24h --config config.py --db data/procdiag.db
|
|
94
|
+
procdiag check --format json --output findings.json
|
|
95
|
+
procdiag check --only MEM-LEAK-01,DISK-FULL-01
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
## 終了コード
|
|
99
|
+
|
|
100
|
+
`procdiag check` (alias: `procdiag advise`) の終了コードは netdiag と統一:
|
|
101
|
+
|
|
102
|
+
| コード | 意味 |
|
|
103
|
+
|---|---|
|
|
104
|
+
| `0` | Finding なし (正常) |
|
|
105
|
+
| `1` | critical / warning の Finding あり |
|
|
106
|
+
| `2` | info レベルの Finding のみ |
|
|
107
|
+
|
|
108
|
+
## systemd 運用
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# ユーザー systemd として配置
|
|
112
|
+
procdiag service install --config /etc/procdiag/config.py
|
|
113
|
+
|
|
114
|
+
# 有効化
|
|
115
|
+
systemctl --user daemon-reload
|
|
116
|
+
systemctl --user enable --now procdiag.service
|
|
117
|
+
|
|
118
|
+
# ログアウト後も継続する場合
|
|
119
|
+
sudo loginctl enable-linger $USER
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
system ユニット (root) として配置する場合:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
procdiag service print --system | sudo tee /etc/systemd/system/procdiag.service
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## 設定
|
|
129
|
+
|
|
130
|
+
`procdiag init` で生成される `config.py` を編集する。
|
|
131
|
+
Pydantic モデルで検証されるため、タイポや型ミスは起動時にエラーになる。
|
|
132
|
+
|
|
133
|
+
```python
|
|
134
|
+
config = ProcdiagConfig(
|
|
135
|
+
db_path="./data/procdiag.db",
|
|
136
|
+
sampling=SamplingConfig(
|
|
137
|
+
system_interval=1.0, # Tier1: PSI + CPU/Mem/IO (秒)
|
|
138
|
+
cgroup_interval=5.0, # Tier2a: cgroup v2 統計
|
|
139
|
+
process_interval=10.0, # Tier2b: プロセス走査
|
|
140
|
+
disk_interval=60.0, # Tier3: ディスク使用量
|
|
141
|
+
watch_dirs=[
|
|
142
|
+
WatchDir(path="/var/log", time_budget_sec=10),
|
|
143
|
+
],
|
|
144
|
+
),
|
|
145
|
+
retention=RetentionConfig(raw="48h", rollup="90d"),
|
|
146
|
+
)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 依存関係
|
|
150
|
+
|
|
151
|
+
- Python 3.10+
|
|
152
|
+
- psutil — OS メトリクス取得
|
|
153
|
+
- pydantic — 設定バリデーション
|
|
154
|
+
- jinja2 — HTML レポートテンプレート
|
|
155
|
+
- click — CLI フレームワーク
|
|
156
|
+
- 標準ライブラリのみ (sqlite3, signal, threading, …)
|
|
157
|
+
|
|
158
|
+
numpy・pandas・rich は**不要**。外部ネットワーク通信ゼロ。
|
|
159
|
+
|
|
160
|
+
## 詳細ドキュメント
|
|
161
|
+
|
|
162
|
+
設計・アーキテクチャ・ルールカタログは [docs/procdiag.md](docs/procdiag.md) を参照。
|
|
163
|
+
|
|
164
|
+
## ライセンス
|
|
165
|
+
|
|
166
|
+
MIT
|
|
167
|
+
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# host-check-tool
|
|
2
|
+
|
|
3
|
+
This package ships **`procdiag`** — a local-first Linux host-resource diagnosis
|
|
4
|
+
tool that is the sibling of
|
|
5
|
+
[network-check-tool / netdiag](https://github.com/mikawa-bushi/network-check-tool).
|
|
6
|
+
|
|
7
|
+
| | network-check-tool | **host-check-tool** |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 配布物名 (PyPI) | `network-check-tool` | `host-check-tool` |
|
|
10
|
+
| 主役 CLI | `netdiag` | **`procdiag`** |
|
|
11
|
+
| 問いの分担 | 「どの層が壊れていて、なぜか」 | 「なぜこの PC が重い・落ちる・ディスクが満杯か」 |
|
|
12
|
+
| 根拠 | ネットワーク層のプローブ | CPU/メモリ/ディスクの時系列記録 |
|
|
13
|
+
|
|
14
|
+
`netdiag` がその場で測るのに対して、`procdiag` は**一定期間かけて記録し、
|
|
15
|
+
後から診断する**。ファクトリ・エッジ PC など IT 人材が常駐しない環境での
|
|
16
|
+
事後診断・改善提案を主用途とする。
|
|
17
|
+
|
|
18
|
+

|
|
19
|
+

|
|
20
|
+
|
|
21
|
+
## Quick Start
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# インストール
|
|
25
|
+
pip install host-check-tool
|
|
26
|
+
|
|
27
|
+
# 設定と data/ ディレクトリを生成
|
|
28
|
+
procdiag init
|
|
29
|
+
|
|
30
|
+
# 記録を開始 (Ctrl-C で安全に停止)
|
|
31
|
+
procdiag record
|
|
32
|
+
|
|
33
|
+
# 別のターミナルから — または記録停止後に実行
|
|
34
|
+
procdiag check
|
|
35
|
+
|
|
36
|
+
# HTML + JSON レポートを生成
|
|
37
|
+
procdiag report --out report.html --json report.json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## コマンドリファレンス
|
|
41
|
+
|
|
42
|
+
| コマンド | 内容 |
|
|
43
|
+
|---|---|
|
|
44
|
+
| `procdiag init [DIR]` | `config.py` と `data/` を生成 |
|
|
45
|
+
| `procdiag record` | 常駐ループで CPU/メモリ/ディスクを記録 |
|
|
46
|
+
| `procdiag check` | 記録済みデータに診断ルールを実行し改善提案を出力 |
|
|
47
|
+
| `procdiag report` | HTML + JSON レポートを一括生成 |
|
|
48
|
+
| `procdiag status` | 記録期間・サンプル数・自己負荷を表示 |
|
|
49
|
+
| `procdiag explain [RULE\|sampler]` | ルールまたはサンプラーの詳細を表示 |
|
|
50
|
+
| `procdiag list-rules` | 登録済みルールを一覧表示 |
|
|
51
|
+
| `procdiag list-samplers` | 登録済みサンプラーを Tier 別に一覧表示 |
|
|
52
|
+
| `procdiag export` | 記録データを CSV または JSON でエクスポート |
|
|
53
|
+
| `procdiag prune` | 保持ポリシーの手動実行 |
|
|
54
|
+
| `procdiag service print` | systemd ユニットファイルを表示 |
|
|
55
|
+
| `procdiag service install` | user systemd ユニットを配置 |
|
|
56
|
+
|
|
57
|
+
主要オプション:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
procdiag record --duration 24h --config config.py --db data/procdiag.db
|
|
61
|
+
procdiag check --format json --output findings.json
|
|
62
|
+
procdiag check --only MEM-LEAK-01,DISK-FULL-01
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 終了コード
|
|
66
|
+
|
|
67
|
+
`procdiag check` (alias: `procdiag advise`) の終了コードは netdiag と統一:
|
|
68
|
+
|
|
69
|
+
| コード | 意味 |
|
|
70
|
+
|---|---|
|
|
71
|
+
| `0` | Finding なし (正常) |
|
|
72
|
+
| `1` | critical / warning の Finding あり |
|
|
73
|
+
| `2` | info レベルの Finding のみ |
|
|
74
|
+
|
|
75
|
+
## systemd 運用
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# ユーザー systemd として配置
|
|
79
|
+
procdiag service install --config /etc/procdiag/config.py
|
|
80
|
+
|
|
81
|
+
# 有効化
|
|
82
|
+
systemctl --user daemon-reload
|
|
83
|
+
systemctl --user enable --now procdiag.service
|
|
84
|
+
|
|
85
|
+
# ログアウト後も継続する場合
|
|
86
|
+
sudo loginctl enable-linger $USER
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
system ユニット (root) として配置する場合:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
procdiag service print --system | sudo tee /etc/systemd/system/procdiag.service
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## 設定
|
|
96
|
+
|
|
97
|
+
`procdiag init` で生成される `config.py` を編集する。
|
|
98
|
+
Pydantic モデルで検証されるため、タイポや型ミスは起動時にエラーになる。
|
|
99
|
+
|
|
100
|
+
```python
|
|
101
|
+
config = ProcdiagConfig(
|
|
102
|
+
db_path="./data/procdiag.db",
|
|
103
|
+
sampling=SamplingConfig(
|
|
104
|
+
system_interval=1.0, # Tier1: PSI + CPU/Mem/IO (秒)
|
|
105
|
+
cgroup_interval=5.0, # Tier2a: cgroup v2 統計
|
|
106
|
+
process_interval=10.0, # Tier2b: プロセス走査
|
|
107
|
+
disk_interval=60.0, # Tier3: ディスク使用量
|
|
108
|
+
watch_dirs=[
|
|
109
|
+
WatchDir(path="/var/log", time_budget_sec=10),
|
|
110
|
+
],
|
|
111
|
+
),
|
|
112
|
+
retention=RetentionConfig(raw="48h", rollup="90d"),
|
|
113
|
+
)
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 依存関係
|
|
117
|
+
|
|
118
|
+
- Python 3.10+
|
|
119
|
+
- psutil — OS メトリクス取得
|
|
120
|
+
- pydantic — 設定バリデーション
|
|
121
|
+
- jinja2 — HTML レポートテンプレート
|
|
122
|
+
- click — CLI フレームワーク
|
|
123
|
+
- 標準ライブラリのみ (sqlite3, signal, threading, …)
|
|
124
|
+
|
|
125
|
+
numpy・pandas・rich は**不要**。外部ネットワーク通信ゼロ。
|
|
126
|
+
|
|
127
|
+
## 詳細ドキュメント
|
|
128
|
+
|
|
129
|
+
設計・アーキテクチャ・ルールカタログは [docs/procdiag.md](docs/procdiag.md) を参照。
|
|
130
|
+
|
|
131
|
+
## ライセンス
|
|
132
|
+
|
|
133
|
+
MIT
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""procdiag — local-first Linux host resource diagnosis tool.
|
|
2
|
+
|
|
3
|
+
Records CPU, memory, and disk metrics over time using a layered sampler
|
|
4
|
+
architecture, then applies deterministic rules to explain why a machine is
|
|
5
|
+
slow, crashing, or running out of space.
|
|
6
|
+
|
|
7
|
+
This is the sibling tool of *netdiag* (network-check-tool): same design
|
|
8
|
+
vocabulary, same code idioms, same user-facing output style.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
__version__ = "0.1.0"
|