Background updater for lxmd sensor

This commit is contained in:
Mark Qvist 2025-01-26 12:15:26 +01:00
parent cc87e8c109
commit b03d91d206

View File

@ -2733,11 +2733,15 @@ class RNSTransport(Sensor):
class LXMFPropagation(Sensor): class LXMFPropagation(Sensor):
SID = Sensor.SID_LXMF_PROPAGATION SID = Sensor.SID_LXMF_PROPAGATION
STALE_TIME = 120 STALE_TIME = 45
def __init__(self): def __init__(self):
self.identity = None self.identity = None
self.lxmd = None self.lxmd = None
self._last_update = 0
self._update_interval = 60
self._update_lock = threading.Lock()
self._running = False
super().__init__(type(self).SID, type(self).STALE_TIME) super().__init__(type(self).SID, type(self).STALE_TIME)
def set_identity(self, identity): def set_identity(self, identity):
@ -2751,14 +2755,40 @@ class LXMFPropagation(Sensor):
except Exception as e: except Exception as e:
RNS.log("Could not load LXMF propagation sensor identity from \"{file_path}\"", RNS.LOG_ERROR) RNS.log("Could not load LXMF propagation sensor identity from \"{file_path}\"", RNS.LOG_ERROR)
def _update_job(self):
while self._running:
self._update_data()
time.sleep(self._update_interval)
def _start_update_job(self):
if not self._running:
self._running = True
update_thread = threading.Thread(target=self._update_job, daemon=True)
update_thread.start()
def setup_sensor(self): def setup_sensor(self):
self.update_data() self.update_data()
def teardown_sensor(self): def teardown_sensor(self):
self._running = False
self.identity = None self.identity = None
self.data = None self.data = None
def update_data(self): def update_data(self):
# This sensor runs the actual data updates
# in the background. An update_data request
# will simply start the update job if it is
# not already running.
if not self._running:
RNS.log(self)
self._start_update_job()
def _update_data(self):
if not self.synthesized:
with self._update_lock:
if time.time() - self._last_update < self.STALE_TIME:
return
if self.identity != None: if self.identity != None:
if self.lxmd == None: if self.lxmd == None:
import LXMF.LXMPeer as LXMPeer import LXMF.LXMPeer as LXMPeer
@ -2768,6 +2798,7 @@ class LXMFPropagation(Sensor):
self.ERROR_TIMEOUT = LXMPeer.LXMPeer.ERROR_TIMEOUT self.ERROR_TIMEOUT = LXMPeer.LXMPeer.ERROR_TIMEOUT
self.lxmd = lxmd self.lxmd = lxmd
self._last_update = time.time()
status_response = self.lxmd.query_status(identity=self.identity) status_response = self.lxmd.query_status(identity=self.identity)
if status_response == None: if status_response == None:
RNS.log("Status response from lxmd was received, but contained no data", RNS.LOG_ERROR) RNS.log("Status response from lxmd was received, but contained no data", RNS.LOG_ERROR)