Exemple #1
0
        private async Task ReportHealth(IMetricReporter reporter, IMetrics metrics, CancellationToken token)
        {
            var healthStatus = await metrics.Health.ReadStatusAsync(token);

            var passed   = healthStatus.Results.Where(r => r.Check.Status.IsHealthy()).ToArray();
            var failed   = healthStatus.Results.Where(r => r.Check.Status.IsUnhealthy()).ToArray();
            var degraded = healthStatus.Results.Where(r => r.Check.Status.IsDegraded()).ToArray();

            reporter.ReportHealth(_options.GlobalTags, passed, degraded, failed);

            foreach (var check in passed)
            {
                metrics.Measure.Counter.Increment(ApplicationHealthMetricRegistry.HealthyCheckCounter, check.Name);
            }

            foreach (var check in degraded)
            {
                metrics.Measure.Counter.Increment(ApplicationHealthMetricRegistry.DegradedCheckCounter, check.Name);
            }

            foreach (var check in failed)
            {
                metrics.Measure.Counter.Increment(ApplicationHealthMetricRegistry.UnhealthyCheckCounter, check.Name);
            }
        }
Exemple #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="MessageCreateEventController" /> class.
 /// </summary>
 /// <param name="tracingService">Service for doing traces.</param>
 /// <param name="userService">Service to manage users with.</param>
 /// <param name="emitter">Emitter to emit messages to.</param>
 /// <param name="discordUserClient">Client used to send User API requests to Discord.</param>
 /// <param name="discordChannelClient">Client used to send Channel API requests to Discord.</param>
 /// <param name="strings">Localizer service for retrieving strings.</param>
 /// <param name="adapterOptions">Options to use for the adapter.</param>
 /// <param name="commandsService">Client for interacting with the commands service.</param>
 /// <param name="gateway">Gateway that discord sends events through.</param>
 /// <param name="reporter">Reporter to report metrics to.</param>
 /// <param name="logger">Logger used to log information to some destination(s).</param>
 public MessageCreateEventController(
     ITracingService tracingService,
     IUserService userService,
     IMessageEmitter emitter,
     IDiscordUserClient discordUserClient,
     IDiscordChannelClient discordChannelClient,
     IStringLocalizer <Strings> strings,
     IOptions <AdapterOptions> adapterOptions,
     IBrighidCommandsService commandsService,
     IGatewayService gateway,
     IMetricReporter reporter,
     ILogger <MessageCreateEventController> logger
     )
 {
     this.tracingService       = tracingService;
     this.userService          = userService;
     this.emitter              = emitter;
     this.discordUserClient    = discordUserClient;
     this.discordChannelClient = discordChannelClient;
     this.strings              = strings;
     this.adapterOptions       = adapterOptions.Value;
     this.commandsService      = commandsService;
     this.gateway              = gateway;
     this.reporter             = reporter;
     this.logger = logger;
 }
        private static void ReportMetricTypes(IMetricReporter reporter, CancellationToken token, MetricsDataValueSource data)
        {
            foreach (var contextValueSource in data.Contexts)
            {
                ReportMetricType(
                    contextValueSource.Counters,
                    c => { reporter.ReportMetric($"{contextValueSource.Context}", c); },
                    token);

                ReportMetricType(
                    contextValueSource.Gauges,
                    g => { reporter.ReportMetric($"{contextValueSource.Context}", g); },
                    token);

                ReportMetricType(
                    contextValueSource.Histograms,
                    h => { reporter.ReportMetric($"{contextValueSource.Context}", h); },
                    token);

                ReportMetricType(
                    contextValueSource.Meters,
                    m => { reporter.ReportMetric($"{contextValueSource.Context}", m); },
                    token);

                ReportMetricType(
                    contextValueSource.Timers,
                    t => { reporter.ReportMetric($"{contextValueSource.Context}", t); },
                    token);

                ReportMetricType(
                    contextValueSource.ApdexScores,
                    t => { reporter.ReportMetric($"{contextValueSource.Context}", t); },
                    token);
            }
        }
 public Task <bool> GenerateAsync(
     IMetricReporter reporter,
     IMetrics metrics,
     CancellationToken token)
 {
     return(GenerateAsync(reporter, metrics, metrics.GlobalFilter, token));
 }
Exemple #5
0
        internal async Task Generate(IMetricReporter reporter,
                                     IMetrics metrics,
                                     IMetricsFilter reporterMetricsFilter,
                                     CancellationToken token)
        {
            if (reporterMetricsFilter == default(IMetricsFilter))
            {
                reporterMetricsFilter = metrics.Advanced.GlobalFilter;
            }

            reporter.StartReport(metrics);

            var data = await metrics.Advanced.Data.ReadDataAsync(reporterMetricsFilter);

            if (data.Environment.Entries.Any() && reporterMetricsFilter.ReportEnvironment)
            {
                reporter.StartMetricTypeReport(typeof(EnvironmentInfo));

                reporter.ReportEnvironment(data.Environment);

                reporter.EndMetricTypeReport(typeof(EnvironmentInfo));
            }

            foreach (var contextValueSource in data.Contexts)
            {
                ReportMetricType(reporter, contextValueSource.Counters,
                                 c => { reporter.ReportMetric($"{contextValueSource.Context}", c); }, token);

                ReportMetricType(reporter, contextValueSource.Gauges,
                                 g => { reporter.ReportMetric($"{contextValueSource.Context}", g); }, token);

                ReportMetricType(reporter, contextValueSource.Histograms,
                                 h => { reporter.ReportMetric($"{contextValueSource.Context}", h); }, token);

                ReportMetricType(reporter, contextValueSource.Meters,
                                 m => { reporter.ReportMetric($"{contextValueSource.Context}", m); }, token);

                ReportMetricType(reporter, contextValueSource.Timers,
                                 t => { reporter.ReportMetric($"{contextValueSource.Context}", t); }, token);
            }

            if (reporterMetricsFilter.ReportHealthChecks)
            {
                var healthStatus = await metrics.Advanced.Health.ReadStatusAsync();

                reporter.StartMetricTypeReport(typeof(HealthStatus));

                var passed   = healthStatus.Results.Where(r => r.Check.Status.IsHealthy());
                var failed   = healthStatus.Results.Where(r => r.Check.Status.IsUnhealthy());
                var degraded = healthStatus.Results.Where(r => r.Check.Status.IsDegraded());

                reporter.ReportHealth(passed, degraded, failed);

                reporter.EndMetricTypeReport(typeof(HealthStatus));
            }

            reporter.EndReport(metrics);
        }
        public static void ReportedStarted(this ILogger logger, IMetricReporter reporter)
        {
            if (!logger.IsEnabled(LogLevel.Trace))
            {
                return;
            }

            ReportStartedAction(logger, reporter.GetType().FullName, null);
        }
            public async Task ShouldReportMessageCreateEventMetric(
                [Frozen, Substitute] IMetricReporter reporter,
                [Target] MessageCreateEventController controller
                )
            {
                var cancellationToken = new CancellationToken(false);
                await controller.Handle(new MessageCreateEvent { }, cancellationToken);

                await reporter.Received().Report(Is(default(MessageCreateEventMetric)), Is(cancellationToken));
            }
        private async Task ReportHealth(IMetricReporter reporter, IMetrics metrics, CancellationToken token)
        {
            var healthStatus = await metrics.Health.ReadStatusAsync(token);

            var passed   = healthStatus.Results.Where(r => r.Check.Status.IsHealthy()).ToArray();
            var failed   = healthStatus.Results.Where(r => r.Check.Status.IsUnhealthy()).ToArray();
            var degraded = healthStatus.Results.Where(r => r.Check.Status.IsDegraded()).ToArray();

            reporter.ReportHealth(_options.GlobalTags, passed, degraded, failed);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ResumedEventController" /> class.
 /// </summary>
 /// <param name="gateway">The gateway service to use.</param>
 /// <param name="reporter">Reporter used to report metric.</param>
 /// <param name="logger">Logger used to log information to some destination(s).</param>
 public ResumedEventController(
     IGatewayService gateway,
     IMetricReporter reporter,
     ILogger <ResumedEventController> logger
     )
 {
     this.gateway  = gateway;
     this.reporter = reporter;
     this.logger   = logger;
 }
Exemple #10
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultGatewayRestartService" /> class.
 /// </summary>
 /// <param name="utilsFactory">Factory used to create various utilities.</param>
 /// <param name="reporter">Reporter used to report metrics.</param>
 /// <param name="logger">Logger used to log info to some destination(s).</param>
 public DefaultGatewayRestartService(
     IGatewayUtilsFactory utilsFactory,
     IMetricReporter reporter,
     ILogger <DefaultGatewayRestartService> logger
     )
 {
     this.utilsFactory = utilsFactory;
     this.reporter     = reporter;
     this.logger       = logger;
 }
Exemple #11
0
 private Recorder(ILogger logger, ICrashReporter crasher, IAuditReporter auditor, IMetricReporter measurer)
 {
     logger.GuardAgainstNull(nameof(logger));
     crasher.GuardAgainstNull(nameof(crasher));
     auditor.GuardAgainstNull(nameof(auditor));
     measurer.GuardAgainstNull(nameof(measurer));
     this.logger   = logger;
     this.crasher  = crasher;
     this.auditor  = auditor;
     this.measurer = measurer;
 }
Exemple #12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ReconnectEventController" /> class.
 /// </summary>
 /// <param name="gateway">The gateway service to use.</param>
 /// <param name="utilsFactory">Factory to create utilities with.</param>
 /// <param name="reporter">Reporter used to report metrics.</param>
 /// <param name="logger">Logger used to log information to some destination(s).</param>
 public ReconnectEventController(
     IGatewayService gateway,
     IGatewayUtilsFactory utilsFactory,
     IMetricReporter reporter,
     ILogger <ReconnectEventController> logger
     )
 {
     this.gateway      = gateway;
     this.utilsFactory = utilsFactory;
     this.logger       = logger;
     this.reporter     = reporter;
 }
Exemple #13
0
 public DeduplicationManager(
     ISearchProvider searchProvider,
     IMetricReporter metricReporter,
     IDuplicatesRuleManager duplicatesRuleManager,
     IDeduplicationSearchQueryBuilder deduplicationSearchQueryBuilder,
     IFindSimilarRecordsRequestBuilder findSimilarRecordsRequestBuilder)
 {
     _searchProvider                   = searchProvider;
     _metricReporter                   = metricReporter;
     _duplicatesRuleManager            = duplicatesRuleManager;
     _deduplicationSearchQueryBuilder  = deduplicationSearchQueryBuilder;
     _findSimilarRecordsRequestBuilder = findSimilarRecordsRequestBuilder;
 }
            public async Task ShouldReportAReconnectMetric(
                bool resumable,
                [Frozen, Substitute] IMetricReporter reporter,
                [Target] InvalidSessionEventController controller
                )
            {
                var cancellationToken = new CancellationToken(false);
                var @event            = new InvalidSessionEvent(resumable);

                await controller.Handle(@event, cancellationToken);

                await reporter.Received().Report(Is(default(InvalidSessionEventMetric)), Is(cancellationToken));
            }
            public async Task ShouldReportAReconnectMetric(
                string sessionId,
                [Frozen, Substitute] IMetricReporter reporter,
                [Target] ReconnectEventController controller
                )
            {
                var cancellationToken = new CancellationToken(false);
                var @event            = new ReconnectEvent {
                };

                await controller.Handle(@event, cancellationToken);

                await reporter.Received().Report(Is(default(ReconnectEventMetric)), Is(cancellationToken));
            }
 /// <summary>
 /// Initializes a new instance of the <see cref="HelloEventController" /> class.
 /// </summary>
 /// <param name="gateway">The gateway service to use.</param>
 /// <param name="reporter">Reporter to use to report metrics with.</param>
 /// <param name="adapterOptions">Options used across the adapter.</param>
 /// <param name="gatewayOptions">The options to use for the gateway.</param>
 /// <param name="logger">Logger used to log information to some destination(s).</param>
 public HelloEventController(
     IGatewayService gateway,
     IMetricReporter reporter,
     IOptions <AdapterOptions> adapterOptions,
     IOptions <GatewayOptions> gatewayOptions,
     ILogger <HelloEventController> logger
     )
 {
     this.gateway        = gateway;
     this.reporter       = reporter;
     this.adapterOptions = adapterOptions.Value;
     this.gatewayOptions = gatewayOptions.Value;
     this.logger         = logger;
 }
            public async Task ShouldReportARestartMetric(
                string sessionId,
                [Frozen, Substitute] IMetricReporter reporter,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] DefaultGatewayRestartService service
                )
            {
                var cancellationToken = new CancellationToken(false);
                var resume            = true;

                await service.Restart(gateway, resume, cancellationToken);

                await reporter.Received().Report(Is(default(GatewayRestartMetric)), Is(cancellationToken));
            }
        public SystemController(Bootstrap bootstrap)
        {
            this.bootstrap = bootstrap;
            switch (bootstrap.GetVariableSet("environment"))
            {
            case "aws":
                metricReporter = new AWSCloudWatchReporter();
                HostingManager = new AWSHostingManager();
                break;

            default:
                metricReporter = new DefaultReporter();
                HostingManager = new LocalHostingManager();
                break;
            }
        }
Exemple #19
0
        public static void ReportRan(this ILogger logger, IMetricReporter reporter, long startTimestamp)
        {
            if (!logger.IsEnabled(LogLevel.Information))
            {
                return;
            }
            if (startTimestamp == 0)
            {
                return;
            }

            var currentTimestamp = Stopwatch.GetTimestamp();
            var elapsed          = new TimeSpan((long)(TimestampToTicks * (currentTimestamp - startTimestamp)));

            _reportRan(logger, reporter.GetType().FullName, elapsed.TotalMilliseconds, null);
        }
Exemple #20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DefaultRequestInvoker" /> class.
 /// </summary>
 /// <param name="client">Client used to send/recieve http messages.</param>
 /// <param name="urlBuilder">Builder used to build URLs from requests.</param>
 /// <param name="relay">Service used to relay messages back and forth between SQS.</param>
 /// <param name="bucketService">Service used to manage buckets.</param>
 /// <param name="bucketRepository">Repository to manage buckets.</param>
 /// <param name="reporter">Service used to report metrics.</param>
 /// <param name="logger">Logger used to log info to some destination(s).</param>
 public DefaultRequestInvoker(
     HttpMessageInvoker client,
     IUrlBuilder urlBuilder,
     IRequestMessageRelay relay,
     IBucketService bucketService,
     IBucketRepository bucketRepository,
     IMetricReporter reporter,
     ILogger <DefaultRequestInvoker> logger
     )
 {
     this.client           = client;
     this.urlBuilder       = urlBuilder;
     this.relay            = relay;
     this.bucketService    = bucketService;
     this.bucketRepository = bucketRepository;
     this.reporter         = reporter;
     this.logger           = logger;
 }
        public WorkerRabbitMQ(IConnection conexaoRabbit,
                              IServiceScopeFactory serviceScopeFactory,
                              IMetricReporter metricReporter,
                              ServicoTelemetria servicoTelemetria,
                              ConsumoDeFilasOptions consumoDeFilasOptions,
                              ConfiguracaoRabbitOptions configuracaoRabbitOptions,
                              TelemetriaOptions telemetriaOptions,
                              IMediator mediator)
        {
            this.conexaoRabbit             = conexaoRabbit ?? throw new ArgumentNullException(nameof(conexaoRabbit));
            this.serviceScopeFactory       = serviceScopeFactory ?? throw new ArgumentNullException(nameof(serviceScopeFactory));
            this.telemetriaOptions         = telemetriaOptions ?? throw new ArgumentNullException(nameof(telemetriaOptions));
            this.mediator                  = mediator ?? throw new ArgumentNullException(nameof(mediator));
            this.metricReporter            = metricReporter;
            this.servicoTelemetria         = servicoTelemetria ?? throw new ArgumentNullException(nameof(servicoTelemetria));
            this.consumoDeFilasOptions     = consumoDeFilasOptions ?? throw new ArgumentNullException(nameof(consumoDeFilasOptions));
            this.configuracaoRabbitOptions = configuracaoRabbitOptions ?? throw new ArgumentNullException(nameof(configuracaoRabbitOptions));

            comandos = new Dictionary <string, ComandoRabbit>();
            RegistrarUseCases();
        }
Exemple #22
0
        private static void ReportMetricType <T>(IMetricReporter reporter, IEnumerable <T> metrics, Action <T> report, CancellationToken token)
        {
            var reportingMetrics = metrics.ToList();

            if (token.IsCancellationRequested || !reportingMetrics.Any())
            {
                return;
            }

            reporter.StartMetricTypeReport(typeof(T));

            foreach (var metric in reportingMetrics)
            {
                if (token.IsCancellationRequested)
                {
                    break;
                }

                report(metric);
            }

            reporter.EndMetricTypeReport(typeof(T));
        }
        public async Task <bool> GenerateAsync(
            IMetricReporter reporter,
            IMetrics metrics,
            IFilterMetrics reporterMetricsFilter,
            CancellationToken token)
        {
            var startTimestamp = _logger.IsEnabled(LogLevel.Trace) ? Stopwatch.GetTimestamp() : 0;

            _logger.ReportedStarted(reporter);

            if (reporterMetricsFilter == default(IFilterMetrics))
            {
                reporterMetricsFilter = metrics.GlobalFilter;
            }

            reporter.StartReportRun(metrics);

            var data = metrics.Snapshot.Get(reporterMetricsFilter);

            if (data.Environment.Entries.Any() && reporterMetricsFilter.ReportEnvironment)
            {
                reporter.ReportEnvironment(data.Environment);
            }

            if (reporterMetricsFilter.ReportHealthChecks)
            {
                await ReportHealth(reporter, metrics, token);
            }

            ReportMetricTypes(reporter, token, data);

            var result = await reporter.EndAndFlushReportRunAsync(metrics);

            _logger.ReportRan(reporter, startTimestamp);

            return(result);
        }
 public static void ReportRunning(this ILogger logger, IMetricReporter reporter)
 {
     logger.LogTrace(AppMetricsEventIds.Reports.Schedule, $"Running {reporter.GetType()}");
 }
Exemple #25
0
 public static MetricSpace AddReporter(this MetricSpace target, IMetricReporter reporter)
 {
     target.Options.Reporters.AddReporter(reporter);
     return(target);
 }
        public async Task <bool> GenerateAsync(IMetricReporter reporter,
                                               IMetrics metrics,
                                               IMetricsFilter reporterMetricsFilter,
                                               CancellationToken token)
        {
            var startTimestamp = _logger.IsEnabled(LogLevel.Information) ? Stopwatch.GetTimestamp() : 0;

            _logger.ReportedStarted(reporter);

            if (reporterMetricsFilter == default(IMetricsFilter))
            {
                reporterMetricsFilter = metrics.Advanced.GlobalFilter;
            }

            reporter.StartReportRun(metrics);

            var data = metrics.Advanced.Data.ReadData(reporterMetricsFilter);

            if (data.Environment.Entries.Any() && reporterMetricsFilter.ReportEnvironment)
            {
                reporter.ReportEnvironment(data.Environment);
            }

            if (reporterMetricsFilter.ReportHealthChecks)
            {
                var healthStatus = await metrics.Advanced.Health.ReadStatusAsync(token);

                var passed   = healthStatus.Results.Where(r => r.Check.Status.IsHealthy()).ToArray();
                var failed   = healthStatus.Results.Where(r => r.Check.Status.IsUnhealthy()).ToArray();
                var degraded = healthStatus.Results.Where(r => r.Check.Status.IsDegraded()).ToArray();

                reporter.ReportHealth(metrics.Advanced.GlobalTags, passed, degraded, failed);

                foreach (var check in passed)
                {
                    metrics.Increment(ApplicationHealthMetricRegistry.HealthyCheckCounter, check.Name);
                }

                foreach (var check in degraded)
                {
                    metrics.Increment(ApplicationHealthMetricRegistry.DegradedCheckCounter, check.Name);
                }

                foreach (var check in failed)
                {
                    metrics.Increment(ApplicationHealthMetricRegistry.UnhealthyCheckCounter, check.Name);
                }
            }

            foreach (var contextValueSource in data.Contexts)
            {
                ReportMetricType(contextValueSource.Counters,
                                 c => { reporter.ReportMetric($"{contextValueSource.Context}", c); }, token);

                ReportMetricType(contextValueSource.Gauges,
                                 g => { reporter.ReportMetric($"{contextValueSource.Context}", g); }, token);

                ReportMetricType(contextValueSource.Histograms,
                                 h => { reporter.ReportMetric($"{contextValueSource.Context}", h); }, token);

                ReportMetricType(contextValueSource.Meters,
                                 m => { reporter.ReportMetric($"{contextValueSource.Context}", m); }, token);

                ReportMetricType(contextValueSource.Timers,
                                 t => { reporter.ReportMetric($"{contextValueSource.Context}", t); }, token);

                ReportMetricType(contextValueSource.ApdexScores,
                                 t => { reporter.ReportMetric($"{contextValueSource.Context}", t); }, token);
            }

            var result = await reporter.EndAndFlushReportRunAsync(metrics);

            _logger.ReportRan(reporter, startTimestamp);

            return(result);
        }
Exemple #27
0
 public MetricManagerConfig(IMetricReporter <T> metricReporter)
 {
     ParameterChecker.NotNull(metricReporter, "metricReporter");
     MetricReporter = metricReporter;
 }
Exemple #28
0
 internal Task Generate(IMetricReporter reporter,
                        IMetrics metrics,
                        CancellationToken token)
 {
     return(Generate(reporter, metrics, metrics.Advanced.GlobalFilter, token));
 }
 public static void ReportFailed(this ILogger logger, IMetricReporter reporter)
 {
     logger.LogError(AppMetricsEventIds.Reports.Schedule, $"{reporter.GetType()} failed during execution");
 }