From 34bd04bfb6dbd15fc457a90396a4f26749cd26d1 Mon Sep 17 00:00:00 2001 From: Ramon Smits Date: Tue, 19 Sep 2023 12:58:14 +0200 Subject: [PATCH] Fix flooding the logs with "Error parsing message type:" for metrics from polymorphic messages (#3661) * The received value is the value from NServiceBus.EnclosedMessageTypes which can contain multiple types * Modifed tests to use polymorphic messages * No longer affected, removing validation * Moved parsing to contructor of `EndpointMessageType` --- .../When_querying_queue_length_data.cs | 6 +++++- .../When_querying_retries_data.cs | 6 +++++- .../When_querying_timings_data.cs | 6 +++++- .../Infrastructure/EndpointMessageType.cs | 12 ++++++++++-- .../Infrastructure/MessageTypeTracker.cs | 2 +- .../Retries/TaggedLongValueOccurrenceHandler.cs | 2 +- .../Timings/TaggedLongValueOccurrenceHandler.cs | 2 +- 7 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_queue_length_data.cs b/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_queue_length_data.cs index 7c47d9579b..4348384952 100644 --- a/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_queue_length_data.cs +++ b/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_queue_length_data.cs @@ -125,7 +125,11 @@ public Task Handle(SampleMessage message, IMessageHandlerContext context) } } - class SampleMessage : IMessage + class SampleMessage : SampleBaseMessage + { + } + + class SampleBaseMessage : IMessage { } diff --git a/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_retries_data.cs b/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_retries_data.cs index 508c1bd29c..a8f76e98ac 100644 --- a/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_retries_data.cs +++ b/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_retries_data.cs @@ -77,7 +77,11 @@ class TestContext : ScenarioContext public bool ShuttingDown { get; set; } } - class SampleMessage : IMessage + class SampleMessage : SampleBaseMessage + { + } + + class SampleBaseMessage : IMessage { } } diff --git a/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_timings_data.cs b/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_timings_data.cs index af704c529f..3503dce310 100644 --- a/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_timings_data.cs +++ b/src/ServiceControl.Monitoring.AcceptanceTests/When_querying_timings_data.cs @@ -63,7 +63,11 @@ class Context : ScenarioContext { } - class SampleMessage : IMessage + class SampleMessage : SampleBaseMessage + { + } + + class SampleBaseMessage : IMessage { } } diff --git a/src/ServiceControl.Monitoring/Infrastructure/EndpointMessageType.cs b/src/ServiceControl.Monitoring/Infrastructure/EndpointMessageType.cs index 52039a68d2..ded1c670cd 100644 --- a/src/ServiceControl.Monitoring/Infrastructure/EndpointMessageType.cs +++ b/src/ServiceControl.Monitoring/Infrastructure/EndpointMessageType.cs @@ -1,11 +1,19 @@ namespace ServiceControl.Monitoring.Infrastructure { + using System; + public readonly struct EndpointMessageType { - public EndpointMessageType(string endpointName, string messageType) + public EndpointMessageType(string endpointName, string enclosedMessageTypes) { + var index = enclosedMessageTypes.IndexOf(';'); + + var firstType = index != -1 + ? enclosedMessageTypes.Substring(0, index) + : enclosedMessageTypes; + EndpointName = endpointName; - MessageType = messageType; + MessageType = firstType; } public string EndpointName { get; } diff --git a/src/ServiceControl.Monitoring/Infrastructure/MessageTypeTracker.cs b/src/ServiceControl.Monitoring/Infrastructure/MessageTypeTracker.cs index 8bd8fa7190..9fc6623e85 100644 --- a/src/ServiceControl.Monitoring/Infrastructure/MessageTypeTracker.cs +++ b/src/ServiceControl.Monitoring/Infrastructure/MessageTypeTracker.cs @@ -15,7 +15,7 @@ public Task Handle(TaggedLongValueOccurrence message, IMessageHandlerContext con { var endpointName = context.MessageHeaders[Headers.OriginatingEndpoint]; - registry.Record(new EndpointMessageType(endpointName, message.TagValue)); + registry.Record(new EndpointMessageType(endpointName, enclosedMessageTypes: message.TagValue)); return Task.CompletedTask; } diff --git a/src/ServiceControl.Monitoring/Retries/TaggedLongValueOccurrenceHandler.cs b/src/ServiceControl.Monitoring/Retries/TaggedLongValueOccurrenceHandler.cs index 62b86eb560..d2d32baf94 100644 --- a/src/ServiceControl.Monitoring/Retries/TaggedLongValueOccurrenceHandler.cs +++ b/src/ServiceControl.Monitoring/Retries/TaggedLongValueOccurrenceHandler.cs @@ -19,7 +19,7 @@ public Task Handle(TaggedLongValueOccurrence message, IMessageHandlerContext con if (messageType == RetriesMessageType) { - store.Store(message.Entries, instanceId, new EndpointMessageType(instanceId.EndpointName, message.TagValue)); + store.Store(message.Entries, instanceId, new EndpointMessageType(instanceId.EndpointName, enclosedMessageTypes: message.TagValue)); } return Task.CompletedTask; diff --git a/src/ServiceControl.Monitoring/Timings/TaggedLongValueOccurrenceHandler.cs b/src/ServiceControl.Monitoring/Timings/TaggedLongValueOccurrenceHandler.cs index 4987954d5f..a8a254901d 100644 --- a/src/ServiceControl.Monitoring/Timings/TaggedLongValueOccurrenceHandler.cs +++ b/src/ServiceControl.Monitoring/Timings/TaggedLongValueOccurrenceHandler.cs @@ -16,7 +16,7 @@ public TaggedLongValueOccurrenceHandler(ProcessingTimeStore processingTimeStore, public Task Handle(TaggedLongValueOccurrence message, IMessageHandlerContext context) { var instanceId = EndpointInstanceId.From(context.MessageHeaders); - var messageType = new EndpointMessageType(instanceId.EndpointName, message.TagValue); + var messageType = new EndpointMessageType(instanceId.EndpointName, enclosedMessageTypes: message.TagValue); var metricType = context.MessageHeaders[MetricHeaders.MetricType];