mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-14 03:31:50 +02:00
fix(server): emit heartbeat with state
This commit is contained in:
@ -331,4 +331,8 @@ class RPCBase:
|
|||||||
Check if the GUI is alive.
|
Check if the GUI is alive.
|
||||||
"""
|
"""
|
||||||
heart = self._client.connector.get(MessageEndpoints.gui_heartbeat(self._root._gui_id))
|
heart = self._client.connector.get(MessageEndpoints.gui_heartbeat(self._root._gui_id))
|
||||||
return heart is not None
|
if heart is None:
|
||||||
|
return False
|
||||||
|
if heart.status == messages.BECStatus.RUNNING:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
@ -28,12 +28,13 @@ class BECWidgetsCLIServer:
|
|||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
gui_id: str = None,
|
gui_id: str,
|
||||||
dispatcher: BECDispatcher = None,
|
dispatcher: BECDispatcher = None,
|
||||||
client=None,
|
client=None,
|
||||||
config=None,
|
config=None,
|
||||||
gui_class: Union[BECFigure, BECDockArea] = BECFigure,
|
gui_class: Union[BECFigure, BECDockArea] = BECFigure,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
self.status = messages.BECStatus.BUSY
|
||||||
self.dispatcher = BECDispatcher(config=config) if dispatcher is None else dispatcher
|
self.dispatcher = BECDispatcher(config=config) if dispatcher is None else dispatcher
|
||||||
self.client = self.dispatcher.client if client is None else client
|
self.client = self.dispatcher.client if client is None else client
|
||||||
self.client.start()
|
self.client.start()
|
||||||
@ -47,11 +48,12 @@ class BECWidgetsCLIServer:
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Setup QTimer for heartbeat
|
# Setup QTimer for heartbeat
|
||||||
self._shutdown_event = False
|
|
||||||
self._heartbeat_timer = QTimer()
|
self._heartbeat_timer = QTimer()
|
||||||
self._heartbeat_timer.timeout.connect(self.emit_heartbeat)
|
self._heartbeat_timer.timeout.connect(self.emit_heartbeat)
|
||||||
self._heartbeat_timer.start(200)
|
self._heartbeat_timer.start(200)
|
||||||
|
|
||||||
|
self.status = messages.BECStatus.RUNNING
|
||||||
|
|
||||||
def on_rpc_update(self, msg: dict, metadata: dict):
|
def on_rpc_update(self, msg: dict, metadata: dict):
|
||||||
request_id = metadata.get("request_id")
|
request_id = metadata.get("request_id")
|
||||||
try:
|
try:
|
||||||
@ -111,16 +113,16 @@ class BECWidgetsCLIServer:
|
|||||||
return obj
|
return obj
|
||||||
|
|
||||||
def emit_heartbeat(self):
|
def emit_heartbeat(self):
|
||||||
if self._shutdown_event is False:
|
self.client.connector.set(
|
||||||
self.client.connector.set(
|
MessageEndpoints.gui_heartbeat(self.gui_id),
|
||||||
MessageEndpoints.gui_heartbeat(self.gui_id),
|
messages.StatusMessage(name=self.gui_id, status=self.status, info={}),
|
||||||
messages.StatusMessage(name=self.gui_id, status=1, info={}),
|
expire=10,
|
||||||
expire=1,
|
)
|
||||||
)
|
|
||||||
|
|
||||||
def shutdown(self): # TODO not sure if needed when cleanup is done at level of BECConnector
|
def shutdown(self): # TODO not sure if needed when cleanup is done at level of BECConnector
|
||||||
self._shutdown_event = True
|
self.status = messages.BECStatus.IDLE
|
||||||
self._heartbeat_timer.stop()
|
self._heartbeat_timer.stop()
|
||||||
|
self.emit_heartbeat()
|
||||||
self.gui.close()
|
self.gui.close()
|
||||||
self.client.shutdown()
|
self.client.shutdown()
|
||||||
|
|
||||||
@ -231,4 +233,5 @@ def main():
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__": # pragma: no cover
|
if __name__ == "__main__": # pragma: no cover
|
||||||
|
sys.argv = ["bec_widgets.cli.server", "--id", "test", "--gui_class", "BECDockArea"]
|
||||||
main()
|
main()
|
||||||
|
Reference in New Issue
Block a user