Skip to content

Commit bffb502

Browse files
committed
Add monthly highest usage
1 parent d0b1aee commit bffb502

File tree

7 files changed

+40
-11
lines changed

7 files changed

+40
-11
lines changed

src/Particular.LicensingComponent.Contracts/EndpointThroughputSummary.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public class EndpointThroughputSummary
77
public bool IsKnownEndpoint { get; set; }
88
public string UserIndicator { get; set; }
99
public long MaxDailyThroughput { get; set; }
10+
public long MaxMonthlyThroughput { get; set; }
1011
}
1112

1213
public class UpdateUserIndicator

src/Particular.LicensingComponent.Contracts/ThroughputSettings.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22

33
using ServiceControl.Configuration;
44

5-
public class ThroughputSettings(string serviceControlQueue, string errorQueue, string transportType, string customerName, string serviceControlVersion)
5+
public class ThroughputSettings(
6+
string serviceControlQueue,
7+
string errorQueue,
8+
string transportType,
9+
string customerName,
10+
string serviceControlVersion,
11+
string licenseEdition)
612
{
713
public static readonly SettingsRootNamespace SettingsNamespace = new("LicensingComponent");
814

@@ -14,4 +20,5 @@ public class ThroughputSettings(string serviceControlQueue, string errorQueue, s
1420
public string TransportType { get; set; } = transportType;
1521
public string CustomerName { get; } = customerName;
1622
public string ServiceControlVersion { get; } = serviceControlVersion;
23+
public string LicenseEdition { get; } = licenseEdition;
1724
}

src/Particular.LicensingComponent/LicensingComponentHostBuilderExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ namespace Particular.LicensingComponent;
1010

1111
public static class LicensingComponentHostBuilderExtensions
1212
{
13-
public static IHostApplicationBuilder AddLicensingComponent(this IHostApplicationBuilder hostBuilder, string transportType, string errorQueue, string serviceControlQueue, string customerName, string serviceControlVersion)
13+
public static IHostApplicationBuilder AddLicensingComponent(this IHostApplicationBuilder hostBuilder, string transportType, string errorQueue, string serviceControlQueue, string customerName, string serviceControlVersion, string licenseEdition)
1414
{
1515
var services = hostBuilder.Services;
1616

17-
var throughputSettings = new ThroughputSettings(serviceControlQueue, errorQueue, transportType, customerName, serviceControlVersion);
17+
var throughputSettings = new ThroughputSettings(serviceControlQueue, errorQueue, transportType, customerName, serviceControlVersion, licenseEdition);
1818
services.AddSingleton(throughputSettings);
1919
services.AddHostedService<AuditThroughputCollectorHostedService>();
2020
services.AddHostedService<MonitoringThroughputHostedService>();

src/Particular.LicensingComponent/ThroughputCollector.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ public async Task<List<EndpointThroughputSummary>> GetThroughputSummary(Cancella
7171
Name = endpointData.Name,
7272
UserIndicator = endpointData.UserIndicator ?? (endpointData.IsKnownEndpoint ? Contracts.UserIndicator.NServiceBusEndpoint.ToString() : string.Empty),
7373
IsKnownEndpoint = endpointData.IsKnownEndpoint,
74-
MaxDailyThroughput = endpointData.ThroughputData.Max()
74+
MaxDailyThroughput = endpointData.ThroughputData.MaxDailyThroughput(),
75+
MaxMonthlyThroughput = endpointData.ThroughputData.MaxMonthlyThroughput()
7576
};
7677

7778
endpointSummaries.Add(endpointSummary);
@@ -130,7 +131,7 @@ public async Task<SignedReport> GenerateThroughputReport(string spVersion, DateT
130131
EndpointIndicators = endpointData.EndpointIndicators ?? [],
131132
NoDataOrSendOnly = endpointData.ThroughputData.Sum() == 0,
132133
Scope = endpointData.Scope ?? "",
133-
Throughput = endpointData.ThroughputData.Max(),
134+
Throughput = endpointData.ThroughputData.MaxDailyThroughput(),
134135
DailyThroughputFromAudit = endpointData.ThroughputData.FromSource(ThroughputSource.Audit).Select(s => new DailyThroughput { DateUTC = s.DateUTC, MessageCount = s.MessageCount }).ToArray(),
135136
DailyThroughputFromMonitoring = endpointData.ThroughputData.FromSource(ThroughputSource.Monitoring).Select(s => new DailyThroughput { DateUTC = s.DateUTC, MessageCount = s.MessageCount }).ToArray(),
136137
DailyThroughputFromBroker = notAnNsbEndpoint ? [] : endpointData.ThroughputData.FromSource(ThroughputSource.Broker).Select(s => new DailyThroughput { DateUTC = s.DateUTC, MessageCount = s.MessageCount }).ToArray()

src/Particular.LicensingComponent/ThroughputDataExtensions.cs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public static IEnumerable<EndpointDailyThroughput> FromSource(this List<Throughp
1010

1111
public static long Sum(this List<ThroughputData> throughputs) => throughputs.SelectMany(t => t).Sum(kvp => kvp.Value);
1212

13-
public static long Max(this List<ThroughputData> throughputs)
13+
public static long MaxDailyThroughput(this List<ThroughputData> throughputs)
1414
{
1515
var items = throughputs.SelectMany(t => t).ToArray();
1616

@@ -22,6 +22,22 @@ public static long Max(this List<ThroughputData> throughputs)
2222
return 0;
2323
}
2424

25+
public static long MaxMonthlyThroughput(this List<ThroughputData> throughputs)
26+
{
27+
var monthlySums = throughputs
28+
.SelectMany(data => data)
29+
.GroupBy(kvp => $"{kvp.Key.Year}-{kvp.Key.Month}")
30+
.Select(group => group.Sum(kvp => kvp.Value))
31+
.ToArray();
32+
33+
if (monthlySums.Any())
34+
{
35+
return monthlySums.Max();
36+
}
37+
38+
return 0;
39+
}
40+
2541
public static bool HasDataFromSource(this IDictionary<string, IEnumerable<ThroughputData>> throughputPerQueue, ThroughputSource source) =>
2642
throughputPerQueue.Any(queueName => queueName.Value.Any(data => data.ThroughputSource == source && data.Count > 0));
2743
}

src/ServiceControl.Persistence.RavenDB/Throughput/LicensingDataStore.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,14 @@ public async Task SaveEndpoint(Endpoint endpoint, CancellationToken cancellation
122122

123123
public async Task<IDictionary<string, IEnumerable<ThroughputData>>> GetEndpointThroughputByQueueName(IList<string> queueNames, CancellationToken cancellationToken)
124124
{
125-
var results = queueNames.ToDictionary(queueName => queueName, queueNames => new List<ThroughputData>() as IEnumerable<ThroughputData>);
125+
var results = queueNames.ToDictionary(queueName => queueName, _ => new List<ThroughputData>() as IEnumerable<ThroughputData>);
126126

127127
var store = await storeProvider.GetDocumentStore(cancellationToken);
128128
using IAsyncDocumentSession session = store.OpenAsyncSession(databaseConfiguration.Name);
129129

130130
var query = session.Query<EndpointDocument>()
131131
.Where(document => document.SanitizedName.In(queueNames))
132-
.Include(builder => builder.IncludeTimeSeries(ThroughputTimeSeriesName));
132+
.Include(builder => builder.IncludeTimeSeries(ThroughputTimeSeriesName, DateTime.UtcNow.AddMonths(-14)));
133133

134134
var documents = await query.ToListAsync(cancellationToken);
135135

src/ServiceControl/Licensing/LicensingComponent.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,17 @@ namespace Particular.ServiceControl;
1111
class LicensingComponent : ServiceControlComponent
1212
{
1313
public override void Configure(Settings settings, ITransportCustomization transportCustomization,
14-
IHostApplicationBuilder hostBuilder) =>
14+
IHostApplicationBuilder hostBuilder)
15+
{
16+
var licenseDetails = LicenseManager.FindLicense().Details;
1517
hostBuilder.AddLicensingComponent(
1618
TransportManifestLibrary.Find(settings.TransportType)?.Name ?? settings.TransportType,
1719
settings.ErrorQueue,
1820
settings.InstanceName,
19-
LicenseManager.FindLicense().Details.RegisteredTo,
20-
ServiceControlVersion.GetFileVersion());
21+
licenseDetails.RegisteredTo,
22+
ServiceControlVersion.GetFileVersion(),
23+
licenseDetails.Edition);
24+
}
2125

2226
public override void Setup(Settings settings, IComponentInstallationContext context,
2327
IHostApplicationBuilder hostBuilder) =>

0 commit comments

Comments
 (0)