Example #1
0
        private async Task<EndpointHealth> PerformHealthCheck(CancellationToken cancellationToken, IMonitorSettings settings)
        {
            var healthCheckTime = DateTime.UtcNow;
            try
            {
                var timeoutTask = ConfigureTimeoutTask(settings, cancellationToken);
                using (var timeoutToken = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken))
                {
                    var healthTask = _monitor.CheckHealthAsync(Address, timeoutToken.Token);

                    var healthResult = await Task.WhenAny(healthTask, timeoutTask);
                    await CancelHealthTaskIfNeeded(healthTask, timeoutToken);

                    return EndpointHealth.FromResult(healthCheckTime, healthResult.Result, settings.HealthyResponseTimeLimit);
                }
            }
            catch (AggregateException e)
            {
                return EndpointHealth.FromException(healthCheckTime, e.InnerExceptions.First());
            }
            catch (Exception e)
            {
                return EndpointHealth.FromException(healthCheckTime, e);
            }
        }
Example #2
0
 public async Task CheckHealth(CancellationToken cancellationToken, IMonitorSettings settings)
 {
     Logger.DebugFormat("Checking health of {0}...", this);
     var endpointHealth = await PerformHealthCheck(cancellationToken, settings);
     LogHealthStatus(endpointHealth);
     Health = endpointHealth;
 }
 public EndpointStatsManager(IEndpointStatsRepository repository, IMonitorSettings settings)
 {
     _repository = repository;
     _settings = settings;
     _cleanerThread = new Thread(Clean) { Name = "StatsCleaner" };
     _cleanerThread.Start();
     _writerThread = new Thread(WriteStats) { Name = "StatsWriter" };
     _writerThread.Start();
 }
Example #4
0
 public void SetUp()
 {
     _monitorSettings           = Substitute.For <IMonitorSettings>();
     _tfProjectCollectionCache  = Substitute.For <ITfProjectCollectionCache>();
     _aMonitoredProjectSettings =
         new MonitoredProjectSettings {
         Id = Guid.NewGuid(), VstsAccount = "b"
     };
     _nameRegexpRepositoryFilterFactory = Substitute.For <INameRegexpRepositoryFilterFactory>();
     _logger = Substitute.For <ILogger>();
 }
        public EndpointStatsManager(IEndpointStatsRepository repository, IMonitorSettings settings, ITimeCoordinator timeCoordinator, IEndpointMetricsForwarderCoordinator metricsForwarderCoordinator)
        {
            _repository = repository;
            _settings = settings;
            _timeCoordinator = timeCoordinator;
            _metricsForwarderCoordinator = metricsForwarderCoordinator;

            _cleanerThread = new Thread(Clean) { Name = "StatsCleaner" };
            _cleanerThread.Start();
            _writerThread = new Thread(WriteStats) { Name = "StatsWriter" };
            _writerThread.Start();
        }
Example #6
0
 public Monitor(IMonitorSettings settings, ITfProjectCollectionCache tfProjectCollectionCache, INameRegexpRepositoryFilterFactory nameRegexpRepositoryFilterFactory, ILogger logger)
 {
     _settings = settings;
     _settings.SettingsChanged         += SettingsChangedHandler;
     _tfProjectCollectionCache          = tfProjectCollectionCache;
     _nameRegexpRepositoryFilterFactory = nameRegexpRepositoryFilterFactory;
     _logger              = logger;
     _projects            = new ConcurrentDictionary <Guid, ITfProject>();
     Status               = _settings.Projects.IsNullOrEmpty() ? MonitorStatus.NoProjects : MonitorStatus.AwaitingFirstUpdate;
     _updatesStartedCount = _updatesCompletedCount = 0;
     _updateCountersMutex = new Mutex();
 }
        public EndpointMonitor(IMonitorableEndpointRegistry monitorableEndpointRegistry, IHealthSampler sampler, IMonitorSettings settings, ITimeCoordinator timeCoordinator, IContinuousTaskExecutor<MonitorableEndpoint> executor)
        {
            _monitorableEndpointRegistry = monitorableEndpointRegistry;
            _sampler = sampler;
            _settings = settings;
            _timeCoordinator = timeCoordinator;
            _executor = executor;

            _monitorableEndpointRegistry.NewEndpointAdded += HandleNewEndpoint;

            foreach (var endpoint in _monitorableEndpointRegistry.Endpoints)
                _executor.TryRegisterTaskFor(endpoint, MonitorEndpointAsync);
        }
        public HealthMonitor(IEndpointRegistry registry, IMonitorSettings settings)
        {
            _registry = registry;
            _settings = settings;
            _registry.NewEndpointAdded += HandleNewEndpoint;
            _cancellation = new CancellationTokenSource();

            foreach (var endpoint in _registry.Endpoints)
                _tasks.AddOrUpdate(endpoint, CreateTaskFor, (e, currentTask) => currentTask);

            _monitor = new Thread(Start) { Name = "Monitor" };
            _monitor.Start();
        }
        public EndpointUpdateFrequencyGuard(IEndpointRegistry endpointRegistry, IContinuousTaskExecutor<Endpoint> taskExecutor, IMonitorSettings monitorSettings, ITimeCoordinator timeCoordinator)
        {
            _endpointRegistry = endpointRegistry;
            _taskExecutor = taskExecutor;
            _monitorSettings = monitorSettings;
            _timeCoordinator = timeCoordinator;

            _maxEndpointDelay = GetEndpointMaxUpdateDelay();

            _endpointRegistry.EndpointAdded += AddEndpoint;
            foreach (var endpoint in _endpointRegistry.Endpoints)
                AddEndpoint(endpoint);
        }
 public EndpointStatsManager(IEndpointStatsRepository repository, IMonitorSettings settings)
 {
     _repository    = repository;
     _settings      = settings;
     _cleanerThread = new Thread(Clean)
     {
         Name = "StatsCleaner"
     };
     _cleanerThread.Start();
     _writerThread = new Thread(WriteStats)
     {
         Name = "StatsWriter"
     };
     _writerThread.Start();
 }
Example #11
0
        public EndpointUpdateFrequencyGuard(IEndpointRegistry endpointRegistry, IContinuousTaskExecutor <Endpoint> taskExecutor, IMonitorSettings monitorSettings, ITimeCoordinator timeCoordinator)
        {
            _endpointRegistry = endpointRegistry;
            _taskExecutor     = taskExecutor;
            _monitorSettings  = monitorSettings;
            _timeCoordinator  = timeCoordinator;

            _maxEndpointDelay = GetEndpointMaxUpdateDelay();

            _endpointRegistry.EndpointAdded += AddEndpoint;
            foreach (var endpoint in _endpointRegistry.Endpoints)
            {
                AddEndpoint(endpoint);
            }
        }
        public EndpointMonitor(IMonitorableEndpointRegistry monitorableEndpointRegistry, IHealthSampler sampler, IMonitorSettings settings, ITimeCoordinator timeCoordinator, IContinuousTaskExecutor <MonitorableEndpoint> executor)
        {
            _monitorableEndpointRegistry = monitorableEndpointRegistry;
            _sampler         = sampler;
            _settings        = settings;
            _timeCoordinator = timeCoordinator;
            _executor        = executor;

            _monitorableEndpointRegistry.NewEndpointAdded += HandleNewEndpoint;

            foreach (var endpoint in _monitorableEndpointRegistry.Endpoints)
            {
                _executor.TryRegisterTaskFor(endpoint, MonitorEndpointAsync);
            }
        }
        /// <summary>
        /// Create MA monitor
        /// </summary>
        private MessageAnalyzerMonitor(List <string> GroupList = null, bool isMAInstalled = false)
        {
            this.isMAInstalled = isMAInstalled;

            ConfigureEnvironment();
            opnlist = new List <string>();
            IMonitorSettings monitorSettings = MonitorFactory.CreateDefaultSettings();

            string modelpath = null;

            if (isMAInstalled)
            {
                LiveTraceSession.EnsurePowerShellInitiation();
                // If MMA installed, use OPNs under local app data, same as MMA UI, otherwise it will re-generate the CompilationCache if using MMA UI simutaneously.
                monitorSettings.Host = CreateHostForMAInstalled();
                string OPNAndConfigurationPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "MessageAnalyzer", "OPNAndConfiguration");
                modelpath = Path.Combine(OPNAndConfigurationPath, "Opns"); //OpnAndConfiguration\Opns\ in local app data
            }
            else
            {
                monitorSettings.Host = CreateHost();
                modelpath            = PlatformManager.ModelsDirectory;                         // PlatformManager.ModelsDirectory is: "OpnAndConfiguration\Opns\"
                string opnForEtw = Path.Combine(Path.GetDirectoryName(modelpath), "OpnForEtw"); // OpnAndConfiguration\OpnForEtw
                monitorSettings.ModelLoadPath.Add(opnForEtw);
            }

            if (GroupList == null)
            {
                monitorSettings.ModelLoadPath.Add(modelpath);
                opnlist.Add(modelpath);
            }
            else
            {
                modelpath = Path.GetDirectoryName((PlatformManager.ModelsDirectory)); // modelpath is set to the path of folder "OpnAndConfiguration"
                GroupList.ForEach(e => monitorSettings.ModelLoadPath.Add(modelpath + "\\" + e));
                GroupList.ForEach(e => opnlist.Add(modelpath + "\\" + e));
            }
            monitorSettings.ExtensionLoadPath.Add(PlatformManager.ExtensionsDirectory);
            monitor = MonitorFactory.CreateLocalMonitor(monitorSettings);
            monitor.Initialize();

            ModelCatalog.WaitForInitialization();

            monitor.CatchExceptionOnGetMessageData = true;
        }
        public EndpointStatsManager(IEndpointStatsRepository repository, IMonitorSettings settings, ITimeCoordinator timeCoordinator, IEndpointMetricsForwarderCoordinator metricsForwarderCoordinator)
        {
            _repository                  = repository;
            _settings                    = settings;
            _timeCoordinator             = timeCoordinator;
            _metricsForwarderCoordinator = metricsForwarderCoordinator;

            _cleanerThread = new Thread(Clean)
            {
                Name = "StatsCleaner"
            };
            _cleanerThread.Start();
            _writerThread = new Thread(WriteStats)
            {
                Name = "StatsWriter"
            };
            _writerThread.Start();
        }
        public EndpointMonitor(IEndpointRegistry registry, IHealthSampler sampler, IMonitorSettings settings)
        {
            _registry = registry;
            _sampler  = sampler;
            _settings = settings;
            _registry.NewEndpointAdded += HandleNewEndpoint;
            _cancellation = new CancellationTokenSource();

            foreach (var endpoint in _registry.Endpoints)
            {
                _tasks.AddOrUpdate(endpoint, CreateTaskFor, (e, currentTask) => currentTask);
            }

            _monitor = new Thread(Start)
            {
                Name = "Monitor"
            };
            _monitor.Start();
        }
 public HealthMonitorSettings(IMonitorSettings monitorSettings, IThrottlingSettings throttlingSettings)
 {
     MonitorSettings = monitorSettings;
     ThrottlingSettings = throttlingSettings;
 }
 public HealthMonitorSettings(IMonitorSettings monitorSettings, IThrottlingSettings throttlingSettings)
 {
     MonitorSettings    = monitorSettings;
     ThrottlingSettings = throttlingSettings;
 }
 public HealthSampler(IMonitorSettings settings, IEndpointHealthUpdateListener healthUpdateListener, ITimeCoordinator timeCoordinator)
 {
     _settings             = settings;
     _healthUpdateListener = healthUpdateListener;
     _timeCoordinator      = timeCoordinator;
 }
 public ConnectionMonitor(IEventStoreConnection connection, IMonitorSettings settings)
 {
     this.connection = connection;
     this.settings   = settings;
     log             = LogManager.GetLogger(GetType());
 }
 public ConfigController(IMonitorSettings monitorSettings, IDashboardSettings dashboardSettings, IThrottlingSettings throttlingSettings)
 {
     _config = new Config(monitorSettings, dashboardSettings, throttlingSettings);
 }
 public ConfigController(IMonitorSettings monitorSettings, IDashboardSettings dashboardSettings, IThrottlingSettings throttlingSettings)
 {
     _config = new Config(monitorSettings, dashboardSettings, throttlingSettings);
 }
Example #22
0
 public Config(IMonitorSettings monitor, IDashboardSettings dashboard, IThrottlingSettings throttlingSettings)
 {
     Monitor    = monitor;
     Dashboard  = dashboard;
     Throttling = throttlingSettings.Throttling;
 }
Example #23
0
 public Config(IMonitorSettings monitor, IDashboardSettings dashboard, IThrottlingSettings throttlingSettings)
 {
     Monitor = monitor;
     Dashboard = dashboard;
     Throttling = throttlingSettings.Throttling;
 }
Example #24
0
        private async Task<HealthInfo> ConfigureTimeoutTask(IMonitorSettings settings, CancellationToken cancellationToken)
        {
            if (Health == null ||
                (Health.Status == EndpointStatus.Healthy || Health.Status == EndpointStatus.NotRun ||
                 Health.Status == EndpointStatus.Offline))
            {
                await Task.Delay(settings.ShortTimeOut, cancellationToken);
                return new HealthInfo(HealthStatus.TimedOut, settings.ShortTimeOut, new Dictionary<string, string> { { "message", "health check timeout" } });
            }

            await Task.Delay(settings.FailureTimeOut, cancellationToken);
            return new HealthInfo(HealthStatus.Faulty, settings.FailureTimeOut, new Dictionary<string, string> { { "message", "health check timeout" } });
        }
 public HealthSampler(IMonitorSettings settings, IEndpointStatsManager statsManager)
 {
     _settings     = settings;
     _statsManager = statsManager;
 }
 public HealthSampler(IMonitorSettings settings, IEndpointStatsManager statsManager)
 {
     _settings = settings;
     _statsManager = statsManager;
 }
 public HealthSampler(IMonitorSettings settings, IEndpointHealthUpdateListener healthUpdateListener, ITimeCoordinator timeCoordinator)
 {
     _settings = settings;
     _healthUpdateListener = healthUpdateListener;
     _timeCoordinator = timeCoordinator;
 }