панель: живой хотспот выглядел мёртвым
Мастер считает время по monotonic, панель по time.time(). В зеркале состояния last_seen не обновлялся вовсе, поэтому «простой» рос вместе со временем в сети: хотспот, живой 44 минуты, показывался как молчащий 44 минуты. Оператор решил бы, что связь отвалилась. Заодно счётчик принятых кадров: был вечный ноль, теперь считается в маршрутизаторе. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XvX94Vwy7vXWEuiFm1g9Av
Этот коммит содержится в:
@@ -10,6 +10,7 @@ import asyncio
|
||||
import contextlib
|
||||
import signal
|
||||
import sys
|
||||
import time
|
||||
|
||||
from . import config as cfgmod
|
||||
from . import log as logmod
|
||||
@@ -47,6 +48,11 @@ def _wire_state(master: HomebrewMaster, state: State) -> None:
|
||||
sp.colorcode = cfgp.get("colorcode", "")
|
||||
sp.rx_freq = cfgp.get("rx_freq", "")
|
||||
sp.tx_freq = cfgp.get("tx_freq", "")
|
||||
# Мастер считает время по monotonic, панель — по time.time().
|
||||
# Без пересчёта панель показывала «простой» равным времени в сети,
|
||||
# то есть живой хотспот выглядел мёртвым.
|
||||
if p.last_seen:
|
||||
sp.last_seen = time.time() - max(0.0, master._now() - p.last_seen)
|
||||
for pid in list(state.peers):
|
||||
if pid not in master.peers:
|
||||
gone = state.peer_del(pid)
|
||||
|
||||
@@ -75,6 +75,11 @@ class Router:
|
||||
|
||||
# ── собственно маршрут ──────────────────────────────────────────────────
|
||||
def route(self, peer_id: int, dmr, connected: list[int]) -> list[int]:
|
||||
# счётчик принятых кадров для панели: иначе там вечный ноль
|
||||
if self.state is not None:
|
||||
sp = self.state.peer_get(peer_id)
|
||||
if sp is not None:
|
||||
sp.rx_packets += 1
|
||||
# запоминаем, через какой хотспот слышали передающего
|
||||
if dmr.src:
|
||||
self.set_radio_loc(dmr.src, peer_id)
|
||||
|
||||
Ссылка в новой задаче
Block a user