11import logging
22import uuid
33from pathlib import Path
4- from typing import Optional
4+ from typing import Mapping , Optional
55
66from blueapi .config import ApplicationConfig
7- from blueapi .core import BlueskyContext , DataEvent
7+ from blueapi .core import BlueskyContext , EventStream
88from blueapi .messaging import MessageContext , MessagingTemplate , StompMessagingTemplate
99from blueapi .utils import ConfigLoader
10- from blueapi .worker import RunEngineWorker , RunPlan , TaskEvent , Worker , WorkerEvent
10+ from blueapi .worker import RunEngineWorker , RunPlan , Worker
1111
1212from .model import (
1313 DeviceModel ,
@@ -35,9 +35,20 @@ def __init__(self, config: ApplicationConfig) -> None:
3535
3636 def run (self ) -> None :
3737 logging .basicConfig (level = self ._config .logging .level )
38- self ._worker .worker_events .subscribe (self ._on_worker_event )
39- self ._worker .task_events .subscribe (self ._on_task_event )
40- self ._worker .data_events .subscribe (self ._on_data_event )
38+
39+ self ._publish_event_streams (
40+ {
41+ self ._worker .worker_events : self ._template .destinations .topic (
42+ "public.worker.event"
43+ ),
44+ self ._worker .progress_events : self ._template .destinations .topic (
45+ "public.worker.event.progress"
46+ ),
47+ self ._worker .data_events : self ._template .destinations .topic (
48+ "public.worker.event.data"
49+ ),
50+ }
51+ )
4152
4253 self ._template .connect ()
4354
@@ -47,20 +58,14 @@ def run(self) -> None:
4758
4859 self ._worker .run_forever ()
4960
50- def _on_worker_event (self , event : WorkerEvent ) -> None :
51- self ._template .send (
52- self ._template .destinations .topic ("public.worker.event" ), event
53- )
54-
55- def _on_task_event (self , event : TaskEvent ) -> None :
56- self ._template .send (
57- self ._template .destinations .topic ("public.worker.event.task" ), event
58- )
61+ def _publish_event_streams (
62+ self , streams_to_destinations : Mapping [EventStream , str ]
63+ ) -> None :
64+ for stream , destination in streams_to_destinations .items ():
65+ self ._publish_event_stream (stream , destination )
5966
60- def _on_data_event (self , event : DataEvent ) -> None :
61- self ._template .send (
62- self ._template .destinations .topic ("public.worker.event.data" ), event
63- )
67+ def _publish_event_stream (self , stream : EventStream , destination : str ) -> None :
68+ stream .subscribe (lambda event : self ._template .send (destination , event ))
6469
6570 def _on_run_request (self , message_context : MessageContext , task : RunPlan ) -> None :
6671 name = str (uuid .uuid1 ())
0 commit comments