fix: declare plugin interval so stale data waits two full intervals
The server inferred each plugin's collection interval from the gap between the last two received PLG samples, then expired data at interval * 3. After an outage this guess was wrong: the request_update re-send of collect-once InfoPlugins produced two close samples, yielding a tiny inferred interval that purged permanent info data minutes after recovery. Clients now declare each plugin's interval in the PLG message (_interval). The server uses it directly (from the first post-recovery sample), expiring at interval * 3 so live data survives at least two full intervals; interval 0 marks collect-once InfoPlugins that never go stale. Legacy clients omit the field and fall back to the previous inferred-gap behavior. Adds _interval to all three clients: hbc, hbc_mini.py, hbc_mini.c. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+2
-2
@@ -955,7 +955,7 @@ async def _run_info_plugins(conn: AsyncConnection, plugins: List[Plugin]):
|
||||
try:
|
||||
data = await plugin.collect()
|
||||
if data:
|
||||
await conn.sendto({"plugin": plugin.name, **data}, "PLG")
|
||||
await conn.sendto({"plugin": plugin.name, **data, "_interval": plugin.interval}, "PLG")
|
||||
log.info("sent %s", plugin.name)
|
||||
except Exception as e:
|
||||
log.error("%s collect: %s", plugin.name, e)
|
||||
@@ -968,7 +968,7 @@ async def _run_monitor_group(conn: AsyncConnection, plugins: List[Plugin], inter
|
||||
try:
|
||||
data = await plugin.collect()
|
||||
if data:
|
||||
await conn.sendto({"plugin": plugin.name, **data}, "PLG")
|
||||
await conn.sendto({"plugin": plugin.name, **data, "_interval": plugin.interval}, "PLG")
|
||||
log.debug("sent %s", plugin.name)
|
||||
except asyncio.CancelledError:
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user