@@ -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,55 @@ 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 = SplitIoClient ::Engine ::Synchronizer . new ( repositories , @api_key , @config , params )
175+ end
176+
177+ def build_sync_manager
178+ @sync_manager = SplitIoClient ::Engine ::SyncManager . new ( @config , @synchronizer , @runtime_producer , @telemetry_synchronizer , @status_manager , @sse_handler , @push_manager )
179+ end
180+
181+ def build_streaming_components
182+ splits_worker = SplitIoClient ::SSE ::Workers ::SplitsWorker . new ( @synchronizer , @config , @splits_repository )
183+ segments_worker = SplitIoClient ::SSE ::Workers ::SegmentsWorker . new ( synchronizer , @config , @segments_repository )
184+ notification_manager_keeper = SSE ::NotificationManagerKeeper . new ( @config , @runtime_producer )
185+ notification_processor = SplitIoClient ::SSE ::NotificationProcessor . new ( @config , @splits_worker , @segments_worker )
186+ event_parser = SSE ::EventSource ::EventParser . new ( config )
187+ sse_client = SSE ::EventSource ::Client . new ( @config , @api_key , @runtime_producer , event_parser , notification_manager_keeper , notification_processor )
188+ @sse_handler = SSE ::SSEHandler . new ( @config , splits_worker , segments_worker , sse_client )
189+ @push_manager = PushManager . new ( @config , @sse_handler , @api_key , @runtime_producer )
190+ end
191+
192+ def build_repositories
193+ @splits_repository = SplitsRepository . new ( @config )
194+ @segments_repository = SegmentsRepository . new ( @config )
195+ @impressions_repository = ImpressionsRepository . new ( @config )
196+ @events_repository = EventsRepository . new ( @config , @api_key , @runtime_producer )
197+ end
198+
199+ def build_telemetry_synchronizer
200+ telemetry_api = SplitIoClient ::Api ::TelemetryApi . new ( @config , @api_key , @runtime_producer )
201+ @telemetry_synchronizer = Telemetry ::Synchronizer . new ( @config , @telemetry_consumers , @init_producer , repositories , telemetry_api )
202+ end
203+
204+ def build_impressions_components
205+ @impression_counter = SplitIoClient ::Engine ::Common ::ImpressionCounter . new
206+ @impressions_manager = SplitIoClient ::Engine ::Common ::ImpressionManager . new ( @config , @impressions_repository , @impression_counter , @runtime_producer )
207+ end
170208 end
171209end
0 commit comments