private static IHostBuilder Setup(string[] args) { var hostBuilder = new HostBuilder() .ConfigureLogging((ctx, logging) => { logging.AddConfiguration(ctx.Configuration.GetSection("Logging")); logging.AddConsole(); }) .ConfigureAppConfiguration((ctx, config) => { config.AddJsonFile("appsettings.json", false); config.AddJsonFile("appsettings.local.json", true); config.AddCommandLine(args); config.AddEnvironmentVariables(); }) .ConfigureServices((hostContext, services) => { services.AddLogging(); var config = new RabbitMetricsConfiguration(); hostContext.Configuration.Bind(config); services.AddRabbitMqMetrics(config); }) .UseConsoleLifetime(); return(hostBuilder); }
private static IServiceProvider InitServiceProvider(int maxRetries, int minDelayInSeconds) { var serviceCollection = new ServiceCollection(); var config = new RabbitMetricsConfiguration(); serviceCollection.AddMetricsConsumer(config.RabbitMqUserName, config.RabbitMqPassword, maxRetries, minDelayInSeconds); serviceCollection.AddLogging(); return(serviceCollection.BuildServiceProvider()); }
public RabbitMqBackgroundService( ILogger <RabbitMqBackgroundService> logger, IHostApplicationLifetime appLifetime, TelemetryClient telemetryClient, RabbitMetricsConfiguration configuration, IHttpClientFactory clientFactory, ILogger <RabbitMqMetricsConsumer> metricsConsumerLogger) { this.logger = logger; this.processor = new RabbitMQMetricsProcessor(telemetryClient, configuration, logger, clientFactory, metricsConsumerLogger, appLifetime); }
public async Task Setup() { rabbitMqStatsGenerator = new RabbitMqStatsGenerator(); await rabbitMqStatsGenerator.StartAsync(); var serviceCollection = new ServiceCollection(); var config = new RabbitMetricsConfiguration(); serviceCollection.AddMetricsConsumer(config.RabbitMqUserName, config.RabbitMqPassword); serviceCollection.AddLogging(); serviceProvider = serviceCollection.BuildServiceProvider(); }
public RabbitMqMetricsConsumer( string path, RabbitMetricsConfiguration configuration, ILogger <RabbitMqMetricsConsumer> logger, IMetricsValueConverter valueConverter, IHttpClientFactory clientFactory) { var scheme = configuration.UseSSL ? Uri.UriSchemeHttps : Uri.UriSchemeHttp; var baseUri = new Uri($"{scheme}://{configuration.RabbitMqHost}:{configuration.RabbitMqPort}"); this.uri = new Uri(baseUri, path); this.logger = logger; this.valueConverter = valueConverter; this.clientFactory = clientFactory; }
public RabbitMQMetricsProcessor( TelemetryClient client, RabbitMetricsConfiguration configuration, ILogger logger, IHttpClientFactory httpClientFactory, ILogger <RabbitMqMetricsConsumer> metricsConsumerLogger, IHostApplicationLifetime appLifetime = null) { this.client = client; this.configuration = configuration; this.logger = logger; this.appLifetime = appLifetime; this.processors = CreateProcessors(configuration, client, httpClientFactory, metricsConsumerLogger); logger.LogInformation("Created {0} processors", this.processors.Count); }
private static IList <IMetricProcessor> CreateProcessors(RabbitMetricsConfiguration configuration, TelemetryClient client, IHttpClientFactory httpClientFactory, ILogger <RabbitMqMetricsConsumer> logger) { var queueProcessor = new DefaultMetricProcessor( new RabbitMqMetricsConsumer( RabbitMqMetricsConsumer.QueuePath, configuration, logger, new QueueValueConverter(), httpClientFactory), new TelemetryClientPublisher(MetricsDefinitions.CreateQueueMetric(client))); var overviewProcessor = new DefaultMetricProcessor( new RabbitMqMetricsConsumer( RabbitMqMetricsConsumer.OverviewPath, configuration, logger, new MessageOverviewValueConverter(), httpClientFactory), new TelemetryClientPublisher(MetricsDefinitions.CreateOverviewMetric(client))); var exchangeProcessor = new DefaultMetricProcessor( new RabbitMqMetricsConsumer( RabbitMqMetricsConsumer.ExchangePath, configuration, logger, new ExchangeValueConverter(), httpClientFactory), new TelemetryClientPublisher(MetricsDefinitions.CreateExchangewMetric(client))); var processors = new List <IMetricProcessor>(3); processors.Add(queueProcessor); processors.Add(overviewProcessor); processors.Add(exchangeProcessor); return(processors); }
public static IServiceCollection AddRabbitMqMetrics(this IServiceCollection services, RabbitMetricsConfiguration configuration) { configuration.Validate(); services.AddSingleton(configuration); services.AddHostedService <RabbitMqBackgroundService>(); var telemetryConfig = TelemetryConfiguration.CreateDefault(); telemetryConfig.InstrumentationKey = configuration.AppInsightsKey; var telemetryClient = new TelemetryClient(telemetryConfig); services.AddSingleton(telemetryClient); services.AddMetricsConsumer(configuration.RabbitMqUserName, configuration.RabbitMqPassword); return(services); }