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); }
public void When_known_endpoint_instance_changes_name_existing_entry_is_used_and_udpated() { var registry = new EndpointRegistry(); var originalId = new EndpointInstanceId("LogicalName", "instance-id", "original-name"); var renamedId = new EndpointInstanceId(originalId.EndpointName, originalId.InstanceId, "renamed-name"); registry.Record(originalId); registry.Record(renamedId); var records = registry.GetForEndpointName(originalId.EndpointName).ToArray(); Assert.AreEqual(1, records.Length, "Existing entry should be reused"); Assert.AreEqual("renamed-name", records[0].InstanceName); }
public async Task GetMonitoredEndpointsQueryTest(int numberOfEndpoints, int numberOfInstances, int sendReportEvery, int numberOfEntriesInReport, int queryEveryInMilliseconds, int numberOfQueries) { var instances = BuildInstances(numberOfEndpoints, numberOfInstances); foreach (var instance in instances) { endpointRegistry.Record(instance); } var source = new CancellationTokenSource(); var reporters = new[] { BuildReporters(sendReportEvery, numberOfEntriesInReport, instances, source, (e, i) => criticalTimeStore.Store(e, i, EndpointMessageType.Unknown(i.EndpointName))), BuildReporters(sendReportEvery, numberOfEntriesInReport, instances, source, (e, i) => processingTimeStore.Store(e, i, EndpointMessageType.Unknown(i.EndpointName))), BuildReporters(sendReportEvery, numberOfEntriesInReport, instances, source, (e, i) => retriesStore.Store(e, i, EndpointMessageType.Unknown(i.EndpointName))), BuildReporters(sendReportEvery, numberOfEntriesInReport, instances, source, (e, i) => queueLengthProvider.Process(i, new TaggedLongValueOccurrence { Entries = e, TagValue = string.Empty })) }.SelectMany(i => i).ToArray(); var histogram = CreateTimeHistogram(); for (var i = 0; i < numberOfQueries; i++) { var start = Stopwatch.GetTimestamp(); await GetMonitoredEndpoints().ConfigureAwait(false); var elapsed = Stopwatch.GetTimestamp() - start; histogram.RecordValue(elapsed); await Task.Delay(queryEveryInMilliseconds); } source.Cancel(); await Task.WhenAll(reporters).ConfigureAwait(false); var reportFinalHistogram = MergeHistograms(reporters); Report("Querying", histogram, TimeSpan.FromMilliseconds(150)); Report("Reporters", reportFinalHistogram, TimeSpan.FromMilliseconds(20)); }
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); }
public void Filters_endpoint_instances_by_endpoint_name() { var instanceA = new EndpointInstanceId("EndpointA", "instance1"); var instanceB = new EndpointInstanceId("EndpointB", "instance2"); registry.Record(instanceA); registry.Record(instanceB); var instances = registry.GetForEndpointName("EndpointA"); CollectionAssert.AreEquivalent(new [] { instanceA }, instances); }