@@ -33,15 +33,10 @@ def initialize(api_key, config_hash = {})
3333 register_factory
3434
3535 build_telemetry_components
36+ build_repositories
37+ build_impressions_components
38+ build_telemetry_synchronizer
3639
37- @splits_repository = SplitsRepository . new ( @config )
38- @segments_repository = SegmentsRepository . new ( @config )
39- @impressions_repository = ImpressionsRepository . new ( @config )
40- @events_repository = EventsRepository . new ( @config , @api_key , @runtime_producer )
41- @impression_counter = SplitIoClient ::Engine ::Common ::ImpressionCounter . new
42- @impressions_manager = SplitIoClient ::Engine ::Common ::ImpressionManager . new ( @config , @impressions_repository , @impression_counter , @runtime_producer )
43- @telemetry_api = SplitIoClient ::Api ::TelemetryApi . new ( @config , @api_key , @runtime_producer )
44- @telemetry_synchronizer = Telemetry ::Synchronizer . new ( @config , @telemetry_consumers , @init_producer , repositories , @telemetry_api )
4540 @status_manager = Engine ::StatusManager . new ( @config )
4641
4742 start!
@@ -59,18 +54,12 @@ def start!
5954 return
6055 end
6156
62- split_fetcher = SplitFetcher . new ( @splits_repository , @api_key , config , @runtime_producer )
63- segment_fetcher = SegmentFetcher . new ( @segments_repository , @api_key , config , @runtime_producer )
64- params = {
65- split_fetcher : split_fetcher ,
66- segment_fetcher : segment_fetcher ,
67- imp_counter : @impression_counter ,
68- telemetry_runtime_producer : @runtime_producer ,
69- telemetry_synchronizer : @telemetry_synchronizer
70- }
57+ build_fetchers
58+ build_synchronizer
59+ build_streaming_components
60+ build_sync_manager
7161
72- synchronizer = SplitIoClient ::Engine ::Synchronizer . new ( repositories , @api_key , @config , params )
73- SplitIoClient ::Engine ::SyncManager . new ( repositories , @api_key , @config , synchronizer , @runtime_producer , @telemetry_synchronizer , @status_manager ) . start
62+ @sync_manager . start
7463 end
7564
7665 def stop!
@@ -166,6 +155,56 @@ def build_telemetry_components
166155 @runtime_producer = Telemetry ::RuntimeProducer . new ( @config )
167156
168157 @telemetry_consumers = { init : @init_consumer , evaluation : @evaluation_consumer , runtime : @runtime_consumer }
169- end
158+ end
159+
160+ def build_fetchers
161+ @split_fetcher = SplitFetcher . new ( @splits_repository , @api_key , @config , @runtime_producer )
162+ @segment_fetcher = SegmentFetcher . new ( @segments_repository , @api_key , @config , @runtime_producer )
163+ end
164+
165+ def build_synchronizer
166+ params = {
167+ split_fetcher : @split_fetcher ,
168+ segment_fetcher : @segment_fetcher ,
169+ imp_counter : @impression_counter ,
170+ telemetry_runtime_producer : @runtime_producer ,
171+ telemetry_synchronizer : @telemetry_synchronizer
172+ }
173+
174+ @synchronizer = Engine ::Synchronizer . new ( repositories , @api_key , @config , params )
175+ end
176+
177+ def build_streaming_components
178+ @push_status_queue = Queue . new
179+ splits_worker = SSE ::Workers ::SplitsWorker . new ( @synchronizer , @config , @splits_repository )
180+ segments_worker = SSE ::Workers ::SegmentsWorker . new ( @synchronizer , @config , @segments_repository )
181+ notification_manager_keeper = SSE ::NotificationManagerKeeper . new ( @config , @runtime_producer , @push_status_queue )
182+ notification_processor = SSE ::NotificationProcessor . new ( @config , splits_worker , segments_worker )
183+ event_parser = SSE ::EventSource ::EventParser . new ( config )
184+ sse_client = SSE ::EventSource ::Client . new ( @config , @api_key , @runtime_producer , event_parser , notification_manager_keeper , notification_processor , @push_status_queue )
185+ @sse_handler = SSE ::SSEHandler . new ( @config , splits_worker , segments_worker , sse_client )
186+ @push_manager = Engine ::PushManager . new ( @config , @sse_handler , @api_key , @runtime_producer )
187+ end
188+
189+ def build_sync_manager
190+ @sync_manager = Engine ::SyncManager . new ( @config , @synchronizer , @runtime_producer , @telemetry_synchronizer , @status_manager , @sse_handler , @push_manager , @push_status_queue )
191+ end
192+
193+ def build_repositories
194+ @splits_repository = SplitsRepository . new ( @config )
195+ @segments_repository = SegmentsRepository . new ( @config )
196+ @impressions_repository = ImpressionsRepository . new ( @config )
197+ @events_repository = EventsRepository . new ( @config , @api_key , @runtime_producer )
198+ end
199+
200+ def build_telemetry_synchronizer
201+ telemetry_api = Api ::TelemetryApi . new ( @config , @api_key , @runtime_producer )
202+ @telemetry_synchronizer = Telemetry ::Synchronizer . new ( @config , @telemetry_consumers , @init_producer , repositories , telemetry_api )
203+ end
204+
205+ def build_impressions_components
206+ @impression_counter = Engine ::Common ::ImpressionCounter . new
207+ @impressions_manager = Engine ::Common ::ImpressionManager . new ( @config , @impressions_repository , @impression_counter , @runtime_producer )
208+ end
170209 end
171210end
0 commit comments