@@ -18,7 +18,8 @@ use crate::services::objectstore::Objectstore;
1818#[ cfg( feature = "processing" ) ]
1919use crate :: services:: objectstore:: ObjectstoreService ;
2020use crate :: services:: outcome:: {
21- OutcomeAggregator , OutcomeProducer , OutcomeProducerService , TrackOutcome ,
21+ ClientReportOutcomeProducerService , NullOutcomeProducerService , OutcomeProducerService ,
22+ TrackOutcome ,
2223} ;
2324use crate :: services:: processor:: {
2425 self , EnvelopeProcessor , EnvelopeProcessorService , EnvelopeProcessorServicePool ,
@@ -39,7 +40,7 @@ use anyhow::Result;
3940use axum:: extract:: FromRequestParts ;
4041use axum:: http:: request:: Parts ;
4142use relay_cogs:: Cogs ;
42- use relay_config:: Config ;
43+ use relay_config:: { Config , EmitOutcomes , RelayMode } ;
4344#[ cfg( feature = "processing" ) ]
4445use relay_config:: { RedisConfigRef , RedisConfigsRef } ;
4546#[ cfg( feature = "processing" ) ]
@@ -73,7 +74,6 @@ pub enum ServiceError {
7374#[ derive( Clone , Debug ) ]
7475pub struct Registry {
7576 pub health_check : Addr < HealthCheck > ,
76- pub outcome_producer : Addr < OutcomeProducer > ,
7777 pub outcome_aggregator : Addr < TrackOutcome > ,
7878 pub processor : Addr < EnvelopeProcessor > ,
7979 pub relay_cache : Addr < RelayCache > ,
@@ -195,19 +195,25 @@ impl ServiceState {
195195 // Create an address for the `EnvelopeProcessor`, which can be injected into the
196196 // other services.
197197 let ( processor, processor_rx) = match config. relay_mode ( ) {
198- relay_config :: RelayMode :: Proxy => channel ( ProxyProcessorService :: name ( ) ) ,
199- relay_config :: RelayMode :: Managed => channel ( EnvelopeProcessorService :: name ( ) ) ,
198+ RelayMode :: Proxy => channel ( ProxyProcessorService :: name ( ) ) ,
199+ RelayMode :: Managed => channel ( EnvelopeProcessorService :: name ( ) ) ,
200200 } ;
201201
202202 let ( aggregator, aggregator_rx) = channel ( RouterService :: name ( ) ) ;
203203
204- let outcome_producer = services. start ( OutcomeProducerService :: create (
205- config. clone ( ) ,
206- processor. clone ( ) ,
207- aggregator. clone ( ) ,
208- ) ?) ;
209- let outcome_aggregator =
210- services. start ( OutcomeAggregator :: new ( & config, outcome_producer. clone ( ) ) ) ;
204+ let outcome_aggregator = match config. emit_outcomes ( ) {
205+ EmitOutcomes :: None => services. start ( NullOutcomeProducerService :: new ( ) ) ,
206+ _ => match config. relay_mode ( ) {
207+ RelayMode :: Proxy => services. start ( ClientReportOutcomeProducerService :: new (
208+ & config,
209+ processor. clone ( ) ,
210+ ) ) ,
211+ RelayMode :: Managed => services. start ( OutcomeProducerService :: new (
212+ Arc :: clone ( & config) ,
213+ aggregator. clone ( ) ,
214+ ) ) ,
215+ } ,
216+ } ;
211217
212218 let ( global_config, global_config_rx) =
213219 GlobalConfigService :: new ( config. clone ( ) , upstream_relay. clone ( ) ) ;
@@ -267,7 +273,7 @@ impl ServiceState {
267273 ) ;
268274
269275 let ( processor_pool, aggregator_handle, autoscaling) = match config. relay_mode ( ) {
270- relay_config :: RelayMode :: Proxy => {
276+ RelayMode :: Proxy => {
271277 services. start_with (
272278 ProxyProcessorService :: new (
273279 config. clone ( ) ,
@@ -281,7 +287,7 @@ impl ServiceState {
281287 ) ;
282288 ( None , None , None )
283289 }
284- relay_config :: RelayMode :: Managed => {
290+ RelayMode :: Managed => {
285291 let processor_pool = create_processor_pool ( & config) ?;
286292
287293 let router = RouterService :: new (
@@ -365,7 +371,6 @@ impl ServiceState {
365371 let registry = Registry {
366372 processor,
367373 health_check,
368- outcome_producer,
369374 outcome_aggregator,
370375 relay_cache,
371376 global_config,
@@ -426,17 +431,12 @@ impl ServiceState {
426431 & self . inner . registry . health_check
427432 }
428433
429- /// Returns the address of the [`OutcomeProducer`] service.
430- pub fn outcome_producer ( & self ) -> & Addr < OutcomeProducer > {
431- & self . inner . registry . outcome_producer
432- }
433-
434- /// Returns the address of the [`OutcomeProducer`] service.
434+ /// Returns the address of the [`UpstreamRelay`] service.
435435 pub fn upstream_relay ( & self ) -> & Addr < UpstreamRelay > {
436436 & self . inner . registry . upstream_relay
437437 }
438438
439- /// Returns the address of the [`OutcomeProducer `] service.
439+ /// Returns the address of the [`EnvelopeProcessor `] service.
440440 pub fn processor ( & self ) -> & Addr < EnvelopeProcessor > {
441441 & self . inner . registry . processor
442442 }
@@ -446,7 +446,7 @@ impl ServiceState {
446446 & self . inner . registry . global_config
447447 }
448448
449- /// Returns the address of the [`OutcomeProducer `] service.
449+ /// Returns the address of the [`TrackOutcome `] service.
450450 pub fn outcome_aggregator ( & self ) -> & Addr < TrackOutcome > {
451451 & self . inner . registry . outcome_aggregator
452452 }
0 commit comments