Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added multi-disk support #653

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions library/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,12 @@ def load_yaml(configfile):
FONTS_DIR = str(MAIN_DIRECTORY / "res" / "fonts") + "/"
CONFIG_DATA = load_yaml(MAIN_DIRECTORY / "config.yaml")
THEME_DEFAULT = load_yaml(MAIN_DIRECTORY / "res/themes/default.yaml")
THEME_DISK_DEFAULT = load_yaml("res/themes/default_disk.yaml")
THEME_DATA = None




def copy_default(default, theme):
"""recursively supply default values into a dict of dicts of dicts ...."""
for k, v in default.items():
Expand All @@ -66,6 +69,10 @@ def load_theme():

copy_default(THEME_DEFAULT, THEME_DATA)

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

def check_theme_compatible(display_size: str):
global THEME_DATA
Expand Down
6 changes: 3 additions & 3 deletions library/sensors/sensors.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,17 +103,17 @@ def virtual_free() -> int: # In bytes
class Disk(ABC):
@staticmethod
@abstractmethod
def disk_usage_percent() -> float:
def disk_usage_percent(path) -> float:
pass

@staticmethod
@abstractmethod
def disk_used() -> int: # In bytes
def disk_used(path) -> int: # In bytes
pass

@staticmethod
@abstractmethod
def disk_free() -> int: # In bytes
def disk_free(path) -> int: # In bytes
pass


Expand Down
12 changes: 6 additions & 6 deletions library/sensors/sensors_python.py
Original file line number Diff line number Diff line change
Expand Up @@ -443,23 +443,23 @@ def virtual_free() -> int: # In bytes

class Disk(sensors.Disk):
@staticmethod
def disk_usage_percent() -> float:
def disk_usage_percent(path) -> float:
try:
return psutil.disk_usage("/").percent
return psutil.disk_usage(path).percent
except:
return math.nan

@staticmethod
def disk_used() -> int: # In bytes
def disk_used(path) -> int: # In bytes
try:
return psutil.disk_usage("/").used
return psutil.disk_usage(path).used
except:
return -1

@staticmethod
def disk_free() -> int: # In bytes
def disk_free(path) -> int: # In bytes
try:
return psutil.disk_usage("/").free
return psutil.disk_usage(path).free
except:
return -1

Expand Down
6 changes: 3 additions & 3 deletions library/sensors/sensors_stub_random.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,15 @@ def virtual_free() -> int: # In bytes

class Disk(sensors.Disk):
@staticmethod
def disk_usage_percent() -> float:
def disk_usage_percent(path) -> float:
return random.uniform(0, 100)

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

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


Expand Down
68 changes: 38 additions & 30 deletions library/stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -645,37 +645,45 @@ class Disk:

@classmethod
def stats(cls):
used = sensors.Disk.disk_used()
free = sensors.Disk.disk_free()

disk_theme_data = config.THEME_DATA['STATS']['DISK']

disk_usage_percent = sensors.Disk.disk_usage_percent()
save_last_value(disk_usage_percent, cls.last_values_disk_usage,
disk_theme_data['USED']['LINE_GRAPH'].get("HISTORY_SIZE", DEFAULT_HISTORY_SIZE))
display_themed_progress_bar(disk_theme_data['USED']['GRAPH'], disk_usage_percent)
display_themed_percent_radial_bar(disk_theme_data['USED']['RADIAL'], disk_usage_percent)
display_themed_percent_value(disk_theme_data['USED']['PERCENT_TEXT'], disk_usage_percent)
display_themed_line_graph(disk_theme_data['USED']['LINE_GRAPH'], cls.last_values_disk_usage)
if 'MOUNTS' not in config.THEME_DATA['STATS']['DISK']:
mountpoints = [ {"/": config.THEME_DATA['STATS']['DISK'] }]
else:
mountpoints = config.THEME_DATA['STATS']['DISK']['MOUNTS']

display_themed_value(
theme_data=disk_theme_data['USED']['TEXT'],
value=int(used / 1000000000),
min_size=5,
unit=" G"
)
display_themed_value(
theme_data=disk_theme_data['TOTAL']['TEXT'],
value=int((free + used) / 1000000000),
min_size=5,
unit=" G"
)
display_themed_value(
theme_data=disk_theme_data['FREE']['TEXT'],
value=int(free / 1000000000),
min_size=5,
unit=" G"
)
for mount in mountpoints:
mountpoint = [k for k, v in mount.items()][0]
disk_theme_data = mount[mountpoint]
if not os.path.exists(mountpoint):
logger.warning('Invalid mount point in config: "%s"' % mountpoint)
else:
used = sensors.Disk.disk_used(mountpoint)
free = sensors.Disk.disk_free(mountpoint)

disk_usage_percent = sensors.Disk.disk_usage_percent(mountpoint)
save_last_value(disk_usage_percent, cls.last_values_disk_usage, DEFAULT_HISTORY_SIZE)
#display_themed_progress_bar(disk_theme_data['USED']['GRAPH'], disk_usage_percent)
#display_themed_percent_radial_bar(disk_theme_data['USED']['RADIAL'], disk_usage_percent)
display_themed_percent_value(disk_theme_data['USED']['PERCENT_TEXT'], disk_usage_percent)
#display_themed_line_graph(disk_theme_data['USED']['LINE_GRAPH'], cls.last_values_disk_usage)

display_themed_value(
theme_data=disk_theme_data['USED']['TEXT'],
value=int(used / 1000000000),
min_size=5,
unit=" G"
)
display_themed_value(
theme_data=disk_theme_data['TOTAL']['TEXT'],
value=int((free + used) / 1000000000),
min_size=5,
unit=" G"
)
display_themed_value(
theme_data=disk_theme_data['FREE']['TEXT'],
value=int(free / 1000000000),
min_size=5,
unit=" G"
)


class Net:
Expand Down
63 changes: 63 additions & 0 deletions res/themes/CustomDataExample/theme.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,69 @@ static_images:
HEIGHT: 320

STATS:
DISK:
INTERVAL: 10
MOUNTS:
- '/':
USED:
TEXT:
SHOW: True
SHOW_UNIT: True
X: 155
Y: 338
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 26
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
PERCENT_TEXT:
SHOW: True
SHOW_UNIT: True
X: 170
Y: 430
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 30
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
FREE:
TEXT:
SHOW: True
SHOW_UNIT: True
X: 155
Y: 383
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 26
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
- '/boot/efi':
USED:
TEXT:
SHOW: True
SHOW_UNIT: True
X: 155
Y: 338
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 26
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
PERCENT_TEXT:
SHOW: True
SHOW_UNIT: True
X: 170
Y: 430
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 30
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
FREE:
TEXT:
SHOW: True
SHOW_UNIT: True
X: 155
Y: 383
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 26
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
DATE:
INTERVAL: 1
HOUR:
Expand Down
60 changes: 31 additions & 29 deletions res/themes/Cyberpunk/theme.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -185,35 +185,37 @@ STATS:
BACKGROUND_IMAGE: background.png
DISK:
INTERVAL: 10
USED:
TEXT:
SHOW: True
SHOW_UNIT: True
X: 155
Y: 338
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 26
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
PERCENT_TEXT:
SHOW: True
SHOW_UNIT: True
X: 170
Y: 430
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 30
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
FREE:
TEXT:
SHOW: True
SHOW_UNIT: True
X: 155
Y: 383
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 26
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
MOUNTS:
- '/':
USED:
TEXT:
SHOW: True
SHOW_UNIT: True
X: 155
Y: 338
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 26
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
PERCENT_TEXT:
SHOW: True
SHOW_UNIT: True
X: 170
Y: 320
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 30
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
FREE:
TEXT:
SHOW: True
SHOW_UNIT: True
X: 155
Y: 383
FONT: generale-mono/GeneraleMonoA.ttf
FONT_SIZE: 26
FONT_COLOR: 2, 216, 243
BACKGROUND_IMAGE: background.png
DATE:
INTERVAL: 1
DAY:
Expand Down
19 changes: 19 additions & 0 deletions res/themes/default_disk.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# This file is used to add mandatory sections to a theme file in case they are missing
# 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
USED:
GRAPH:
SHOW: False
TEXT:
SHOW: False
SHOW_UNIT: False
PERCENT_TEXT:
SHOW: False
SHOW_UNIT: False
TOTAL:
TEXT:
SHOW: False
SHOW_UNIT: False
FREE:
TEXT:
SHOW: False
SHOW_UNIT: False