32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
from typing import Iterable
|
|
|
|
import pySMART
|
|
import api
|
|
|
|
class Monitor:
|
|
def __init__(self, device_names: Iterable[str]):
|
|
self._monitored_devices: list[str] = []
|
|
|
|
for name in device_names:
|
|
self._monitored_devices.append(name)
|
|
|
|
async def initialize(self) -> None:
|
|
for name in self._monitored_devices:
|
|
device = pySMART.Device(name)
|
|
if device.interface == None:
|
|
raise RuntimeError(f"Storage device {name} not found.")
|
|
|
|
async def poll(self) -> list[api.MonitoredStorage]:
|
|
devices = []
|
|
for name in self._monitored_devices:
|
|
device = pySMART.Device(name)
|
|
|
|
if device.interface == None:
|
|
devices.append(api.MonitoredStorage(name=name, smart_pass=False, present=False))
|
|
continue
|
|
|
|
smart_pass = True if device.assessment == "PASS" else False
|
|
devices.append(api.MonitoredStorage(name=name, smart_pass=smart_pass, present=True))
|
|
|
|
return devices
|