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); } }
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(); }
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(); }
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 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 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 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 Config(IMonitorSettings monitor, IDashboardSettings dashboard, IThrottlingSettings throttlingSettings) { Monitor = monitor; Dashboard = dashboard; Throttling = throttlingSettings.Throttling; }
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; }