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.
Files changed (46) hide show
  1. host_check_tool-0.1.0/LICENSE +21 -0
  2. host_check_tool-0.1.0/PKG-INFO +167 -0
  3. host_check_tool-0.1.0/README.md +133 -0
  4. host_check_tool-0.1.0/procdiag/__init__.py +11 -0
  5. host_check_tool-0.1.0/procdiag/cli.py +820 -0
  6. host_check_tool-0.1.0/procdiag/config.py +307 -0
  7. host_check_tool-0.1.0/procdiag/core/__init__.py +56 -0
  8. host_check_tool-0.1.0/procdiag/core/result.py +137 -0
  9. host_check_tool-0.1.0/procdiag/core/rule.py +76 -0
  10. host_check_tool-0.1.0/procdiag/core/sampler.py +168 -0
  11. host_check_tool-0.1.0/procdiag/core/util.py +144 -0
  12. host_check_tool-0.1.0/procdiag/diagnosis/__init__.py +48 -0
  13. host_check_tool-0.1.0/procdiag/diagnosis/cpu.py +551 -0
  14. host_check_tool-0.1.0/procdiag/diagnosis/engine.py +389 -0
  15. host_check_tool-0.1.0/procdiag/diagnosis/io_disk.py +660 -0
  16. host_check_tool-0.1.0/procdiag/diagnosis/leak.py +434 -0
  17. host_check_tool-0.1.0/procdiag/diagnosis/memory.py +430 -0
  18. host_check_tool-0.1.0/procdiag/diagnosis/templates/CPU-PERIODIC-01.j2 +5 -0
  19. host_check_tool-0.1.0/procdiag/diagnosis/templates/CPU-SATURATION-01.j2 +5 -0
  20. host_check_tool-0.1.0/procdiag/diagnosis/templates/CPU-SINGLECORE-01.j2 +5 -0
  21. host_check_tool-0.1.0/procdiag/diagnosis/templates/DISK-FULL-01.j2 +5 -0
  22. host_check_tool-0.1.0/procdiag/diagnosis/templates/DISK-GROWTH-01.j2 +5 -0
  23. host_check_tool-0.1.0/procdiag/diagnosis/templates/DISK-JOURNAL-01.j2 +9 -0
  24. host_check_tool-0.1.0/procdiag/diagnosis/templates/FD-LEAK-01.j2 +5 -0
  25. host_check_tool-0.1.0/procdiag/diagnosis/templates/IO-BOTTLENECK-01.j2 +5 -0
  26. host_check_tool-0.1.0/procdiag/diagnosis/templates/MEM-LEAK-01.j2 +5 -0
  27. host_check_tool-0.1.0/procdiag/diagnosis/templates/MEM-PRESSURE-01.j2 +5 -0
  28. host_check_tool-0.1.0/procdiag/diagnosis/templates/SWAP-THRASH-01.j2 +5 -0
  29. host_check_tool-0.1.0/procdiag/diagnosis/templates/THREAD-LEAK-01.j2 +5 -0
  30. host_check_tool-0.1.0/procdiag/diagnosis/templates/ZOMBIE-01.j2 +5 -0
  31. host_check_tool-0.1.0/procdiag/diagnosis/trend.py +252 -0
  32. host_check_tool-0.1.0/procdiag/export.py +85 -0
  33. host_check_tool-0.1.0/procdiag/plugins.py +75 -0
  34. host_check_tool-0.1.0/procdiag/recorder.py +517 -0
  35. host_check_tool-0.1.0/procdiag/report.py +731 -0
  36. host_check_tool-0.1.0/procdiag/samplers/__init__.py +22 -0
  37. host_check_tool-0.1.0/procdiag/samplers/cgroup.py +229 -0
  38. host_check_tool-0.1.0/procdiag/samplers/disk.py +171 -0
  39. host_check_tool-0.1.0/procdiag/samplers/process.py +290 -0
  40. host_check_tool-0.1.0/procdiag/samplers/selfmeter.py +179 -0
  41. host_check_tool-0.1.0/procdiag/samplers/system.py +330 -0
  42. host_check_tool-0.1.0/procdiag/samplers/trigger.py +251 -0
  43. host_check_tool-0.1.0/procdiag/scheduler.py +146 -0
  44. host_check_tool-0.1.0/procdiag/service.py +128 -0
  45. host_check_tool-0.1.0/procdiag/storage.py +779 -0
  46. 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
+ ![Python Version](https://img.shields.io/badge/Python-3.10%2B-blue)
52
+ ![License](https://img.shields.io/badge/License-MIT-yellow)
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
+ ![Python Version](https://img.shields.io/badge/Python-3.10%2B-blue)
19
+ ![License](https://img.shields.io/badge/License-MIT-yellow)
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"