Пример #1
0
        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));
        }