mirror of
https://codeberg.org/privacy1st/de-p1st-monitor
synced 2024-11-23 19:49:32 +01:00
feat: device by-id
This commit is contained in:
parent
d6b4af9d6a
commit
b2de44b26f
@ -2,11 +2,11 @@
|
|||||||
dir = /var/log/de-p1st-monitor/
|
dir = /var/log/de-p1st-monitor/
|
||||||
|
|
||||||
[filesystem.1]
|
[filesystem.1]
|
||||||
; NVME
|
; 256GB2
|
||||||
mountpoint = /
|
mountpoint = /
|
||||||
warn_if_above = 0.75
|
warn_if_above = 0.75
|
||||||
[filesystem.2]
|
[filesystem.2]
|
||||||
; NVME
|
; 256GB2
|
||||||
mountpoint = /boot
|
mountpoint = /boot
|
||||||
warn_if_above = 0.75
|
warn_if_above = 0.75
|
||||||
[filesystem.3]
|
[filesystem.3]
|
||||||
@ -14,8 +14,8 @@ warn_if_above = 0.75
|
|||||||
uuid = c385a436-0288-486f-a2b9-c64c2db667e7
|
uuid = c385a436-0288-486f-a2b9-c64c2db667e7
|
||||||
warn_if_above = 0.66
|
warn_if_above = 0.66
|
||||||
[filesystem.4]
|
[filesystem.4]
|
||||||
; 3TB1 and 3TB2
|
; 3TB1, 3TB2 and 4TB1
|
||||||
uuid = a454430b-dee3-4b6b-8325-f7bdb9435ed1
|
uuid = 1f560eeb-a375-457b-84a6-93d771a5ba5f
|
||||||
warn_if_above = 0.85
|
warn_if_above = 0.85
|
||||||
unmounted_ok = true
|
unmounted_ok = true
|
||||||
|
|
||||||
@ -54,25 +54,28 @@ warn_if_above = 60
|
|||||||
network_interface = enp0s31f6
|
network_interface = enp0s31f6
|
||||||
|
|
||||||
[drive.1]
|
[drive.1]
|
||||||
; NVME /dev/nvme0n1p3
|
; NVMe 256GB2
|
||||||
; TODO NVME 49 warn, 55 limit
|
; TODO NVMe 49 warn, 55 limit
|
||||||
uuid = b8ef1da9-d76d-44b4-86d4-71c82c888b6f
|
id = nvme-WDC_PC_SN520_SDAPNUW-256G-1002_183873801941
|
||||||
warn_if_above = 50
|
warn_if_above = 50
|
||||||
[drive.2]
|
[drive.2]
|
||||||
; HDD 12TB1
|
; HDD 12TB1
|
||||||
; TODO HDD 39 warn, 45 limit
|
; TODO HDD 39 warn, 45 limit
|
||||||
uuid = 68c349e8-5118-4773-9fd5-5dbad9acee4e
|
id = ata-TOSHIBA_MG07ACA12TE_X1E0A0WKF95G
|
||||||
warn_if_above = 40
|
warn_if_above = 40
|
||||||
[drive.3]
|
[drive.3]
|
||||||
; HDD 3TB1
|
; HDD 3TB1
|
||||||
uuid = 20d86155-30d4-404c-95e8-c701cfb16ca5
|
id = ata-WDC_WD30EFRX-68EUZN0_WD-WCC4N1173157
|
||||||
warn_if_above = 40
|
warn_if_above = 40
|
||||||
[drive.4]
|
[drive.4]
|
||||||
; HDD 3TB2
|
; HDD 3TB2
|
||||||
uuid = 4651c3f1-e4b8-45aa-a823-df762530a307
|
id = ata-WDC_WD30EFRX-68EUZN0_WD-WMC4N0564095
|
||||||
|
warn_if_above = 40
|
||||||
|
; HDD 4TB1
|
||||||
|
id = ata-WDC_WD40EFRX-68N32N0_WD-WCC7K0CPF0N1
|
||||||
warn_if_above = 40
|
warn_if_above = 40
|
||||||
|
|
||||||
[sensor_script.1]
|
; [sensor_script.1]
|
||||||
cmd = ["digitemp_DS9097", "-q", "-c", "/home/yoda/.digitemprc", "-t", "0"]
|
; cmd = ["digitemp_DS9097", "-q", "-c", "/home/yoda/.digitemprc", "-t", "0"]
|
||||||
name = room-temp
|
; name = room-temp
|
||||||
warn_if_above = 32
|
; warn_if_above = 32
|
||||||
|
@ -79,11 +79,12 @@ def get_loggers() -> tuple[list[Logger], list[LoggerArgEx]]:
|
|||||||
|
|
||||||
def drive(cfg_: configparser.SectionProxy) -> Logger:
|
def drive(cfg_: configparser.SectionProxy) -> Logger:
|
||||||
uuid = cfg_.get('uuid', None)
|
uuid = cfg_.get('uuid', None)
|
||||||
|
id_ = cfg_.get('id', None)
|
||||||
device = Path(cfg_.get('device')) if 'device' in cfg_ else None
|
device = Path(cfg_.get('device')) if 'device' in cfg_ else None
|
||||||
warn_if_above = int(cfg_['warn_if_above']) if 'warn_if_above' in cfg_ else None
|
warn_if_above = int(cfg_['warn_if_above']) if 'warn_if_above' in cfg_ else None
|
||||||
warn_threshold = int(cfg_.get('warn_threshold', '1'))
|
warn_threshold = int(cfg_.get('warn_threshold', '1'))
|
||||||
warn_data_range = int(cfg_.get('warn_data_range', '1'))
|
warn_data_range = int(cfg_.get('warn_data_range', '1'))
|
||||||
return DriveLogger(uuid, device, warn_if_above, warn_threshold, warn_data_range)
|
return DriveLogger(uuid, id_, device, warn_if_above, warn_threshold, warn_data_range)
|
||||||
|
|
||||||
def memory(cfg_: configparser.SectionProxy) -> Logger:
|
def memory(cfg_: configparser.SectionProxy) -> Logger:
|
||||||
warn_if_above = float(cfg_.get('warn_if_above', '1.0'))
|
warn_if_above = float(cfg_.get('warn_if_above', '1.0'))
|
||||||
|
@ -16,7 +16,9 @@ class BlkidException(Exception):
|
|||||||
|
|
||||||
|
|
||||||
class DriveLogger(Logger):
|
class DriveLogger(Logger):
|
||||||
def __init__(self, uuid: str = None,
|
def __init__(self,
|
||||||
|
uuid: str = None,
|
||||||
|
id_: str = None,
|
||||||
device: Path = None,
|
device: Path = None,
|
||||||
warn_if_above: int = None,
|
warn_if_above: int = None,
|
||||||
warn_threshold: int = 1,
|
warn_threshold: int = 1,
|
||||||
@ -30,20 +32,21 @@ class DriveLogger(Logger):
|
|||||||
critical_if_above
|
critical_if_above
|
||||||
)
|
)
|
||||||
|
|
||||||
if uuid is None and device is None:
|
if uuid is None and id_ is None and device is None:
|
||||||
raise LoggerArgEx('uuid or device required')
|
raise LoggerArgEx('uuid, id_ or device required')
|
||||||
|
# `device` might be `None`.
|
||||||
|
if uuid is not None:
|
||||||
|
device = self.get_partition_from_uuid(uuid)
|
||||||
|
if id_ is not None:
|
||||||
|
device = self.get_partition_from_id(id_)
|
||||||
|
# `device` is not `None`, `uuid` might be `None`.
|
||||||
if uuid is None:
|
if uuid is None:
|
||||||
try:
|
try:
|
||||||
self.uuid = self.get_partition_uuid(device)
|
self.uuid = self.get_uuid_from_partition(device)
|
||||||
except BlkidException as e:
|
except BlkidException as e:
|
||||||
raise LoggerArgEx(getattr(e, 'message', e))
|
raise LoggerArgEx(getattr(e, 'message', e))
|
||||||
else:
|
# Store as attributes.
|
||||||
self.uuid = uuid
|
self.uuid = uuid
|
||||||
|
|
||||||
if device is None:
|
|
||||||
self.device = self.get_partition_path(uuid)
|
|
||||||
else:
|
|
||||||
self.device = device
|
self.device = device
|
||||||
|
|
||||||
self.warn_if_above = warn_if_above
|
self.warn_if_above = warn_if_above
|
||||||
@ -72,17 +75,24 @@ class DriveLogger(Logger):
|
|||||||
#
|
#
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_partition_path(cls, uuid: str) -> Path:
|
def get_partition_from_uuid(cls, uuid: str) -> Path:
|
||||||
"""
|
"""
|
||||||
:return: Partition path, e.g. /dev/sda1
|
:return: Partition path, e.g. /dev/sda1
|
||||||
"""
|
"""
|
||||||
return Path(f'/dev/disk/by-uuid/{uuid}').resolve()
|
return Path(f'/dev/disk/by-uuid/{uuid}').resolve()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_partition_uuid(cls, device: Path) -> str:
|
def get_partition_from_id(cls, id_: str) -> Path:
|
||||||
"""
|
"""
|
||||||
:param device: E.g. /dev/sda1
|
:return: Partition path, e.g. /dev/sda1
|
||||||
:return: UUID of e.g. partition /dev/sda1
|
"""
|
||||||
|
return Path(f'/dev/disk/by-id/{id_}').resolve()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_uuid_from_partition(cls, device: Path) -> str:
|
||||||
|
"""
|
||||||
|
:param device: Partition path, e.g. /dev/sda1
|
||||||
|
:return: UUID of given partition
|
||||||
:raise BlkidException: If UUID could not be determined.
|
:raise BlkidException: If UUID could not be determined.
|
||||||
"""
|
"""
|
||||||
returncode, stdout, stderr = execute_capture(['blkid', '-s', 'UUID', '-o', 'value', f'{device}'])
|
returncode, stdout, stderr = execute_capture(['blkid', '-s', 'UUID', '-o', 'value', f'{device}'])
|
||||||
@ -95,7 +105,7 @@ class DriveLogger(Logger):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def get_temp_from_device(cls, device: Path) -> int:
|
def get_temp_from_device(cls, device: Path) -> int:
|
||||||
"""
|
"""
|
||||||
:param device: For example `/dev/sda` or `/dev/disk/by-uuid/<uuid>`
|
:param device: Partition path, e.g. `/dev/sda`
|
||||||
:return: Temperature in celsius
|
:return: Temperature in celsius
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user