private void RegisterRequestTracker(IServiceCollection services, DiagnosticFeaturesSettings settings)
        {
            if (environment.HostExtensions.TryGet <IVostokApplicationDiagnostics>(out var diagnostics) && settings.AddCurrentRequestsInfoProvider)
            {
                var requestTracker = new RequestTracker();

                services.AddSingleton <IRequestTracker>(requestTracker);

                var infoEntry    = new DiagnosticEntry(DiagnosticConstants.Component, "requests-in-progress");
                var infoProvider = new CurrentRequestsInfoProvider(requestTracker);

                disposables.Add(diagnostics.Info.RegisterProvider(infoEntry, infoProvider));
            }
        private void RegisterThrottlingProvider(IServiceCollection services, DiagnosticFeaturesSettings settings)
        {
            var throttlingProvider = throttlingBuilder.BuildProvider();

            services.AddSingleton <IThrottlingProvider>(throttlingProvider);

            if (environment.HostExtensions.TryGet <IVostokApplicationDiagnostics>(out var diagnostics))
            {
                if (settings.AddThrottlingInfoProvider)
                {
                    var infoEntry    = new DiagnosticEntry(DiagnosticConstants.Component, "request-throttling");
                    var infoProvider = new ThrottlingInfoProvider(throttlingProvider);

                    disposables.Add(diagnostics.Info.RegisterProvider(infoEntry, infoProvider));
                }

                if (settings.AddThrottlingHealthCheck)
                {
                    var healthCheck = new ThrottlingHealthCheck(throttlingProvider);

                    disposables.Add(diagnostics.HealthTracker.RegisterCheck("Request throttling", healthCheck));
                }
            }
        }