From 7613fbcc4608e1cb09fd8c997d28989366a44666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn-Michael=20Miehe?= <40151420+ldericher@users.noreply.github.com> Date: Sat, 2 Sep 2023 19:06:48 +0000 Subject: [PATCH] SETTINGS.disk.vroot --- kiwi_simple_metrics/metrics/disk.py | 15 +++++++++++++-- kiwi_simple_metrics/settings/metric.py | 3 +++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/kiwi_simple_metrics/metrics/disk.py b/kiwi_simple_metrics/metrics/disk.py index cc78884..ff072ed 100644 --- a/kiwi_simple_metrics/metrics/disk.py +++ b/kiwi_simple_metrics/metrics/disk.py @@ -1,4 +1,5 @@ import os +from pathlib import PurePath from typing import Iterator from ..settings import SETTINGS @@ -6,16 +7,26 @@ from ._report import Report, ReportData def _hwdata() -> Iterator[ReportData]: - def get_path_statvfs(path: os.PathLike) -> dict[str, float]: + def get_path_statvfs(path: os.PathLike) -> dict[str, int]: sv = os.statvfs(path) return { "free": sv.f_bavail, "total": sv.f_blocks, } + def get_path_name(path: os.PathLike) -> str: + # get path and its parents + path = PurePath(path) + + # if path or above is the vroot, make it a "virtual absolute" path + if SETTINGS.disk.vroot in [path, *path.parents]: + path = "/" / path.relative_to(SETTINGS.disk.vroot) + + return str(path) + yield from sorted([ ReportData.from_free_total( - name=str(path), + name=get_path_name(path), **get_path_statvfs(path), settings=SETTINGS.disk, ) for path in SETTINGS.disk.paths diff --git a/kiwi_simple_metrics/settings/metric.py b/kiwi_simple_metrics/settings/metric.py index f785510..485eb07 100644 --- a/kiwi_simple_metrics/settings/metric.py +++ b/kiwi_simple_metrics/settings/metric.py @@ -83,6 +83,9 @@ class DiskMS(MetricSettings): # paths to check for disk space paths: list[DirectoryPath] = [DirectoryPath("/")] + # path to be treated as filesystem root + vroot: DirectoryPath = DirectoryPath("/") + class ExternalMS(MetricSettings): name: str = "External Metric"