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)