Skip to content

Commit 2bdab6b

Browse files
author
Reda.Drissi.e
committed
Added multi-disk support
1 parent 2fcdeb1 commit 2bdab6b

File tree

8 files changed

+171
-71
lines changed

8 files changed

+171
-71
lines changed

library/config.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,12 @@ def load_yaml(configfile):
3838
FONTS_DIR = str(MAIN_DIRECTORY / "res" / "fonts") + "/"
3939
CONFIG_DATA = load_yaml(MAIN_DIRECTORY / "config.yaml")
4040
THEME_DEFAULT = load_yaml(MAIN_DIRECTORY / "res/themes/default.yaml")
41+
THEME_DISK_DEFAULT = load_yaml("res/themes/default_disk.yaml")
4142
THEME_DATA = None
4243

4344

45+
46+
4447
def copy_default(default, theme):
4548
"""recursively supply default values into a dict of dicts of dicts ...."""
4649
for k, v in default.items():
@@ -66,6 +69,10 @@ def load_theme():
6669

6770
copy_default(THEME_DEFAULT, THEME_DATA)
6871

72+
if THEME_DATA['STATS']['DISK'].get("MOUNTS", False):
73+
for mount in THEME_DATA['STATS']['DISK']['MOUNTS']:
74+
mountpoint = [k for k, v in mount.items()][0]
75+
copy_default(THEME_DISK_DEFAULT, mount[mountpoint])
6976

7077
def check_theme_compatible(display_size: str):
7178
global THEME_DATA

library/sensors/sensors.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,17 +103,17 @@ def virtual_free() -> int: # In bytes
103103
class Disk(ABC):
104104
@staticmethod
105105
@abstractmethod
106-
def disk_usage_percent() -> float:
106+
def disk_usage_percent(path) -> float:
107107
pass
108108

109109
@staticmethod
110110
@abstractmethod
111-
def disk_used() -> int: # In bytes
111+
def disk_used(path) -> int: # In bytes
112112
pass
113113

114114
@staticmethod
115115
@abstractmethod
116-
def disk_free() -> int: # In bytes
116+
def disk_free(path) -> int: # In bytes
117117
pass
118118

119119

library/sensors/sensors_python.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -443,23 +443,23 @@ def virtual_free() -> int: # In bytes
443443

444444
class Disk(sensors.Disk):
445445
@staticmethod
446-
def disk_usage_percent() -> float:
446+
def disk_usage_percent(path) -> float:
447447
try:
448-
return psutil.disk_usage("/").percent
448+
return psutil.disk_usage(path).percent
449449
except:
450450
return math.nan
451451

452452
@staticmethod
453-
def disk_used() -> int: # In bytes
453+
def disk_used(path) -> int: # In bytes
454454
try:
455-
return psutil.disk_usage("/").used
455+
return psutil.disk_usage(path).used
456456
except:
457457
return -1
458458

459459
@staticmethod
460-
def disk_free() -> int: # In bytes
460+
def disk_free(path) -> int: # In bytes
461461
try:
462-
return psutil.disk_usage("/").free
462+
return psutil.disk_usage(path).free
463463
except:
464464
return -1
465465

library/sensors/sensors_stub_random.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,15 @@ def virtual_free() -> int: # In bytes
9191

9292
class Disk(sensors.Disk):
9393
@staticmethod
94-
def disk_usage_percent() -> float:
94+
def disk_usage_percent(path) -> float:
9595
return random.uniform(0, 100)
9696

9797
@staticmethod
98-
def disk_used() -> int: # In bytes
98+
def disk_used(path) -> int: # In bytes
9999
return random.randint(1000000000, 2000000000000)
100100

101101
@staticmethod
102-
def disk_free() -> int: # In bytes
102+
def disk_free(path) -> int: # In bytes
103103
return random.randint(1000000000, 2000000000000)
104104

105105

library/stats.py

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -645,37 +645,46 @@ class Disk:
645645

646646
@classmethod
647647
def stats(cls):
648-
used = sensors.Disk.disk_used()
649-
free = sensors.Disk.disk_free()
650-
651-
disk_theme_data = config.THEME_DATA['STATS']['DISK']
652-
653-
disk_usage_percent = sensors.Disk.disk_usage_percent()
654-
save_last_value(disk_usage_percent, cls.last_values_disk_usage,
655-
disk_theme_data['USED']['LINE_GRAPH'].get("HISTORY_SIZE", DEFAULT_HISTORY_SIZE))
656-
display_themed_progress_bar(disk_theme_data['USED']['GRAPH'], disk_usage_percent)
657-
display_themed_percent_radial_bar(disk_theme_data['USED']['RADIAL'], disk_usage_percent)
658-
display_themed_percent_value(disk_theme_data['USED']['PERCENT_TEXT'], disk_usage_percent)
659-
display_themed_line_graph(disk_theme_data['USED']['LINE_GRAPH'], cls.last_values_disk_usage)
648+
if 'MOUNTS' not in config.THEME_DATA['STATS']['DISK']:
649+
print("Doing mounts")
650+
mountpoints = [ config.THEME_DATA['STATS']['DISK'] ]
651+
else:
652+
mountpoints = config.THEME_DATA['STATS']['DISK']['MOUNTS']
660653

661-
display_themed_value(
662-
theme_data=disk_theme_data['USED']['TEXT'],
663-
value=int(used / 1000000000),
664-
min_size=5,
665-
unit=" G"
666-
)
667-
display_themed_value(
668-
theme_data=disk_theme_data['TOTAL']['TEXT'],
669-
value=int((free + used) / 1000000000),
670-
min_size=5,
671-
unit=" G"
672-
)
673-
display_themed_value(
674-
theme_data=disk_theme_data['FREE']['TEXT'],
675-
value=int(free / 1000000000),
676-
min_size=5,
677-
unit=" G"
678-
)
654+
for mount in mountpoints:
655+
mountpoint = [k for k, v in mount.items()][0]
656+
disk_theme_data = mount[mountpoint]
657+
if not os.path.exists(mountpoint):
658+
logger.warning('Invalid mount point in config: "%s"' % mountpoint)
659+
else:
660+
used = sensors.Disk.disk_used(mountpoint)
661+
free = sensors.Disk.disk_free(mountpoint)
662+
663+
disk_usage_percent = sensors.Disk.disk_usage_percent(mountpoint)
664+
save_last_value(disk_usage_percent, cls.last_values_disk_usage, DEFAULT_HISTORY_SIZE)
665+
#display_themed_progress_bar(disk_theme_data['USED']['GRAPH'], disk_usage_percent)
666+
#display_themed_percent_radial_bar(disk_theme_data['USED']['RADIAL'], disk_usage_percent)
667+
display_themed_percent_value(disk_theme_data['USED']['PERCENT_TEXT'], disk_usage_percent)
668+
#display_themed_line_graph(disk_theme_data['USED']['LINE_GRAPH'], cls.last_values_disk_usage)
669+
670+
display_themed_value(
671+
theme_data=disk_theme_data['USED']['TEXT'],
672+
value=int(used / 1000000000),
673+
min_size=5,
674+
unit=" G"
675+
)
676+
display_themed_value(
677+
theme_data=disk_theme_data['TOTAL']['TEXT'],
678+
value=int((free + used) / 1000000000),
679+
min_size=5,
680+
unit=" G"
681+
)
682+
display_themed_value(
683+
theme_data=disk_theme_data['FREE']['TEXT'],
684+
value=int(free / 1000000000),
685+
min_size=5,
686+
unit=" G"
687+
)
679688

680689

681690
class Net:

res/themes/CustomDataExample/theme.yaml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,69 @@ static_images:
1616
HEIGHT: 320
1717

1818
STATS:
19+
DISK:
20+
INTERVAL: 10
21+
MOUNTS:
22+
- '/':
23+
USED:
24+
TEXT:
25+
SHOW: True
26+
SHOW_UNIT: True
27+
X: 155
28+
Y: 338
29+
FONT: generale-mono/GeneraleMonoA.ttf
30+
FONT_SIZE: 26
31+
FONT_COLOR: 2, 216, 243
32+
BACKGROUND_IMAGE: background.png
33+
PERCENT_TEXT:
34+
SHOW: True
35+
SHOW_UNIT: True
36+
X: 170
37+
Y: 430
38+
FONT: generale-mono/GeneraleMonoA.ttf
39+
FONT_SIZE: 30
40+
FONT_COLOR: 2, 216, 243
41+
BACKGROUND_IMAGE: background.png
42+
FREE:
43+
TEXT:
44+
SHOW: True
45+
SHOW_UNIT: True
46+
X: 155
47+
Y: 383
48+
FONT: generale-mono/GeneraleMonoA.ttf
49+
FONT_SIZE: 26
50+
FONT_COLOR: 2, 216, 243
51+
BACKGROUND_IMAGE: background.png
52+
- '/boot/efi':
53+
USED:
54+
TEXT:
55+
SHOW: True
56+
SHOW_UNIT: True
57+
X: 155
58+
Y: 338
59+
FONT: generale-mono/GeneraleMonoA.ttf
60+
FONT_SIZE: 26
61+
FONT_COLOR: 2, 216, 243
62+
BACKGROUND_IMAGE: background.png
63+
PERCENT_TEXT:
64+
SHOW: True
65+
SHOW_UNIT: True
66+
X: 170
67+
Y: 430
68+
FONT: generale-mono/GeneraleMonoA.ttf
69+
FONT_SIZE: 30
70+
FONT_COLOR: 2, 216, 243
71+
BACKGROUND_IMAGE: background.png
72+
FREE:
73+
TEXT:
74+
SHOW: True
75+
SHOW_UNIT: True
76+
X: 155
77+
Y: 383
78+
FONT: generale-mono/GeneraleMonoA.ttf
79+
FONT_SIZE: 26
80+
FONT_COLOR: 2, 216, 243
81+
BACKGROUND_IMAGE: background.png
1982
DATE:
2083
INTERVAL: 1
2184
HOUR:

res/themes/Cyberpunk/theme.yaml

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -185,35 +185,37 @@ STATS:
185185
BACKGROUND_IMAGE: background.png
186186
DISK:
187187
INTERVAL: 10
188-
USED:
189-
TEXT:
190-
SHOW: True
191-
SHOW_UNIT: True
192-
X: 155
193-
Y: 338
194-
FONT: generale-mono/GeneraleMonoA.ttf
195-
FONT_SIZE: 26
196-
FONT_COLOR: 2, 216, 243
197-
BACKGROUND_IMAGE: background.png
198-
PERCENT_TEXT:
199-
SHOW: True
200-
SHOW_UNIT: True
201-
X: 170
202-
Y: 430
203-
FONT: generale-mono/GeneraleMonoA.ttf
204-
FONT_SIZE: 30
205-
FONT_COLOR: 2, 216, 243
206-
BACKGROUND_IMAGE: background.png
207-
FREE:
208-
TEXT:
209-
SHOW: True
210-
SHOW_UNIT: True
211-
X: 155
212-
Y: 383
213-
FONT: generale-mono/GeneraleMonoA.ttf
214-
FONT_SIZE: 26
215-
FONT_COLOR: 2, 216, 243
216-
BACKGROUND_IMAGE: background.png
188+
MOUNTS:
189+
- '/':
190+
USED:
191+
TEXT:
192+
SHOW: True
193+
SHOW_UNIT: True
194+
X: 155
195+
Y: 338
196+
FONT: generale-mono/GeneraleMonoA.ttf
197+
FONT_SIZE: 26
198+
FONT_COLOR: 2, 216, 243
199+
BACKGROUND_IMAGE: background.png
200+
PERCENT_TEXT:
201+
SHOW: True
202+
SHOW_UNIT: True
203+
X: 170
204+
Y: 320
205+
FONT: generale-mono/GeneraleMonoA.ttf
206+
FONT_SIZE: 30
207+
FONT_COLOR: 2, 216, 243
208+
BACKGROUND_IMAGE: background.png
209+
FREE:
210+
TEXT:
211+
SHOW: True
212+
SHOW_UNIT: True
213+
X: 155
214+
Y: 383
215+
FONT: generale-mono/GeneraleMonoA.ttf
216+
FONT_SIZE: 26
217+
FONT_COLOR: 2, 216, 243
218+
BACKGROUND_IMAGE: background.png
217219
DATE:
218220
INTERVAL: 1
219221
DAY:

res/themes/default_disk.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# This file is used to add mandatory sections to a theme file in case they are missing
2+
# This is not a theme! Do not use this file to create a new theme, as a lot of content is missing: use theme_example.yaml
3+
USED:
4+
GRAPH:
5+
SHOW: False
6+
TEXT:
7+
SHOW: False
8+
SHOW_UNIT: False
9+
PERCENT_TEXT:
10+
SHOW: False
11+
SHOW_UNIT: False
12+
TOTAL:
13+
TEXT:
14+
SHOW: False
15+
SHOW_UNIT: False
16+
FREE:
17+
TEXT:
18+
SHOW: False
19+
SHOW_UNIT: False

0 commit comments

Comments
 (0)