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); }
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); }
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); }
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); }
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()); }
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") }; }
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); }