Add host-poller: chassis IPMI/iDRAC + CPU + on-metal drive temps
New third producer container (host-poller) owning the server chassis subsystem, separate from the SAS-shelf poller: - services/host_sensors.py: in-band IPMI (ipmitool sdr) for Inlet/Exhaust/etc. + CPU package temps from coretemp hwmon - host_poller.py: own single-instance lock + heartbeat (host_poll keys), restart-storm guard, paced; writes jbod:host_sensors + jbod:host_drives - move host/on-metal drive collection off the SAS poller to host-poller (reads jbod:zfs_map for annotation) - store: generalized lock/meta with a key param; host_sensors + host-poll keys - mqtt_publisher: publish env/CPU/host-drive temps as entities on the hub device (JBOD Monitor) - Dockerfile host-poller target (ipmitool+smartmontools); compose.infra adds host-poller; build.sh gains host-poller/all
This commit is contained in:
@@ -23,7 +23,6 @@ import time
|
||||
from services import store
|
||||
from services.cache import close_cache, init_cache, redis_available
|
||||
from services.enclosure import discover_enclosures, get_enclosure_status, list_slots
|
||||
from services.host import get_host_drives
|
||||
from services.leds import run_led
|
||||
from services.smart import _run_smartctl, sg_ses_available, smartctl_available
|
||||
from services.zfs import get_zfs_pool_map
|
||||
@@ -86,12 +85,7 @@ async def sweep() -> None:
|
||||
except Exception as e:
|
||||
errors.append(f"ses:{enc['id']}:{e}")
|
||||
|
||||
# 5. Host (non-enclosure) drives + MegaRAID (gated, reuses pool_map).
|
||||
try:
|
||||
host_drives = await get_host_drives(pool_map)
|
||||
await store.set_host_drives(host_drives)
|
||||
except Exception as e:
|
||||
errors.append(f"host:{e}")
|
||||
# NOTE: host/on-metal drives are owned by the separate host-poller now.
|
||||
|
||||
# 6. Inventory + heartbeat.
|
||||
await store.set_inventory({"enclosures": inv_enclosures, "ts": store.now()})
|
||||
|
||||
Reference in New Issue
Block a user