Skip to content

Commit

Permalink
Merge pull request #4720 from Particular/connector_heartbeat
Browse files Browse the repository at this point in the history
  • Loading branch information
johnsimons authored Jan 24, 2025
2 parents 70e9717 + 91a8480 commit 3d91b73
Show file tree
Hide file tree
Showing 16 changed files with 79 additions and 138 deletions.
2 changes: 1 addition & 1 deletion src/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
<PackageVersion Include="NServiceBus.Transport.SqlServer" Version="8.1.6" />
<PackageVersion Include="NServiceBus.Transport.PostgreSql" Version="8.1.7" />
<PackageVersion Include="NuGet.Versioning" Version="6.12.1" />
<PackageVersion Include="NUnit" Version="4.2.2" />
<PackageVersion Include="NUnit" Version="4.3.2" />
<PackageVersion Include="NUnit.Analyzers" Version="4.6.0" />
<PackageVersion Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageVersion Include="Particular.Approvals" Version="2.0.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ public async Task A_new_message_with_edited_headers_is_sent()
{
Assert.That(context.EditedMessageId, Is.Not.EqualTo(context.OriginalMessageId));
Assert.That(context.OriginalMessageFailure.Status, Is.EqualTo(FailedMessageStatus.Resolved));
Assert.That(context.EditedMessageHeaders["AcceptanceTest.NewHeader"], Is.EqualTo("42").AsCollection);
Assert.That(context.EditedMessageHeaders["ServiceControl.EditOf"], Is.EqualTo(context.UniqueMessageId).AsCollection);
Assert.That(context.EditedMessageHeaders["AcceptanceTest.NewHeader"], Is.EqualTo("42"));
Assert.That(context.EditedMessageHeaders["ServiceControl.EditOf"], Is.EqualTo(context.UniqueMessageId));
});
}

Expand Down

This file was deleted.

1 change: 0 additions & 1 deletion src/ServiceControl.Persistence.RavenDB/RavenPersistence.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ public void AddPersistence(IServiceCollection services)
services.AddSingleton<IRetryHistoryDataStore, RetryHistoryDataStore>();
services.AddSingleton<IEndpointSettingsStore, EndpointSettingsStore>();
services.AddSingleton<ITrialLicenseDataProvider, TrialLicenseDataProvider>();
services.AddSingleton<IConnectedApplicationsDataStore, ConnectedApplicationsDataStore>();
}

public void AddInstaller(IServiceCollection services)
Expand Down

This file was deleted.

11 changes: 0 additions & 11 deletions src/ServiceControl.Persistence/IConnectedApplicationsDataStore.cs

This file was deleted.

3 changes: 2 additions & 1 deletion src/ServiceControl.UnitTests/API/APIApprovals.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
using ServiceBus.Management.Infrastructure.Settings;
using ServiceControl.Infrastructure.Api;
using ServiceControl.Infrastructure.WebApi;
using ServiceControl.Monitoring.HeartbeatMonitoring;

[TestFixture]
class APIApprovals
Expand All @@ -34,7 +35,7 @@ public async Task RootPathValue()
new ActiveLicense(null) { IsValid = true },
new Settings(),
null,
null
new MassTransitConnectorHeartbeatStatus()
)
)
{
Expand Down
14 changes: 5 additions & 9 deletions src/ServiceControl/Infrastructure/Api/ConfigurationApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,15 @@
using System.Threading;
using System.Threading.Tasks;
using Configuration;
using Monitoring.HeartbeatMonitoring;
using Particular.ServiceControl.Licensing;
using ServiceBus.Management.Infrastructure.Settings;
using ServiceControl.Api;
using ServiceControl.Api.Contracts;
using ServiceControl.Persistence;

class ConfigurationApi(ActiveLicense license,
Settings settings,
IConnectedApplicationsDataStore connectedApplicationsDataStore,
IHttpClientFactory httpClientFactory) : IConfigurationApi
IHttpClientFactory httpClientFactory, MassTransitConnectorHeartbeatStatus connectorHeartbeatStatus) : IConfigurationApi
{
public Task<RootUrls> GetUrls(string baseUrl, CancellationToken cancellationToken)
{
Expand Down Expand Up @@ -51,7 +50,7 @@ public Task<RootUrls> GetUrls(string baseUrl, CancellationToken cancellationToke
}


public async Task<object> GetConfig(CancellationToken cancellationToken)
public Task<object> GetConfig(CancellationToken cancellationToken)
{
object content = new
{
Expand Down Expand Up @@ -85,13 +84,10 @@ public async Task<object> GetConfig(CancellationToken cancellationToken)
{
settings.HeartbeatGracePeriod
},
ConnectedApplications = new
{
ConnectedApplications = await connectedApplicationsDataStore.GetConnectedApplications()
}
MassTransitConnector = connectorHeartbeatStatus.LastHeartbeat
};

return content;
return Task.FromResult(content);
}

public async Task<RemoteConfiguration[]> GetRemoteConfigs(CancellationToken cancellationToken = default)
Expand Down
7 changes: 5 additions & 2 deletions src/ServiceControl/Licensing/ActiveLicense.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
namespace Particular.ServiceControl.Licensing
{
using System.Threading.Tasks;
using System.Threading;
using System;
using System.Threading;
using System.Threading.Tasks;
using global::ServiceControl.LicenseManagement;
using global::ServiceControl.Persistence;
using NServiceBus.Logging;

public class ActiveLicense(ITrialLicenseDataProvider trialLicenseDataProvider)
{
public bool IsValid { get; set; }
public bool IsEvaluation { get; set; }

public LicenseDetails Details { get; set; }

Expand All @@ -22,6 +23,8 @@ public async Task Refresh(CancellationToken cancellationToken)
Details = await ValidateTrialLicense(detectedLicense.Details, trialLicenseDataProvider, cancellationToken);

IsValid = !Details.HasLicenseExpired();

IsEvaluation = detectedLicense.IsEvaluationLicense;
}

internal static async Task<LicenseDetails> ValidateTrialLicense(LicenseDetails licenseDetails, ITrialLicenseDataProvider trialLicenseDataProvider, CancellationToken cancellationToken)
Expand Down
17 changes: 5 additions & 12 deletions src/ServiceControl/Licensing/LicenseController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Monitoring.HeartbeatMonitoring;
using Particular.ServiceControl.Licensing;
using Persistence;
using ServiceBus.Management.Infrastructure.Settings;

[ApiController]
[Route("api")]
public class LicenseController(ActiveLicense activeLicense, Settings settings, IConnectedApplicationsDataStore connectedApplicationsStore) : ControllerBase
public class LicenseController(ActiveLicense activeLicense, Settings settings, MassTransitConnectorHeartbeatStatus connectorHeartbeatStatus) : ControllerBase
{
[HttpGet]
[Route("license")]
Expand All @@ -31,21 +31,14 @@ public async Task<ActionResult<LicenseInfo>> License(bool refresh, string client
LicenseType = activeLicense.Details.LicenseType ?? string.Empty,
InstanceName = settings.InstanceName ?? string.Empty,
LicenseStatus = activeLicense.Details.Status,
LicenseExtensionUrl = $"https://particular.net/extend-your-trial?p={clientName}{await BuildConnectedApplicationsListPart()}"
LicenseExtensionUrl = connectorHeartbeatStatus.LastHeartbeat == null
? $"https://particular.net/extend-your-trial?p={clientName}"
: $"https://particular.net/license/mt?p={clientName}&t={(activeLicense.IsEvaluation ? 0 : 1)}"
};

return licenseInfo;
}

async Task<string> BuildConnectedApplicationsListPart()
{
var connectedApplications = await connectedApplicationsStore.GetConnectedApplications();

return connectedApplications != null
? $"&ca={string.Join(',', connectedApplications)}"
: string.Empty;
}

public class LicenseInfo
{
public bool TrialLicense { get; set; }
Expand Down
1 change: 0 additions & 1 deletion src/ServiceControl/Monitoring/EndpointInstanceMonitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ namespace ServiceControl.Monitoring
using Contracts.HeartbeatMonitoring;
using EndpointControl.Contracts;
using Infrastructure.DomainEvents;
using NLog.Fluent;
using NServiceBus.Logging;
using ServiceControl.Operations;
using ServiceControl.Persistence;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
namespace ServiceControl.Connector.MassTransit;

using System;
using NServiceBus;

public class MassTransitConnectorHeartbeat : IMessage
{
public required string Version { get; set; }
public required ErrorQueue[] ErrorQueues { get; set; }
public required LogEntry[] Logs { get; set; }
public required DateTimeOffset SentDateTimeOffset { get; set; }
}

#pragma warning disable CA1711
public class ErrorQueue
#pragma warning restore CA1711
{
public required string Name { get; set; }
public required bool Ingesting { get; set; }
}

public class LogEntry
{
public string Message { get; set; }
public DateTimeOffset Date { get; set; }
public string Level { get; set; }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#nullable enable
namespace ServiceControl.Monitoring.HeartbeatMonitoring;

using Connector.MassTransit;

public class MassTransitConnectorHeartbeatStatus
{
public MassTransitConnectorHeartbeat? LastHeartbeat { get; private set; }

public void Update(MassTransitConnectorHeartbeat lastHeartbeat) => LastHeartbeat = lastHeartbeat;
}
2 changes: 2 additions & 0 deletions src/ServiceControl/Monitoring/HeartbeatMonitoringComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using EndpointControl.Handlers;
using EventLog;
using ExternalIntegrations;
using HeartbeatMonitoring;
using Infrastructure.DomainEvents;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
Expand All @@ -21,6 +22,7 @@ public override void Configure(Settings settings, ITransportCustomization transp
hostBuilder.Services.AddHostedService<HeartbeatEndpointSettingsSyncHostedService>();

hostBuilder.Services.AddSingleton<IEndpointInstanceMonitoring, EndpointInstanceMonitoring>();
hostBuilder.Services.AddSingleton<MassTransitConnectorHeartbeatStatus>();

hostBuilder.Services.AddDomainEventHandler<MonitoringDataPersister>();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
namespace ServiceControl.Monitoring;

using System.Threading.Tasks;
using Connector.MassTransit;
using HeartbeatMonitoring;
using NServiceBus;

class MassTransitConnectorHeartbeatHandler(MassTransitConnectorHeartbeatStatus connectorHeartbeatStatus) : IHandleMessages<MassTransitConnectorHeartbeat>
{
public Task Handle(MassTransitConnectorHeartbeat message, IMessageHandlerContext context)
{
if (connectorHeartbeatStatus.LastHeartbeat == null || message.SentDateTimeOffset > connectorHeartbeatStatus.LastHeartbeat.SentDateTimeOffset)
{
connectorHeartbeatStatus.Update(message);
}

return Task.CompletedTask;
}
}
27 changes: 0 additions & 27 deletions src/ServiceControl/Operations/MassTransitDetector.cs

This file was deleted.

0 comments on commit 3d91b73

Please sign in to comment.