/// <summary> /// Initializes a new <see cref="MetricsController"/> /// </summary> /// <param name="metricsCollector">The data sink from which metrics can be sampled</param> public MetricsController(HttpMetricsCollector metricsCollector) { _metricsCollector = metricsCollector; }
/// <summary> /// Adds Platibus services to the specified service collection /// </summary> /// <param name="services">The service collection to which the Platibus services will /// be added</param> public static void AddPlatibus(this IServiceCollection services) { services.AddSingleton <AspNetCoreLoggingSink>(); services.AddSingleton(serviceProvider => serviceProvider.GetService <IAspNetCoreConfiguration>().DiagnosticService); services.AddSingleton(serviceProvider => serviceProvider.GetService <IAspNetCoreConfiguration>().MessageQueueingService); services.AddSingleton(serviceProvider => serviceProvider.GetService <IAspNetCoreConfiguration>().SubscriptionTrackingService); services.AddSingleton(serviceProvider => serviceProvider.GetService <IAspNetCoreConfiguration>().MessageJournal); services.AddSingleton(serviceProvider => serviceProvider.GetService <IAspNetCoreConfiguration>().AuthorizationService); services.AddSingleton(serviceProvider => { var diagnosticsService = serviceProvider.GetService <IDiagnosticService>(); var metricsCollector = new HttpMetricsCollector(); diagnosticsService.AddSink(metricsCollector); return(metricsCollector); }); services.AddSingleton <ITransportService>(serviceProvider => { var configuration = serviceProvider.GetService <IAspNetCoreConfiguration>(); var diagnosticsService = serviceProvider.GetService <IDiagnosticService>(); var messageQueueingService = serviceProvider.GetService <IMessageQueueingService>(); var subscriptionTrackingService = serviceProvider.GetService <ISubscriptionTrackingService>(); var messageJournal = serviceProvider.GetService <IMessageJournal>(); var transportServiceOptions = new HttpTransportServiceOptions(configuration.BaseUri, messageQueueingService, subscriptionTrackingService) { DiagnosticService = diagnosticsService, Endpoints = configuration.Endpoints, MessageJournal = messageJournal, HttpClientFactory = configuration.HttpClientFactory, BypassTransportLocalDestination = configuration.BypassTransportLocalDestination }; var transportService = new HttpTransportService(transportServiceOptions); transportService.Init().WaitOnCompletionSource(); return(transportService); }); services.AddSingleton <IHttpResourceRouter>(serviceProvider => { var configuration = serviceProvider.GetService <IAspNetCoreConfiguration>(); var transportService = serviceProvider.GetService <ITransportService>(); var subscriptionTrackingService = serviceProvider.GetService <ISubscriptionTrackingService>(); var messageJournal = serviceProvider.GetService <IMessageJournal>(); var metricsCollector = serviceProvider.GetService <HttpMetricsCollector>(); var authorizationService = serviceProvider.GetService <IAuthorizationService>(); return(new ResourceTypeDictionaryRouter(configuration.BaseUri) { { "message", new MessageController(transportService.ReceiveMessage, authorizationService) }, { "topic", new TopicController(subscriptionTrackingService, configuration.Topics, authorizationService) }, { "journal", new JournalController(messageJournal, authorizationService) }, { "metrics", new MetricsController(metricsCollector) } }); }); services.AddSingleton <IBus>(serviceProvider => { var configuration = serviceProvider.GetService <IAspNetCoreConfiguration>(); var transportService = serviceProvider.GetService <ITransportService>(); var messageQueueingService = serviceProvider.GetService <IMessageQueueingService>(); var bus = new Bus(configuration, configuration.BaseUri, transportService, messageQueueingService); bus.Init().WaitOnCompletionSource(); return(bus); }); }