Skip to content

Commit 95e3c47

Browse files
authored
Migrate monitoring VariableHistoryIntervalStore base class to ConcurrentDictionary (#4532)
1 parent 76fa2e0 commit 95e3c47

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

src/ServiceControl.Monitoring.UnitTests/API/AggregationTests.cs

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,17 @@ public class AggregationTests
1818
EndpointInstanceActivityTracker activityTracker;
1919
IEndpointMetricsApi endpointMetricsApi;
2020

21+
MessageTypeRegistry messageTypeRegistry;
22+
2123
[SetUp]
2224
public void Setup()
2325
{
2426
settings = new Settings { EndpointUptimeGracePeriod = TimeSpan.FromMinutes(5) };
2527
activityTracker = new EndpointInstanceActivityTracker(settings, TimeProvider.System);
2628
processingTimeStore = new ProcessingTimeStore();
2729
endpointRegistry = new EndpointRegistry();
30+
messageTypeRegistry = new MessageTypeRegistry();
2831

29-
var messageTypeRegistry = new MessageTypeRegistry();
3032
var breakdownProviders = new IProvideBreakdown[]
3133
{
3234
processingTimeStore,
@@ -47,20 +49,29 @@ public void MetricAggregationByInstanceIsScopedToLogicalEndpoint()
4749
endpointRegistry.Record(instanceAId);
4850
endpointRegistry.Record(instanceBId);
4951

52+
messageTypeRegistry.Record(new EndpointMessageType(instanceAId.EndpointName, enclosedMessageTypes: "MessageA"));
53+
messageTypeRegistry.Record(new EndpointMessageType(instanceBId.EndpointName, enclosedMessageTypes: "MessageA"));
54+
5055
var period = HistoryPeriod.FromMinutes(EndpointMetricsApi.DefaultHistory);
5156
var now = DateTime.UtcNow.Subtract(new TimeSpan(period.IntervalSize.Ticks * period.DelayedIntervals));
5257

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

56-
processingTimeStore.Store([dataA], instanceAId, EndpointMessageType.Unknown(instanceAId.EndpointName));
57-
processingTimeStore.Store([dataB], instanceBId, EndpointMessageType.Unknown(instanceBId.EndpointName));
61+
processingTimeStore.Store([dataA], instanceAId, new EndpointMessageType(instanceAId.EndpointName, enclosedMessageTypes: "MessageA"));
62+
processingTimeStore.Store([dataB], instanceBId, new EndpointMessageType(instanceBId.EndpointName, enclosedMessageTypes: "MessageA"));
5863

59-
var result = endpointMetricsApi.GetSingleEndpointMetrics(instanceAId.EndpointName);
64+
var logicalEndpointAMetrics = endpointMetricsApi.GetSingleEndpointMetrics(instanceAId.EndpointName);
65+
var logicalEndpointBMetrics = endpointMetricsApi.GetSingleEndpointMetrics(instanceBId.EndpointName);
6066

61-
var model = result;
67+
Assert.Multiple(() =>
68+
{
69+
Assert.That(logicalEndpointAMetrics.Instances[0].Metrics["ProcessingTime"].Average, Is.EqualTo(5));
70+
Assert.That(logicalEndpointBMetrics.Instances[0].Metrics["ProcessingTime"].Average, Is.EqualTo(10));
6271

63-
Assert.That(model.Instances[0].Metrics["ProcessingTime"].Average, Is.EqualTo(5));
72+
Assert.That(logicalEndpointAMetrics.MessageTypes[0].Metrics["ProcessingTime"].Average, Is.EqualTo(5));
73+
Assert.That(logicalEndpointBMetrics.MessageTypes[0].Metrics["ProcessingTime"].Average, Is.EqualTo(10));
74+
});
6475
}
6576

6677
[Test]

src/ServiceControl.Monitoring/Infrastructure/VariableHistoryIntervalStore.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace ServiceControl.Monitoring.Infrastructure
22
{
33
using System;
4-
using System.Collections.Generic;
4+
using System.Collections.Concurrent;
55
using Messaging;
66

77
public class VariableHistoryIntervalStore<BreakdownT> : IProvideBreakdownBy<BreakdownT>
@@ -12,7 +12,7 @@ public VariableHistoryIntervalStore()
1212

1313
foreach (var period in HistoryPeriod.All)
1414
{
15-
histories.Add(period, new IntervalsStore<BreakdownT>(period.IntervalSize, period.NumberOfIntervals, period.DelayedIntervals));
15+
histories.TryAdd(period, new IntervalsStore<BreakdownT>(period.IntervalSize, period.NumberOfIntervals, period.DelayedIntervals));
1616
}
1717
}
1818

@@ -34,6 +34,6 @@ public void Store(BreakdownT id, RawMessage.Entry[] entries)
3434
}
3535
}
3636

37-
Dictionary<HistoryPeriod, IntervalsStore<BreakdownT>> histories;
37+
ConcurrentDictionary<HistoryPeriod, IntervalsStore<BreakdownT>> histories;
3838
}
3939
}

0 commit comments

Comments
 (0)