syscheck-cli 0.2.0__py3-none-any.whl
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.
- syscheck/__init__.py +2 -0
- syscheck/__main__.py +4 -0
- syscheck/cli.py +134 -0
- syscheck/cmdlang.py +109 -0
- syscheck/commands/__init__.py +8 -0
- syscheck/commands/cpu.py +45 -0
- syscheck/commands/disk.py +61 -0
- syscheck/commands/net.py +59 -0
- syscheck/commands/proc.py +35 -0
- syscheck/commands/ram.py +49 -0
- syscheck/commands/sys.py +43 -0
- syscheck/commands/temp.py +50 -0
- syscheck/commands/watch.py +115 -0
- syscheck/palette.py +30 -0
- syscheck/plugin.py +89 -0
- syscheck/plugins/__init__.py +1 -0
- syscheck/plugins/example.py +38 -0
- syscheck/providers.py +705 -0
- syscheck/screens.py +265 -0
- syscheck/shellguard.py +126 -0
- syscheck/tui.py +1086 -0
- syscheck/utils.py +111 -0
- syscheck_cli-0.2.0.dist-info/METADATA +14 -0
- syscheck_cli-0.2.0.dist-info/RECORD +27 -0
- syscheck_cli-0.2.0.dist-info/WHEEL +5 -0
- syscheck_cli-0.2.0.dist-info/entry_points.txt +2 -0
- syscheck_cli-0.2.0.dist-info/top_level.txt +1 -0
syscheck/utils.py
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Общие утилиты для форматирования и вывода.
|
|
2
|
+
|
|
3
|
+
Минималистичный стиль: без таблиц и рамок, без emoji, плоский текст
|
|
4
|
+
с выровненными колонками label / value. Акцентный цвет — cyan для
|
|
5
|
+
значений, dim для подписей.
|
|
6
|
+
"""
|
|
7
|
+
import os
|
|
8
|
+
from datetime import timedelta
|
|
9
|
+
from typing import Optional
|
|
10
|
+
|
|
11
|
+
from rich.console import Console
|
|
12
|
+
|
|
13
|
+
console = Console()
|
|
14
|
+
|
|
15
|
+
# Ширина колонки подписи по умолчанию в выровненных списках
|
|
16
|
+
LABEL_WIDTH = 12
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def bytes_to_human(n: float) -> str:
|
|
20
|
+
"""Конвертирует байты в читаемый формат."""
|
|
21
|
+
symbols = ("B", "KB", "MB", "GB", "TB", "PB")
|
|
22
|
+
prefix = {}
|
|
23
|
+
for i, s in enumerate(symbols):
|
|
24
|
+
prefix[s] = 1 << (i * 10)
|
|
25
|
+
for s in reversed(symbols):
|
|
26
|
+
if abs(n) >= prefix[s]:
|
|
27
|
+
value = float(n) / prefix[s]
|
|
28
|
+
return f"{value:.2f} {s}"
|
|
29
|
+
return f"{n} B"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def seconds_to_human(s: float) -> str:
|
|
33
|
+
"""Конвертирует секунды в читаемый формат."""
|
|
34
|
+
td = timedelta(seconds=int(s))
|
|
35
|
+
days = td.days
|
|
36
|
+
hours, remainder = divmod(td.seconds, 3600)
|
|
37
|
+
minutes, secs = divmod(remainder, 60)
|
|
38
|
+
parts = []
|
|
39
|
+
if days:
|
|
40
|
+
parts.append(f"{days}d")
|
|
41
|
+
if hours:
|
|
42
|
+
parts.append(f"{hours}h")
|
|
43
|
+
if minutes:
|
|
44
|
+
parts.append(f"{minutes}m")
|
|
45
|
+
parts.append(f"{secs}s")
|
|
46
|
+
return " ".join(parts)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def get_color_for_percent(percent: float) -> str:
|
|
50
|
+
"""Возвращает цвет в зависимости от процента нагрузки.
|
|
51
|
+
|
|
52
|
+
Красный/жёлтый — только для реальных предупреждений (высокая нагрузка).
|
|
53
|
+
Обычные значения — нейтральный cyan.
|
|
54
|
+
"""
|
|
55
|
+
if percent >= 90:
|
|
56
|
+
return "red"
|
|
57
|
+
elif percent >= 75:
|
|
58
|
+
return "yellow"
|
|
59
|
+
else:
|
|
60
|
+
return "cyan"
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def make_bar(percent: float, width: int = 12) -> str:
|
|
64
|
+
"""Создаёт ASCII прогресс-бар вида [####......]."""
|
|
65
|
+
filled = int(width * percent / 100)
|
|
66
|
+
filled = max(0, min(width, filled))
|
|
67
|
+
empty = width - filled
|
|
68
|
+
body = "#" * filled + "." * empty
|
|
69
|
+
# цвет только при фактическом перегрузе
|
|
70
|
+
if percent >= 90:
|
|
71
|
+
colour = "[red]"
|
|
72
|
+
elif percent >= 75:
|
|
73
|
+
colour = "[yellow]"
|
|
74
|
+
else:
|
|
75
|
+
colour = "[cyan]"
|
|
76
|
+
return f"{colour}[{body}][/]"
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def kv(label: str, value: str, label_width: int = LABEL_WIDTH) -> str:
|
|
80
|
+
"""Формирует строку 'label<TAB>value' с выравниванием по колонке."""
|
|
81
|
+
return f"{label.ljust(label_width)}{value}"
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def print_kv(label: str, value: str, label_width: int = LABEL_WIDTH):
|
|
85
|
+
"""Печатает пару подпись-значение в плоском стиле."""
|
|
86
|
+
console.print(kv(label, value, label_width))
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def print_header(text: str):
|
|
90
|
+
"""Печатает маленький заголовок команды нижним регистром."""
|
|
91
|
+
console.print(f"[dim]{text}[/]")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def print_ok(msg: str):
|
|
95
|
+
"""Печатает положительное сообщение с ASCII-меткой [+ ]."""
|
|
96
|
+
console.print(f" [bold green][+] [/]{msg}")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def print_warning(msg: str):
|
|
100
|
+
"""Печатает предупреждение с ASCII-меткой [!]. Красный/жёлтый."""
|
|
101
|
+
console.print(f" [bold yellow][!] [/]{msg}")
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def print_error(msg: str):
|
|
105
|
+
"""Печатает ошибку с ASCII-меткой [x]."""
|
|
106
|
+
console.print(f" [bold red][x] [/]{msg}")
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def print_value(label: str, value: str, colour: Optional[str] = None):
|
|
110
|
+
"""Печатает пару, где значение подсвечено (по умолчанию cyan)."""
|
|
111
|
+
console.print(kv(label, f"[{colour or 'cyan'}]{value}[/]"))
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: syscheck-cli
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: CLI utility for system diagnostics
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Requires-Dist: psutil>=5.9.0
|
|
7
|
+
Requires-Dist: rich>=13.0.0
|
|
8
|
+
Requires-Dist: typer>=0.9.0
|
|
9
|
+
Requires-Dist: textual>=0.80.0
|
|
10
|
+
Provides-Extra: dev
|
|
11
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
12
|
+
Requires-Dist: build>=1.0.0; extra == "dev"
|
|
13
|
+
Requires-Dist: twine>=4.0.0; extra == "dev"
|
|
14
|
+
Requires-Dist: pyinstaller>=6.0.0; extra == "dev"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
syscheck/__init__.py,sha256=lMmqqTa5-dlJnzMgh2uIiS2SR6zDT5v6h2YebP0WaAQ,103
|
|
2
|
+
syscheck/__main__.py,sha256=L0e3xgXMsGogY0R6GovCuKpVkNYVzHtEj82Dk2iGOek,85
|
|
3
|
+
syscheck/cli.py,sha256=t3flDdfsagISsJ3qscJxtpvv_8HtcgMKScBuCnmlY8Q,4340
|
|
4
|
+
syscheck/cmdlang.py,sha256=lOoJ43TIVw-syFsCEd7t5-A3weDQH-OVP0EoEt7f6H8,5514
|
|
5
|
+
syscheck/palette.py,sha256=nZ_DgNHzgPVH3VJ5G5RZxMwefeN-g2S9lMsseE88eng,819
|
|
6
|
+
syscheck/plugin.py,sha256=q-RnruCgfzZU_-pXigk7NTW2VzZR8NWKdyW12KB1o8Y,2676
|
|
7
|
+
syscheck/providers.py,sha256=bD26EH8hlTGLnmjUMlF3cAddGfxg5L4VuSTYlh5xzJ8,25224
|
|
8
|
+
syscheck/screens.py,sha256=4mjf602UK2daCGBV5O87EogXnxSpUX0-jOf0gvW9BzE,7934
|
|
9
|
+
syscheck/shellguard.py,sha256=wKV2vzAwkHCnX8sbOgt21y6LCmrMPHPyCb3zuXrAFp4,4991
|
|
10
|
+
syscheck/tui.py,sha256=b-B1_NDqfLXXwPwQZ3LuOAgzEvDdoZB6SxpqOaF1bPw,42527
|
|
11
|
+
syscheck/utils.py,sha256=RcVXxBxNTVLYbsfYk6iijXSdZRWW2PGlCxqDNj0nNJ4,3930
|
|
12
|
+
syscheck/commands/__init__.py,sha256=CimNmXVSyFRat1ygEoDPEI7RJ-OYs2UtjZKnism1sDo,350
|
|
13
|
+
syscheck/commands/cpu.py,sha256=YaNN8wbBiUbJKvUkw5Iz-iJVkHEz6KkXnAzlVTdw2AM,1550
|
|
14
|
+
syscheck/commands/disk.py,sha256=sLFndyc0KEazf8p_qkMsfaS2fKDc0dk5nnhkD30s0Hk,1923
|
|
15
|
+
syscheck/commands/net.py,sha256=DIQ8ly4Vj1R5VXXtbTDsXIIe-VGCcpSxDjegQbfHdt0,2255
|
|
16
|
+
syscheck/commands/proc.py,sha256=89WrVuHcHLve-ufD-YZFRhSXo2BFOdT3f4us-_-Zr94,1263
|
|
17
|
+
syscheck/commands/ram.py,sha256=cEBv8GwXZ9b6vevCnQl2bu2K8pJ8ANtMg1yCW24Md6s,1669
|
|
18
|
+
syscheck/commands/sys.py,sha256=MsK2gQrX8H0uN0FkcgTusER5Up_CmAhdxrs3sSlbW7E,1753
|
|
19
|
+
syscheck/commands/temp.py,sha256=kop9GGqQ1kiBTRIJzA6kQPJ-8HExMkCuh9fnqZpu0hE,1757
|
|
20
|
+
syscheck/commands/watch.py,sha256=ZsGE5o8_dLmkH5vjgnwQSqxdDfSrQt4xqw83nra13N8,4642
|
|
21
|
+
syscheck/plugins/__init__.py,sha256=hRrtcVAxykRSVA52dFdVPaBMrg0lDDW1aHHVzGgJDx0,79
|
|
22
|
+
syscheck/plugins/example.py,sha256=JgcTMdRTqVb-_R9B5gVqolujwRBhRZrezZSMAbTjYOg,1421
|
|
23
|
+
syscheck_cli-0.2.0.dist-info/METADATA,sha256=BvpcoPHvA-AgFpadGUovBGbBouukRBs9nIv_xG2ir_U,457
|
|
24
|
+
syscheck_cli-0.2.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
25
|
+
syscheck_cli-0.2.0.dist-info/entry_points.txt,sha256=5fNhUySM5r6lVlP7LzQnD-952LN2uFE-2_g6bEgsHDw,47
|
|
26
|
+
syscheck_cli-0.2.0.dist-info/top_level.txt,sha256=SnCstMf1gaLG0aXZ1GHH89hjN4YRW_de3RwF6fWU1pM,9
|
|
27
|
+
syscheck_cli-0.2.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
syscheck
|