public void Handle(HttpMonitorChecked @event, Action <IEvent> eventCollector = null) { if (@event == null) { throw new ArgumentNullException(nameof(@event)); } if (@event.HttpMonitorCheck.HttpMonitorId != Id) { throw new InvalidOperationException($"Conflicting ids. Expected {Id}, but got {@event.HttpMonitorCheck.HttpMonitorId}."); } const int maxCount = 10; // check if check already exists if (RecentHttpMonitorChecks.All(x => x.Id != @event.HttpMonitorCheck.Id)) { var set = new List <HttpMonitorCheck>(RecentHttpMonitorChecks) { @event.HttpMonitorCheck }; set = set .OrderByDescending(x => x.RequestTiming.StartTime) .Take(maxCount) .ToList(); // did we add it... if (set.Contains(@event.HttpMonitorCheck)) { var newStatus = CalculateMonitorStatus(set); var startTime = DateTime.UtcNow; // todo calculate start time if (newStatus != Status) { switch (newStatus) { case MonitorStatus.Up: eventCollector?.Invoke(new HttpMonitorUp(Id, Status, startTime, DateTime.UtcNow)); foreach (var alertContact in AlertContactIds) { eventCollector?.Invoke(new ScheduleUpAlertContact(alertContact, Id, Status, startTime, DateTime.UtcNow)); } break; case MonitorStatus.Down: eventCollector?.Invoke(new HttpMonitorDown(Id, Status, startTime, DateTime.UtcNow)); foreach (var alertContact in AlertContactIds) { eventCollector?.Invoke(new ScheduleDownAlertContact(alertContact, Id, Status, startTime, DateTime.UtcNow)); } break; } Status = newStatus; } RecentHttpMonitorChecks = set.AsReadOnly(); } } }
public async Task PublishAsync(HttpMonitorChecked @event) { if (@event == null) { throw new ArgumentNullException(nameof(@event)); } // todo: can i resuse message? var message = _converter.Convert(@event); foreach (var queueName in _queueNames) { var queue = await _queueFactoryAsync(queueName); await queue.AddMessageAsync(message); } }