diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props index cda0df6473..b06e799467 100644 --- a/src/Directory.Packages.props +++ b/src/Directory.Packages.props @@ -60,7 +60,7 @@ - + diff --git a/src/Particular.LicensingComponent.UnitTests/ApprovalFiles/ThroughputCollector_Report_Throughput_Tests.Should_generate_correct_report.approved.txt b/src/Particular.LicensingComponent.UnitTests/ApprovalFiles/ThroughputCollector_Report_Throughput_Tests.Should_generate_correct_report.approved.txt index 4357071e8e..df4c5ac553 100644 --- a/src/Particular.LicensingComponent.UnitTests/ApprovalFiles/ThroughputCollector_Report_Throughput_Tests.Should_generate_correct_report.approved.txt +++ b/src/Particular.LicensingComponent.UnitTests/ApprovalFiles/ThroughputCollector_Report_Throughput_Tests.Should_generate_correct_report.approved.txt @@ -12,6 +12,7 @@ "Queues": [ { "QueueName": "REDACTED1", + "NameHash": "66DB6BA4857B08195A497D6FA4BFAAC140B35A0B5925C0845E37AA39DB1A0050", "Throughput": 65, "EndpointIndicators": [ "KnownEndpoint" @@ -41,6 +42,7 @@ }, { "QueueName": "Endpoint2", + "NameHash": "936C4C33C71B498D9C60C90F78138AF1ECF3C9F72089F054563E125C94B0A224", "Throughput": 65, "EndpointIndicators": [ "KnownEndpoint" @@ -70,6 +72,7 @@ }, { "QueueName": "Endpoint3", + "NameHash": "8035D54FFAF0523F509245E1556BB1BD18C37B76A2D7DB4C928024B348A13132", "Throughput": 57, "EndpointIndicators": [ "KnownEndpoint" @@ -108,6 +111,7 @@ }, { "QueueName": "Endpoint4", + "NameHash": "BBF022C092922A8B3A63455FC7583EAF35840E66F01B73AF997EACDCA8ABCEA4", "Throughput": 47, "EndpointIndicators": [], "UserIndicator": "PlannedToDecommission", @@ -127,6 +131,7 @@ }, { "QueueName": "Endpoint5", + "NameHash": "435D99844B95C6079607233709D2B6FA8F2EE5E67C187946F4BC476EBB8C9E42", "Throughput": 15, "EndpointIndicators": [], "UserIndicator": "NotNServiceBusEndpoint", diff --git a/src/Particular.LicensingComponent/ThroughputCollector.cs b/src/Particular.LicensingComponent/ThroughputCollector.cs index 958de9a6c1..4e18741612 100644 --- a/src/Particular.LicensingComponent/ThroughputCollector.cs +++ b/src/Particular.LicensingComponent/ThroughputCollector.cs @@ -6,6 +6,7 @@ using AuditThroughput; using Contracts; using MonitoringThroughput; +using Particular.LicensingComponent.Report.Utility; using Persistence; using Report; using ServiceControl.Transports.BrokerThroughput; @@ -112,9 +113,8 @@ async Task GetReportGenerationStateForNonBroker(Cancellat public async Task GenerateThroughputReport(string spVersion, DateTime? reportEndDate, CancellationToken cancellationToken) { - (string Mask, string Replacement)[] masks = []; var reportMasks = await dataStore.GetReportMasks(cancellationToken); - CreateMasks(reportMasks.ToArray()); + var masker = new Masker([.. reportMasks]); var queueThroughputs = new List(); List ignoredQueueNames = []; @@ -126,7 +126,8 @@ public async Task GenerateThroughputReport(string spVersion, DateT //get all data that we have, including daily values var queueThroughput = new QueueThroughput { - QueueName = Mask(endpointData.Name), + NameHash = OneWayHasher.CalculateOneWayHash(endpointData.Name), + QueueName = masker.Mask(endpointData.Name), UserIndicator = endpointData.UserIndicator, EndpointIndicators = endpointData.EndpointIndicators ?? [], NoDataOrSendOnly = endpointData.ThroughputData.Sum() == 0, @@ -189,28 +190,6 @@ public async Task GenerateThroughputReport(string spVersion, DateT var throughputReport = new SignedReport { ReportData = report, Signature = Signature.SignReport(report) }; return throughputReport; - - void CreateMasks(string[] wordsToMask) - { - var number = 0; - masks = wordsToMask - .Select(mask => - { - number++; - return (mask, $"REDACTED{number}"); - }) - .ToArray(); - } - - string Mask(string stringToMask) - { - foreach (var (mask, replacement) in masks) - { - stringToMask = stringToMask.Replace(mask, replacement, StringComparison.OrdinalIgnoreCase); - } - - return stringToMask; - } } async IAsyncEnumerable GetDistinctEndpointData([EnumeratorCancellation] CancellationToken cancellationToken)