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:
63
devices.py
63
devices.py
@ -148,23 +148,20 @@ class FrappyConfig(Device):
|
||||
createThread('frappy change notification', self.handle_notifications)
|
||||
|
||||
def handle_notifications(self):
|
||||
try:
|
||||
controller = session.daemon_device._controller
|
||||
while True:
|
||||
self._trigger_change.wait()
|
||||
self._trigger_change.clear()
|
||||
time.sleep(2)
|
||||
if self._trigger_change.is_set():
|
||||
continue
|
||||
try:
|
||||
current = self.check_or_start()
|
||||
if current != self._previous_shown:
|
||||
cmd = 'frappy_changed()'
|
||||
controller.new_request(ScriptRequest(cmd, None, User('guest', USER)))
|
||||
except RequestError as e:
|
||||
session.log.error(f'can not queue request {e!r}')
|
||||
except Exception as e:
|
||||
print(e)
|
||||
controller = session.daemon_device._controller
|
||||
while True:
|
||||
self._trigger_change.wait()
|
||||
self._trigger_change.clear()
|
||||
time.sleep(2)
|
||||
if self._trigger_change.is_set():
|
||||
continue
|
||||
try:
|
||||
current = self.check_or_start()
|
||||
if current != self._previous_shown:
|
||||
cmd = 'frappy_changed()'
|
||||
controller.new_request(ScriptRequest(cmd, None, User('guest', USER)))
|
||||
except RequestError as e:
|
||||
session.log.error(f'can not queue request {e!r}')
|
||||
|
||||
def check_or_start(self, main=None, stick=None, addons=None):
|
||||
"""start/stop frappy servers
|
||||
@ -412,18 +409,7 @@ class FrappyNode(SecNodeDevice, Moveable):
|
||||
super().doInit(mode)
|
||||
|
||||
def doRead(self, maxage=0):
|
||||
try:
|
||||
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
|
||||
return self._cfgvalue or ''
|
||||
|
||||
def createDevices(self):
|
||||
cfg = self.read()
|
||||
@ -441,7 +427,12 @@ class FrappyNode(SecNodeDevice, Moveable):
|
||||
|
||||
def nodeStateChange(self, 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
|
||||
cfg = self.read()
|
||||
if self._lastcfg != cfg:
|
||||
@ -472,10 +463,8 @@ class FrappyNode(SecNodeDevice, Moveable):
|
||||
ins = config.instrument
|
||||
fm = FrappyManager()
|
||||
info = fm.get_ins_info(ins)
|
||||
cfginfo = {}
|
||||
fm.get_procs(cfginfo=cfginfo)
|
||||
running_cfg = cfginfo.get((ins, self.service), '')
|
||||
if not forced:
|
||||
running_cfg = fm.get_cfg(ins, self.service) or ''
|
||||
if not forced or cfg is None:
|
||||
sea_cfg = fm.cfg_from_sea(ins).get(self.service, '')
|
||||
if '?' in sea_cfg:
|
||||
if sea_cfg == '?':
|
||||
@ -486,9 +475,15 @@ class FrappyNode(SecNodeDevice, Moveable):
|
||||
elif sea_cfg:
|
||||
cfg = sea_cfg
|
||||
elif running_cfg:
|
||||
self._cfgvalue = running_cfg
|
||||
return
|
||||
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
|
||||
if cfg != running_cfg:
|
||||
self.disable()
|
||||
if running_cfg:
|
||||
|
Reference in New Issue
Block a user