コード例 #1
0
        public void MetricAggregationByInstanceIsScopedToLogicalEndpoint()
        {
            var processingTimeStore = new ProcessingTimeStore();
            var endpointRegistry    = new EndpointRegistry();

            var apiController = CreateConroller(processingTimeStore, endpointRegistry);

            var instanceAId = new EndpointInstanceId("EndpointA", "instance");
            var instanceBId = new EndpointInstanceId("EndpointB", "instance");

            endpointRegistry.Record(instanceAId);
            endpointRegistry.Record(instanceBId);

            var period = HistoryPeriod.FromMinutes(DiagramApiController.DefaultHistory);
            var now    = DateTime.UtcNow.Subtract(new TimeSpan(period.IntervalSize.Ticks * period.DelayedIntervals));

            var dataA = new RawMessage.Entry {
                DateTicks = now.Ticks, Value = 5
            };
            var dataB = new RawMessage.Entry {
                DateTicks = now.Ticks, Value = 10
            };

            processingTimeStore.Store(new[] { dataA }, instanceAId, EndpointMessageType.Unknown(instanceAId.EndpointName));
            processingTimeStore.Store(new[] { dataB }, instanceBId, EndpointMessageType.Unknown(instanceBId.EndpointName));

            var result = apiController.GetSingleEndpointMetrics(instanceAId.EndpointName);

            var contentResult = result as OkNegotiatedContentResult <MonitoredEndpointDetails>;
            var model         = contentResult.Content;

            Assert.AreEqual(5, model.Instances[0].Metrics["ProcessingTime"].Average);
        }
コード例 #2
0
        static DiagramApiController CreateConroller(ProcessingTimeStore processingTimeStore, EndpointRegistry endpointRegistry)
        {
            var criticalTimeStore = new CriticalTimeStore();
            var retriesStore      = new RetriesStore();
            var queueLengthStore  = new QueueLengthStore();

            var settings = new Settings
            {
                EndpointUptimeGracePeriod = TimeSpan.FromMinutes(5)
            };
            var activityTracker = new EndpointInstanceActivityTracker(settings);

            var messageTypeRegistry = new MessageTypeRegistry();

            var breakdownProviders = new IProvideBreakdown[]
            {
                processingTimeStore,
                criticalTimeStore,
                retriesStore,
                queueLengthStore
            };

            var controller = new DiagramApiController(breakdownProviders, endpointRegistry, activityTracker, messageTypeRegistry)
            {
                Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/monitored-endpoint")
            };

            return(controller);
        }
コード例 #3
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);
        }
コード例 #4
0
        static Func <dynamic, CancellationToken, Task <dynamic> > CreateQuery(ProcessingTimeStore processingTimeStore, EndpointRegistry endpointRegistry)
        {
            var criticalTimeStore = new CriticalTimeStore();
            var retriesStore      = new RetriesStore();
            var queueLengthStore  = new QueueLengthStore();

            var settings = new Settings
            {
                EndpointUptimeGracePeriod = TimeSpan.FromMinutes(5)
            };
            var activityTracker = new EndpointInstanceActivityTracker(settings);

            var messageTypeRegistry = new MessageTypeRegistry();

            var breakdownProviders = new IProvideBreakdown[]
            {
                processingTimeStore,
                criticalTimeStore,
                retriesStore,
                queueLengthStore
            };

            var monitoredEndpointsModule = new MonitoredEndpointsModule(breakdownProviders, endpointRegistry, activityTracker, messageTypeRegistry)
            {
                Context = new NancyContext()
                {
                    Request = new Request("Get", "/monitored-endpoints/{endpointName}", "HTTP")
                }
            };

            var queryAction = monitoredEndpointsModule.Routes.Single(r => r.Description.Path == "/monitored-endpoints/{endpointName}").Action;

            return(queryAction);
        }
コード例 #5
0
        public void Setup()
        {
            endpointRegistry    = new EndpointRegistry();
            criticalTimeStore   = new CriticalTimeStore();
            processingTimeStore = new ProcessingTimeStore();
            retriesStore        = new RetriesStore();
            queueLengthProvider = new DefaultQueueLengthProvider();
            queueLengthStore    = new QueueLengthStore();
            queueLengthProvider.Initialize(string.Empty, queueLengthStore);

            var settings = new Settings {
                EndpointUptimeGracePeriod = TimeSpan.FromMinutes(5)
            };

            activityTracker = new EndpointInstanceActivityTracker(settings);

            messageTypeRegistry = new MessageTypeRegistry();

            var breakdownProviders = new IProvideBreakdown[]
            {
                criticalTimeStore,
                processingTimeStore,
                retriesStore,
                queueLengthStore
            };

            var monitoredEndpointsModule = new MonitoredEndpointsModule(breakdownProviders, endpointRegistry, activityTracker, messageTypeRegistry)
            {
                Context = new NancyContext()
                {
                    Request = new Request("Get", "/monitored-endpoints", "HTTP")
                }
            };

            var dictionary = monitoredEndpointsModule.Routes.ToDictionary(r => r.Description.Path, r => r.Action);

            GetMonitoredEndpoints      = () => dictionary["/monitored-endpoints"](new object(), new CancellationToken(false));
            GetMonitoredSingleEndpoint = endpointName => dictionary["/monitored-endpoints/{endpointName}"](new { EndpointName = endpointName }.ToDynamic(), new CancellationToken());
        }
コード例 #6
0
        public void Setup()
        {
            settings = new Settings {
                EndpointUptimeGracePeriod = TimeSpan.FromMinutes(5)
            };
            activityTracker     = new EndpointInstanceActivityTracker(settings);
            processingTimeStore = new ProcessingTimeStore();
            endpointRegistry    = new EndpointRegistry();

            var messageTypeRegistry = new MessageTypeRegistry();
            var breakdownProviders  = new IProvideBreakdown[]
            {
                processingTimeStore,
                new CriticalTimeStore(),
                new RetriesStore(),
                new QueueLengthStore()
            };

            apiController = new DiagramApiController(breakdownProviders, endpointRegistry, activityTracker, messageTypeRegistry)
            {
                Request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/monitored-endpoint")
            };
        }
コード例 #7
0
        public async Task MetricAggregationByInstanceIsScopedToLogicalEndpoint()
        {
            var processingTimeStore = new ProcessingTimeStore();
            var endpointRegistry    = new EndpointRegistry();

            var queryAction = CreateQuery(processingTimeStore, endpointRegistry);

            var instanceAId = new EndpointInstanceId("EndpointA", "instance");
            var instanceBId = new EndpointInstanceId("EndpointB", "instance");

            endpointRegistry.Record(instanceAId);
            endpointRegistry.Record(instanceBId);

            var period = HistoryPeriod.FromMinutes(MonitoredEndpointsModule.DefaultHistory);
            var now    = DateTime.UtcNow.Subtract(new TimeSpan(period.IntervalSize.Ticks * period.DelayedIntervals));

            var dataA = new RawMessage.Entry {
                DateTicks = now.Ticks, Value = 5
            };
            var dataB = new RawMessage.Entry {
                DateTicks = now.Ticks, Value = 10
            };

            processingTimeStore.Store(new[] { dataA }, instanceAId, EndpointMessageType.Unknown(instanceAId.EndpointName));
            processingTimeStore.Store(new[] { dataB }, instanceBId, EndpointMessageType.Unknown(instanceBId.EndpointName));

            var result = await queryAction(new
            {
                instanceAId.EndpointName
            }.ToDynamic(), new CancellationToken());

            var model = (MonitoredEndpointDetails)result.NegotiationContext.DefaultModel;


            Assert.AreEqual(5, model.Instances[0].Metrics["ProcessingTime"].Average);
        }