Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .github/workflows/build-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@ jobs:
uses: actions/[email protected]
with:
dotnet-version: 8.0.x
- name: dotnet info
run: dotnet --info
- name: Download RavenDB Server
shell: pwsh
run: ./tools/download-ravendb-server.ps1
Expand Down
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.6" />
<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.