FrappyNode: do not rely on cached cfg

on startup and when disconnected, the main value of FrappyNode
gets trys to get its value from running processes.
This commit is contained in:
2023-09-14 08:43:04 +02:00
parent 47c1793b61
commit b9f54dee4a

View File

@ -148,7 +148,6 @@ class FrappyConfig(Device):
createThread('frappy change notification', self.handle_notifications) createThread('frappy change notification', self.handle_notifications)
def handle_notifications(self): def handle_notifications(self):
try:
controller = session.daemon_device._controller controller = session.daemon_device._controller
while True: while True:
self._trigger_change.wait() self._trigger_change.wait()
@ -163,8 +162,6 @@ class FrappyConfig(Device):
controller.new_request(ScriptRequest(cmd, None, User('guest', USER))) controller.new_request(ScriptRequest(cmd, None, User('guest', USER)))
except RequestError as e: except RequestError as e:
session.log.error(f'can not queue request {e!r}') session.log.error(f'can not queue request {e!r}')
except Exception as e:
print(e)
def check_or_start(self, main=None, stick=None, addons=None): def check_or_start(self, main=None, stick=None, addons=None):
"""start/stop frappy servers """start/stop frappy servers
@ -412,18 +409,7 @@ class FrappyNode(SecNodeDevice, Moveable):
super().doInit(mode) super().doInit(mode)
def doRead(self, maxage=0): def doRead(self, maxage=0):
try: return self._cfgvalue or ''
if self._secnode.online:
return self._secnode.descriptive_data['_frappy_config']
except (KeyError, AttributeError):
pass
if self._cfgvalue is None:
sea_cfg = FrappyManager().cfg_from_sea(config.instrument).get(self.service)
if sea_cfg:
return sea_cfg
if self._cache:
self._cfgvalue = self._cache.get(self, 'value')
return self._cfgvalue
def createDevices(self): def createDevices(self):
cfg = self.read() cfg = self.read()
@ -441,7 +427,12 @@ class FrappyNode(SecNodeDevice, Moveable):
def nodeStateChange(self, online, state): def nodeStateChange(self, online, state):
super().nodeStateChange(online, state) super().nodeStateChange(online, state)
if not online: if online:
if self._cfgvalue is None:
self._cfgvalue = FrappyManager().get_cfg(config.instrument, self.service)
if not self._cfgvalue:
self._cfgvalue = self.uri
else:
self._cfgvalue = None self._cfgvalue = None
cfg = self.read() cfg = self.read()
if self._lastcfg != cfg: if self._lastcfg != cfg:
@ -472,10 +463,8 @@ class FrappyNode(SecNodeDevice, Moveable):
ins = config.instrument ins = config.instrument
fm = FrappyManager() fm = FrappyManager()
info = fm.get_ins_info(ins) info = fm.get_ins_info(ins)
cfginfo = {} running_cfg = fm.get_cfg(ins, self.service) or ''
fm.get_procs(cfginfo=cfginfo) if not forced or cfg is None:
running_cfg = cfginfo.get((ins, self.service), '')
if not forced:
sea_cfg = fm.cfg_from_sea(ins).get(self.service, '') sea_cfg = fm.cfg_from_sea(ins).get(self.service, '')
if '?' in sea_cfg: if '?' in sea_cfg:
if sea_cfg == '?': if sea_cfg == '?':
@ -486,8 +475,14 @@ class FrappyNode(SecNodeDevice, Moveable):
elif sea_cfg: elif sea_cfg:
cfg = sea_cfg cfg = sea_cfg
elif running_cfg: elif running_cfg:
self._cfgvalue = running_cfg
return return
if cfg == running_cfg: if cfg == running_cfg:
self._cfgvalue = running_cfg
return
if cfg is None:
if forced:
self.log.error('can not restart - previous cfg unknown')
return return
if cfg != running_cfg: if cfg != running_cfg:
self.disable() self.disable()