portacode 1.4.13.dev10__py3-none-any.whl → 1.4.13.dev11__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.
- portacode/_version.py +2 -2
- portacode/connection/handlers/system_handlers.py +46 -7
- {portacode-1.4.13.dev10.dist-info → portacode-1.4.13.dev11.dist-info}/METADATA +1 -1
- {portacode-1.4.13.dev10.dist-info → portacode-1.4.13.dev11.dist-info}/RECORD +8 -8
- {portacode-1.4.13.dev10.dist-info → portacode-1.4.13.dev11.dist-info}/WHEEL +0 -0
- {portacode-1.4.13.dev10.dist-info → portacode-1.4.13.dev11.dist-info}/entry_points.txt +0 -0
- {portacode-1.4.13.dev10.dist-info → portacode-1.4.13.dev11.dist-info}/licenses/LICENSE +0 -0
- {portacode-1.4.13.dev10.dist-info → portacode-1.4.13.dev11.dist-info}/top_level.txt +0 -0
portacode/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '1.4.13.
|
|
32
|
-
__version_tuple__ = version_tuple = (1, 4, 13, '
|
|
31
|
+
__version__ = version = '1.4.13.dev11'
|
|
32
|
+
__version_tuple__ = version_tuple = (1, 4, 13, 'dev11')
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -33,10 +33,11 @@ _cpu_thread = None
|
|
|
33
33
|
_cpu_lock = threading.Lock()
|
|
34
34
|
|
|
35
35
|
# Cgroup v2 tracking
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
_CGROUP_CPU_MAX = Path("/sys/fs/cgroup/cpu.max")
|
|
36
|
+
_CGROUP_ROOT = Path("/sys/fs/cgroup")
|
|
37
|
+
_cgroup_path: Optional[Path] = None
|
|
39
38
|
_cgroup_v2_supported: Optional[bool] = None
|
|
39
|
+
_CGROUP_CPU_STAT = "cpu.stat"
|
|
40
|
+
_CGROUP_CPU_MAX = "cpu.max"
|
|
40
41
|
_last_cgroup_usage: Optional[int] = None
|
|
41
42
|
_last_cgroup_time: Optional[float] = None
|
|
42
43
|
|
|
@@ -145,17 +146,54 @@ def _get_playwright_info() -> Dict[str, Any]:
|
|
|
145
146
|
return result
|
|
146
147
|
|
|
147
148
|
|
|
149
|
+
def _resolve_cgroup_path() -> Path:
|
|
150
|
+
global _cgroup_path
|
|
151
|
+
if _cgroup_path is not None and _cgroup_path.exists():
|
|
152
|
+
return _cgroup_path
|
|
153
|
+
path = _CGROUP_ROOT
|
|
154
|
+
cgroup_file = Path("/proc/self/cgroup")
|
|
155
|
+
if cgroup_file.exists():
|
|
156
|
+
try:
|
|
157
|
+
contents = cgroup_file.read_text()
|
|
158
|
+
except OSError:
|
|
159
|
+
pass
|
|
160
|
+
else:
|
|
161
|
+
for line in contents.splitlines():
|
|
162
|
+
line = line.strip()
|
|
163
|
+
if not line:
|
|
164
|
+
continue
|
|
165
|
+
parts = line.split(":", 2)
|
|
166
|
+
if len(parts) < 3:
|
|
167
|
+
continue
|
|
168
|
+
rel_path = parts[-1].lstrip("/")
|
|
169
|
+
candidate = _CGROUP_ROOT / rel_path
|
|
170
|
+
# Fallback to root path if the relative path is empty
|
|
171
|
+
candidate = candidate if rel_path else _CGROUP_ROOT
|
|
172
|
+
if candidate.exists():
|
|
173
|
+
path = candidate
|
|
174
|
+
break
|
|
175
|
+
_cgroup_path = path
|
|
176
|
+
return _cgroup_path
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def _cgroup_file(name: str) -> Path:
|
|
180
|
+
return _resolve_cgroup_path() / name
|
|
181
|
+
|
|
182
|
+
|
|
148
183
|
def _detect_cgroup_v2() -> bool:
|
|
149
184
|
global _cgroup_v2_supported
|
|
150
185
|
if _cgroup_v2_supported is not None:
|
|
151
186
|
return _cgroup_v2_supported
|
|
152
|
-
|
|
187
|
+
controllers = _cgroup_file("cgroup.controllers")
|
|
188
|
+
cpu_stat = _cgroup_file(_CGROUP_CPU_STAT)
|
|
189
|
+
_cgroup_v2_supported = controllers.exists() and cpu_stat.exists()
|
|
153
190
|
return _cgroup_v2_supported
|
|
154
191
|
|
|
155
192
|
|
|
156
193
|
def _read_cgroup_cpu_usage() -> Optional[int]:
|
|
194
|
+
path = _cgroup_file(_CGROUP_CPU_STAT)
|
|
157
195
|
try:
|
|
158
|
-
data =
|
|
196
|
+
data = path.read_text()
|
|
159
197
|
except (OSError, UnicodeDecodeError):
|
|
160
198
|
return None
|
|
161
199
|
for line in data.splitlines():
|
|
@@ -170,10 +208,11 @@ def _read_cgroup_cpu_usage() -> Optional[int]:
|
|
|
170
208
|
|
|
171
209
|
def _read_cgroup_cpu_limit() -> Optional[float]:
|
|
172
210
|
"""Return the allowed CPU (cores) for this cgroup, if limited."""
|
|
173
|
-
|
|
211
|
+
path = _cgroup_file(_CGROUP_CPU_MAX)
|
|
212
|
+
if not path.exists():
|
|
174
213
|
return None
|
|
175
214
|
try:
|
|
176
|
-
data =
|
|
215
|
+
data = path.read_text().strip()
|
|
177
216
|
except (OSError, UnicodeDecodeError):
|
|
178
217
|
return None
|
|
179
218
|
parts = data.split()
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
portacode/README.md,sha256=4dKtpvR8LNgZPVz37GmkQCMWIr_u25Ao63iW56s7Ke4,775
|
|
2
2
|
portacode/__init__.py,sha256=oB3sV1wXr-um-RXio73UG8E5Xx6cF2ZVJveqjNmC-vQ,1086
|
|
3
3
|
portacode/__main__.py,sha256=jmHTGC1hzmo9iKJLv-SSYe9BSIbPPZ2IOpecI03PlTs,296
|
|
4
|
-
portacode/_version.py,sha256=
|
|
4
|
+
portacode/_version.py,sha256=zwvS40cTQ2CYGHeO6SJ3GHWy--a952mG3NF6DeJJHdA,721
|
|
5
5
|
portacode/cli.py,sha256=mGLKoZ-T2FBF7IA9wUq0zyG0X9__-A1ao7gajjcVRH8,21828
|
|
6
6
|
portacode/data.py,sha256=5-s291bv8J354myaHm1Y7CQZTZyRzMU3TGe5U4hb-FA,1591
|
|
7
7
|
portacode/keypair.py,sha256=0OO4vHDcF1XMxCDqce61xFTlFwlTcmqe5HyGsXFEt7s,5838
|
|
@@ -25,7 +25,7 @@ portacode/connection/handlers/project_state_handlers.py,sha256=v6ZefGW9i7n1aZLq2
|
|
|
25
25
|
portacode/connection/handlers/proxmox_infra.py,sha256=v2IftCXnNO8ta8dWfdXf_eRBAeFO6YxkFTCSuTrp5ss,61134
|
|
26
26
|
portacode/connection/handlers/registry.py,sha256=qXGE60sYEWg6ZtVQzFcZ5YI2XWR6lMgw4hAL9x5qR1I,6181
|
|
27
27
|
portacode/connection/handlers/session.py,sha256=uNGfiO_1B9-_yjJKkpvmbiJhIl6b-UXlT86UTfd6WYE,42219
|
|
28
|
-
portacode/connection/handlers/system_handlers.py,sha256=
|
|
28
|
+
portacode/connection/handlers/system_handlers.py,sha256=fr12QpOr_Z8KYGUU-AYrTQwRPAcrLK85hvj3SEq1Kw8,14757
|
|
29
29
|
portacode/connection/handlers/tab_factory.py,sha256=yn93h6GASjD1VpvW1oqpax3EpoT0r7r97zFXxML1wdA,16173
|
|
30
30
|
portacode/connection/handlers/terminal_handlers.py,sha256=HRwHW1GiqG1NtHVEqXHKaYkFfQEzCDDH6YIlHcb4XD8,11866
|
|
31
31
|
portacode/connection/handlers/test_proxmox_infra.py,sha256=d6iBB4pwAqWWdEGRayLxDEexqCElbGZDJlCB4bXba24,682
|
|
@@ -65,7 +65,7 @@ portacode/utils/__init__.py,sha256=NgBlWTuNJESfIYJzP_3adI1yJQJR0XJLRpSdVNaBAN0,3
|
|
|
65
65
|
portacode/utils/diff_apply.py,sha256=4Oi7ft3VUCKmiUE4VM-OeqO7Gk6H7PF3WnN4WHXtjxI,15157
|
|
66
66
|
portacode/utils/diff_renderer.py,sha256=S76StnQ2DLfsz4Gg0m07UwPfRp8270PuzbNaQq-rmYk,13850
|
|
67
67
|
portacode/utils/ntp_clock.py,sha256=VqCnWCTehCufE43W23oB-WUdAZGeCcLxkmIOPwInYHc,2499
|
|
68
|
-
portacode-1.4.13.
|
|
68
|
+
portacode-1.4.13.dev11.dist-info/licenses/LICENSE,sha256=2FGbCnUDgRYuQTkB1O1dUUpu5CVAjK1j4_p6ack9Z54,1066
|
|
69
69
|
test_modules/README.md,sha256=Do_agkm9WhSzueXjRAkV_xEj6Emy5zB3N3VKY5Roce8,9274
|
|
70
70
|
test_modules/__init__.py,sha256=1LcbHodIHsB0g-g4NGjSn6AMuCoGbymvXPYLOb6Z7F0,53
|
|
71
71
|
test_modules/test_device_online.py,sha256=QtYq0Dq9vME8Gp2O4fGSheqVf8LUtpsSKosXXk56gGM,1654
|
|
@@ -91,8 +91,8 @@ testing_framework/core/playwright_manager.py,sha256=Tw46qwxIhOFkS48C2IWIQHHNpEe-
|
|
|
91
91
|
testing_framework/core/runner.py,sha256=j2QwNJmAxVBmJvcbVS7DgPJUKPNzqfLmt_4NNdaKmZU,19297
|
|
92
92
|
testing_framework/core/shared_cli_manager.py,sha256=BESSNtyQb7BOlaOvZmm04T8Uezjms4KCBs2MzTxvzYQ,8790
|
|
93
93
|
testing_framework/core/test_discovery.py,sha256=2FZ9fJ8Dp5dloA-fkgXoJ_gCMC_nYPBnA3Hs2xlagzM,4928
|
|
94
|
-
portacode-1.4.13.
|
|
95
|
-
portacode-1.4.13.
|
|
96
|
-
portacode-1.4.13.
|
|
97
|
-
portacode-1.4.13.
|
|
98
|
-
portacode-1.4.13.
|
|
94
|
+
portacode-1.4.13.dev11.dist-info/METADATA,sha256=4wB-lJZbvimQg_dd3hETH0i0Hl-7IXxHQN_Tb23ddQI,13052
|
|
95
|
+
portacode-1.4.13.dev11.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
|
|
96
|
+
portacode-1.4.13.dev11.dist-info/entry_points.txt,sha256=lLUUL-BM6_wwe44Xv0__5NQ1BnAz6jWjSMFvZdWW3zU,48
|
|
97
|
+
portacode-1.4.13.dev11.dist-info/top_level.txt,sha256=TGhTYUxfW8SyVZc_zGgzjzc24gGT7nSw8Qf73liVRKM,41
|
|
98
|
+
portacode-1.4.13.dev11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|