From dfc91d7eb8395c3842f8a5b1279986e22403f1c2 Mon Sep 17 00:00:00 2001 From: gerviba Date: Sun, 1 Nov 2026 22:47:26 +0100 Subject: [PATCH] Add missing files --- .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4817 bytes .../__pycache__/config_flow.cpython-312.pyc | Bin 0 -> 2778 bytes .../__pycache__/const.cpython-312.pyc | Bin 0 -> 1542 bytes .../__pycache__/device.cpython-312.pyc | Bin 0 -> 3903 bytes .../__pycache__/sensor.cpython-312.pyc | Bin 0 -> 15004 bytes custom_components/ha_probe/brand/icon.png | Bin 0 -> 21687 bytes custom_components/ha_probe/brand/icon@2x.png | Bin 0 -> 48752 bytes custom_components/ha_probe/device.py | 92 ++++++++++++++++++ .../kotlin/hu/gerviba/probe/DeviceLinker.kt | 30 ++++++ .../kotlin/hu/gerviba/probe/DeviceService.kt | 84 ++++++++++++++++ 10 files changed, 206 insertions(+) create mode 100644 custom_components/ha_probe/__pycache__/__init__.cpython-312.pyc create mode 100644 custom_components/ha_probe/__pycache__/config_flow.cpython-312.pyc create mode 100644 custom_components/ha_probe/__pycache__/const.cpython-312.pyc create mode 100644 custom_components/ha_probe/__pycache__/device.cpython-312.pyc create mode 100644 custom_components/ha_probe/__pycache__/sensor.cpython-312.pyc create mode 100644 custom_components/ha_probe/brand/icon.png create mode 100644 custom_components/ha_probe/brand/icon@2x.png create mode 100644 custom_components/ha_probe/device.py create mode 100644 src/main/kotlin/hu/gerviba/probe/DeviceLinker.kt create mode 100644 src/main/kotlin/hu/gerviba/probe/DeviceService.kt diff --git a/custom_components/ha_probe/__pycache__/__init__.cpython-312.pyc b/custom_components/ha_probe/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d35665d347c0f2e0a62cd47c88056b895d7481e5 GIT binary patch literal 4817 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 literal 0 HcmV?d00001 diff --git a/custom_components/ha_probe/__pycache__/config_flow.cpython-312.pyc b/custom_components/ha_probe/__pycache__/config_flow.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6047a3e3b6db90e5157ab3d4c6287546f81ff403 GIT binary patch literal 2778 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 literal 0 HcmV?d00001 diff --git a/custom_components/ha_probe/__pycache__/device.cpython-312.pyc b/custom_components/ha_probe/__pycache__/device.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..886ec2f81694e231bd5e7ff296a5938e28876bfc GIT binary patch literal 3903 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 literal 0 HcmV?d00001 diff --git a/custom_components/ha_probe/brand/icon@2x.png b/custom_components/ha_probe/brand/icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..29b4747435469569e489f9535d74bc788b0d9dc2 GIT binary patch literal 48752 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 literal 0 HcmV?d00001 diff --git a/custom_components/ha_probe/device.py b/custom_components/ha_probe/device.py new file mode 100644 index 0000000..6245ab3 --- /dev/null +++ b/custom_components/ha_probe/device.py @@ -0,0 +1,92 @@ +"""Device metadata helpers for the HA Probe integration.""" + +from __future__ import annotations + +from typing import Any + +from homeassistant.core import HomeAssistant +from homeassistant.helpers import device_registry as dr +from homeassistant.helpers.device_registry import DeviceInfo + +from .const import DOMAIN + +DEFAULT_MANUFACTURER = "gerviba/systemmonitor" +DEFAULT_MODEL = "Probe" + +# Probe payload key -> normalized metadata key. +_PAYLOAD_KEYS = { + "manufacturer": "manufacturer", + "model": "model", + "configurationUrl": "configuration_url", + "swVersion": "sw_version", + "viaDevice": "via_device", +} + + +def parse_device_meta(device: dict[str, Any]) -> dict[str, str]: + """Pick the optional metadata fields a probe device record carries.""" + return { + key: value + for payload_key, key in _PAYLOAD_KEYS.items() + if isinstance(value := device.get(payload_key), str) and value + } + + +def device_identifier(entry_id: str, device_ha_id: str) -> tuple[str, str]: + """Registry identifier of a probe device.""" + return (DOMAIN, f"{entry_id}_{device_ha_id}") + + +def build_device_info( + entry_id: str, device_ha_id: str, name: str, meta: dict[str, str] +) -> DeviceInfo: + """DeviceInfo for a probe device, using whatever metadata is known.""" + info = DeviceInfo( + identifiers={device_identifier(entry_id, device_ha_id)}, + name=name, + manufacturer=meta.get("manufacturer") or DEFAULT_MANUFACTURER, + model=meta.get("model") or DEFAULT_MODEL, + ) + if sw_version := meta.get("sw_version"): + info["sw_version"] = sw_version + if configuration_url := meta.get("configuration_url"): + info["configuration_url"] = configuration_url + if via_device := meta.get("via_device"): + info["via_device"] = device_identifier(entry_id, via_device) + return info + + +def sync_device_registry( + hass: HomeAssistant, + entry_id: str, + device_ha_id: str, + meta: dict[str, str], +) -> None: + """Push changed metadata (e.g. a new docker image) to an existing device. + + Entities only hand their DeviceInfo to HA when first created, so later + changes from the probe have to be applied to the registry directly. + """ + registry = dr.async_get(hass) + device = registry.async_get_device( + identifiers={device_identifier(entry_id, device_ha_id)} + ) + if device is None: + return + + changes: dict[str, Any] = { + "manufacturer": meta.get("manufacturer") or DEFAULT_MANUFACTURER, + "model": meta.get("model") or DEFAULT_MODEL, + } + if sw_version := meta.get("sw_version"): + changes["sw_version"] = sw_version + if configuration_url := meta.get("configuration_url"): + changes["configuration_url"] = configuration_url + if via_device := meta.get("via_device"): + parent = registry.async_get_device( + identifiers={device_identifier(entry_id, via_device)} + ) + if parent is not None: + changes["via_device_id"] = parent.id + + registry.async_update_device(device.id, **changes) diff --git a/src/main/kotlin/hu/gerviba/probe/DeviceLinker.kt b/src/main/kotlin/hu/gerviba/probe/DeviceLinker.kt new file mode 100644 index 0000000..3d0dbb5 --- /dev/null +++ b/src/main/kotlin/hu/gerviba/probe/DeviceLinker.kt @@ -0,0 +1,30 @@ +package hu.gerviba.probe + +import org.slf4j.LoggerFactory + +/** + * Nests devices that represent a Docker container under the host device. + * + * The host is the first non-container device whose haDisplayName or haId matches the + * config root's haDisplayName / haId, falling back to the device with haId "default". + */ +object DeviceLinker { + + private val log = LoggerFactory.getLogger(DeviceLinker::class.java) + + fun link(config: ConfigRecord): List { + val hosts = config.devices.filter { it.dockerContainer == null } + val host = hosts.firstOrNull { + it.haDisplayName.equals(config.haDisplayName, ignoreCase = true) || + it.haId.equals(config.haId, ignoreCase = true) + } ?: hosts.firstOrNull { it.haId == "default" } + + if (host == null && config.devices.any { it.dockerContainer != null }) + log.warn("No host device matches the config root; container devices will not be nested") + + return config.devices.map { + if (it.dockerContainer != null && host != null) it.copy(viaDevice = host.haId) else it + } + } + +} diff --git a/src/main/kotlin/hu/gerviba/probe/DeviceService.kt b/src/main/kotlin/hu/gerviba/probe/DeviceService.kt new file mode 100644 index 0000000..6b87c8a --- /dev/null +++ b/src/main/kotlin/hu/gerviba/probe/DeviceService.kt @@ -0,0 +1,84 @@ +package hu.gerviba.probe + +import com.fasterxml.jackson.databind.ObjectMapper +import com.github.dockerjava.core.DefaultDockerClientConfig +import com.github.dockerjava.httpclient5.ApacheDockerHttpClient +import com.github.dockerjava.transport.DockerHttpClient +import hu.gerviba.probe.api.ApiService +import org.slf4j.LoggerFactory +import java.util.concurrent.Executors +import java.util.concurrent.TimeUnit + +/** + * Keeps the sw_version of Docker container devices in sync with the image the + * container currently runs, re-checking periodically. + */ +class DeviceService( + private val apiService: ApiService, +) { + + private val log = LoggerFactory.getLogger(DeviceService::class.java) + private val mapper = ObjectMapper() + private val scheduler = Executors.newSingleThreadScheduledExecutor { runnable -> + Thread(runnable, "device-refresh").apply { isDaemon = true } + } + + private val httpClient: DockerHttpClient by lazy { + val config = DefaultDockerClientConfig.createDefaultConfigBuilder().build() + ApacheDockerHttpClient.Builder() + .dockerHost(config.dockerHost) + .sslConfig(config.sslConfig) + .build() + } + + /** Resolves images once (before the first push), then refreshes them periodically. */ + fun start() { + if (apiService.currentDevices().none { it.dockerContainer != null }) + return + + refresh(push = false) + scheduler.scheduleWithFixedDelay({ refresh(push = true) }, REFRESH_HOURS, REFRESH_HOURS, TimeUnit.HOURS) + } + + private fun refresh(push: Boolean) { + try { + val current = apiService.currentDevices() + val updated = current.map { device -> + val container = device.dockerContainer ?: return@map device + val image = imageOf(container) ?: return@map device + device.copy(swVersion = image) + } + if (updated == current) + return + + if (push) { + apiService.updateDevices(updated) + } else { + apiService.setDevicesSilently(updated) + } + } catch (e: Exception) { + log.warn("Failed to refresh device versions: {}", e.message) + } + } + + /** Image of a container (as configured, e.g. "gitea/gitea:1.22"), or null if unavailable. */ + private fun imageOf(container: String): String? { + return try { + val request = DockerHttpClient.Request.builder() + .method("GET") + .path("/containers/$container/json") + .build() + httpClient.execute(request).use { response -> + mapper.readTree(response.body).get("Config")?.get("Image")?.asText() + } + } catch (e: Exception) { + log.warn("Failed to inspect container {}: {}", container, e.message) + null + } + } + + private companion object { + const val REFRESH_HOURS = 1L + } + +}