mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-25 18:16:32 +00:00
Udev - move away form depricated callback / increase buffer (#2502)
* Use new callback from udev / only forward * minimize loop * Udev - move away form depricated callback / increase buffer * code cleanup
This commit is contained in:
parent
a3555c74e8
commit
184eeb7f49
@ -1,5 +1,4 @@
|
|||||||
"""Supervisor Hardware monitor based on udev."""
|
"""Supervisor Hardware monitor based on udev."""
|
||||||
from contextlib import suppress
|
|
||||||
import logging
|
import logging
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
@ -31,7 +30,14 @@ class HwMonitor(CoreSysAttributes):
|
|||||||
"""Start hardware monitor."""
|
"""Start hardware monitor."""
|
||||||
try:
|
try:
|
||||||
self.monitor = pyudev.Monitor.from_netlink(self.context, "kernel")
|
self.monitor = pyudev.Monitor.from_netlink(self.context, "kernel")
|
||||||
self.observer = pyudev.MonitorObserver(self.monitor, self._udev_events)
|
self.monitor.set_receive_buffer_size(32 * 1024 * 1024)
|
||||||
|
|
||||||
|
self.observer = pyudev.MonitorObserver(
|
||||||
|
self.monitor,
|
||||||
|
callback=lambda x: self.sys_loop.call_soon_threadsafe(
|
||||||
|
self._async_udev_events, x
|
||||||
|
),
|
||||||
|
)
|
||||||
except OSError:
|
except OSError:
|
||||||
self.sys_resolution.unhealthy = UnhealthyReason.PRIVILEGED
|
self.sys_resolution.unhealthy = UnhealthyReason.PRIVILEGED
|
||||||
_LOGGER.critical("Not privileged to run udev monitor!")
|
_LOGGER.critical("Not privileged to run udev monitor!")
|
||||||
@ -47,29 +53,20 @@ class HwMonitor(CoreSysAttributes):
|
|||||||
self.observer.stop()
|
self.observer.stop()
|
||||||
_LOGGER.info("Stopped Supervisor hardware monitor")
|
_LOGGER.info("Stopped Supervisor hardware monitor")
|
||||||
|
|
||||||
def _udev_events(self, action: str, kernel: pyudev.Device):
|
def _async_udev_events(self, kernel: pyudev.Device):
|
||||||
"""Incomming events from udev.
|
|
||||||
|
|
||||||
This is inside a observe thread and need pass into our eventloop.
|
|
||||||
"""
|
|
||||||
_LOGGER.debug("Hardware monitor: %s - %s", action, pformat(kernel))
|
|
||||||
udev = None
|
|
||||||
with suppress(pyudev.DeviceNotFoundAtPathError):
|
|
||||||
udev = pyudev.Devices.from_sys_path(self.context, kernel.sys_path)
|
|
||||||
|
|
||||||
self.sys_loop.call_soon_threadsafe(
|
|
||||||
self._async_udev_events, action, kernel, udev
|
|
||||||
)
|
|
||||||
|
|
||||||
def _async_udev_events(
|
|
||||||
self, action: str, kernel: pyudev.Device, udev: Optional[pyudev.Device]
|
|
||||||
):
|
|
||||||
"""Incomming events from udev into loop."""
|
"""Incomming events from udev into loop."""
|
||||||
# Update device List
|
# Update device List
|
||||||
if not kernel.device_node or self.sys_hardware.helper.hide_virtual_device(
|
if not kernel.device_node or self.sys_hardware.helper.hide_virtual_device(
|
||||||
kernel
|
kernel
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
_LOGGER.debug("Hardware monitor: %s - %s", kernel.action, pformat(kernel))
|
||||||
|
|
||||||
|
# Lookup udev device data
|
||||||
|
try:
|
||||||
|
udev = pyudev.Devices.from_sys_path(self.context, kernel.sys_path)
|
||||||
|
except pyudev.DeviceNotFoundAtPathError:
|
||||||
|
udev = None
|
||||||
|
|
||||||
hw_action = None
|
hw_action = None
|
||||||
device = None
|
device = None
|
||||||
@ -77,7 +74,7 @@ class HwMonitor(CoreSysAttributes):
|
|||||||
##
|
##
|
||||||
# Remove
|
# Remove
|
||||||
if (
|
if (
|
||||||
action in (UdevKernelAction.REMOVE, UdevKernelAction.UNBIND)
|
kernel.action in (UdevKernelAction.REMOVE, UdevKernelAction.UNBIND)
|
||||||
and udev is None
|
and udev is None
|
||||||
):
|
):
|
||||||
try:
|
try:
|
||||||
@ -90,7 +87,10 @@ class HwMonitor(CoreSysAttributes):
|
|||||||
|
|
||||||
##
|
##
|
||||||
# Add
|
# Add
|
||||||
if action in (UdevKernelAction.ADD, UdevKernelAction.BIND) and udev is not None:
|
if (
|
||||||
|
kernel.action in (UdevKernelAction.ADD, UdevKernelAction.BIND)
|
||||||
|
and udev is not None
|
||||||
|
):
|
||||||
device = Device(
|
device = Device(
|
||||||
udev.sys_name,
|
udev.sys_name,
|
||||||
Path(udev.device_node),
|
Path(udev.device_node),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user