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);
 }
Exemple #4
0
        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);
        }
Exemple #8
0
        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);
        }