nodeocc 1.0.19.post1__tar.gz → 1.0.21__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.
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/PKG-INFO +1 -1
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/pyproject.toml +1 -1
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/model/infrastructure.py +1 -1
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/nodeocc.egg-info/PKG-INFO +1 -1
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/view/curses_multiwindow.py +4 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/view/utils.py +3 -4
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/README.md +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/setup.cfg +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/setup.py +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/__init__.py +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/controller/controller.py +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/model/job.py +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/nodeocc.egg-info/SOURCES.txt +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/nodeocc.egg-info/dependency_links.txt +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/nodeocc.egg-info/entry_points.txt +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/nodeocc.egg-info/requires.txt +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/nodeocc.egg-info/top_level.txt +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/readers/compute_wait_time.py +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/readers/slurmreader.py +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/view/__init__.py +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/view/slurm_list.py +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/view/slurm_viz.py +0 -0
- {nodeocc-1.0.19.post1 → nodeocc-1.0.21}/src/view/styles.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "nodeocc"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.21"
|
|
8
8
|
authors = [{ name = "Matteo Boschini" }]
|
|
9
9
|
maintainers = [{ name = "Lorenzo Bonicelli" }, { name = "Aniello Panariello" }]
|
|
10
10
|
description = "TUI application for viewing the status of GPU allocations on a Slurm cluster"
|
|
@@ -98,4 +98,4 @@ class Infrastructure:
|
|
|
98
98
|
return sorted(self.nodes, key=lambda x: self.prior.index(x.gpu_model.split(',')[0]) if x.gpu_model.split(',')[0] in self.prior else -1)
|
|
99
99
|
|
|
100
100
|
def get_next_maintenance(self):
|
|
101
|
-
return sorted(self.maintenances, key=lambda x: to_datetime(x.
|
|
101
|
+
return sorted(self.maintenances, key=lambda x: to_datetime(x.start_time))[0] if len(self.maintenances) else None
|
|
@@ -93,6 +93,8 @@ class Singleton:
|
|
|
93
93
|
def clean_port_files(self):
|
|
94
94
|
nodename = socket.getfqdn().split('.')[0]
|
|
95
95
|
bp = os.path.join(self.basepath, nodename)
|
|
96
|
+
if not os.path.exists(bp):
|
|
97
|
+
return True
|
|
96
98
|
for f in os.listdir(bp):
|
|
97
99
|
if 'master_' in f and f.endswith('.portfile') and is_file_writable_byall(os.path.join(bp, f)):
|
|
98
100
|
# read pid from file
|
|
@@ -167,6 +169,8 @@ class Singleton:
|
|
|
167
169
|
"""
|
|
168
170
|
nodename = socket.getfqdn().split('.')[0]
|
|
169
171
|
bp = os.path.join(self.basepath, nodename)
|
|
172
|
+
if not os.path.exists(bp):
|
|
173
|
+
return []
|
|
170
174
|
portfiles = [os.path.join(bp, f) for f in os.listdir(bp)
|
|
171
175
|
if f.endswith('.portfile') and 'master_' in f]
|
|
172
176
|
portfiles = [f for f in portfiles if is_file_readable_byall(f) and is_file_writable_byall(f)]
|
|
@@ -3,7 +3,6 @@ import re
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
def is_student_viz(user):
|
|
8
7
|
return user.user_group in ('studenti', 'tesisti') and not is_cvcs_viz(user)
|
|
9
8
|
|
|
@@ -27,7 +26,7 @@ def to_datetime(time_str):
|
|
|
27
26
|
def to_datetime(time_str):
|
|
28
27
|
try:
|
|
29
28
|
dt = np.datetime64(re.match(r'\d+\s+(.*)\n', str(time_str)).group(1))
|
|
30
|
-
except:
|
|
29
|
+
except BaseException:
|
|
31
30
|
dt = np.datetime64(str(time_str))
|
|
32
31
|
return dt
|
|
33
32
|
|
|
@@ -38,8 +37,8 @@ def maintenance_status(infrastructure):
|
|
|
38
37
|
if len(infrastructure.maintenances):
|
|
39
38
|
# time format: '0 2023-12-04 14:00:00\nName: StartTime, dtype: datetime64[ns]'
|
|
40
39
|
next_maintenance = infrastructure.get_next_maintenance()
|
|
41
|
-
start_time = to_datetime(next_maintenance.
|
|
42
|
-
end_time = to_datetime(next_maintenance.
|
|
40
|
+
start_time = to_datetime(next_maintenance.start_time)
|
|
41
|
+
end_time = to_datetime(next_maintenance.end_time)
|
|
43
42
|
time_to_maintenance = (start_time - np.datetime64('now')).astype(float)
|
|
44
43
|
# TODO: fix timezone
|
|
45
44
|
if time_to_maintenance < 0 and (end_time - np.datetime64('now')) > 0:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|