public new void Setup() { endpointRegistry = new EndpointRegistry(); criticalTimeStore = new CriticalTimeStore(); processingTimeStore = new ProcessingTimeStore(); retriesStore = new RetriesStore(); queueLengthProvider = new FakeQueueLengthProvider(); queueLengthStore = new QueueLengthStore(); queueLengthProvider.Initialize(string.Empty, (entryDtos, dto) => queueLengthStore.Store(entryDtos.Select(e => ToEntry(e)).ToArray(), ToEndpointInputQueue(dto))); var settings = new Settings { EndpointUptimeGracePeriod = TimeSpan.FromMinutes(5) }; activityTracker = new EndpointInstanceActivityTracker(settings); messageTypeRegistry = new MessageTypeRegistry(); var breakdownProviders = new IProvideBreakdown[] { criticalTimeStore, processingTimeStore, retriesStore, queueLengthStore }; var controller = new DiagramApiController(breakdownProviders, endpointRegistry, activityTracker, messageTypeRegistry) { Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/monitored-endpoint") }; GetMonitoredEndpoints = () => controller.GetAllEndpointsMetrics(); GetMonitoredSingleEndpoint = endpointName => controller.GetSingleEndpointMetrics(endpointName); }
public void ValidateIfConnectivityMathIsCorrect() { var endpointName = "Endpoint"; var instanceIds = new[] { "a", "b", "c" }; var instances = instanceIds.Select(instanceId => new EndpointInstanceId(endpointName, instanceId)).ToArray(); Array.ForEach(instances, instance => endpointRegistry.Record(instance)); var period = HistoryPeriod.FromMinutes(DiagramApiController.DefaultHistory); // 5 minutes, 5 second period var now = DateTime.UtcNow; var timestamp = now.Subtract(new TimeSpan(period.IntervalSize.Ticks * period.DelayedIntervals)); // now - 5 seconds var samples = new[] { new RawMessage.Entry { DateTicks = timestamp.Ticks, Value = 5 }, new RawMessage.Entry { DateTicks = timestamp.Ticks, Value = 10 } }; var connected = instances.Take(2).ToArray(); Array.ForEach(connected, instance => activityTracker.Record(instance, now)); Array.ForEach(connected, instance => processingTimeStore.Store(samples, instance, EndpointMessageType.Unknown(instance.EndpointName))); var result = apiController.GetAllEndpointsMetrics(); var contentResult = result as OkNegotiatedContentResult <MonitoredEndpoint[]>; var model = contentResult.Content; var item = model[0]; Assert.AreEqual(3, item.EndpointInstanceIds.Length, nameof(item.EndpointInstanceIds)); Assert.AreEqual(2, item.ConnectedCount, nameof(item.ConnectedCount)); Assert.AreEqual(1, item.DisconnectedCount, nameof(item.DisconnectedCount)); }