панель: живой хотспот выглядел мёртвым
Мастер считает время по 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 contextlib
|
||||||
import signal
|
import signal
|
||||||
import sys
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
from . import config as cfgmod
|
from . import config as cfgmod
|
||||||
from . import log as logmod
|
from . import log as logmod
|
||||||
@@ -47,6 +48,11 @@ def _wire_state(master: HomebrewMaster, state: State) -> None:
|
|||||||
sp.colorcode = cfgp.get("colorcode", "")
|
sp.colorcode = cfgp.get("colorcode", "")
|
||||||
sp.rx_freq = cfgp.get("rx_freq", "")
|
sp.rx_freq = cfgp.get("rx_freq", "")
|
||||||
sp.tx_freq = cfgp.get("tx_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):
|
for pid in list(state.peers):
|
||||||
if pid not in master.peers:
|
if pid not in master.peers:
|
||||||
gone = state.peer_del(pid)
|
gone = state.peer_del(pid)
|
||||||
|
|||||||
@@ -75,6 +75,11 @@ class Router:
|
|||||||
|
|
||||||
# ── собственно маршрут ──────────────────────────────────────────────────
|
# ── собственно маршрут ──────────────────────────────────────────────────
|
||||||
def route(self, peer_id: int, dmr, connected: list[int]) -> list[int]:
|
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:
|
if dmr.src:
|
||||||
self.set_radio_loc(dmr.src, peer_id)
|
self.set_radio_loc(dmr.src, peer_id)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user