Skip to content

Commit f973092

Browse files
committed
Adding in-memory heartbeats
1 parent 96a21c2 commit f973092

File tree

5 files changed

+62
-5
lines changed

5 files changed

+62
-5
lines changed

src/ServiceControl/Infrastructure/Api/ConfigurationApi.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
using System.Threading;
99
using System.Threading.Tasks;
1010
using Configuration;
11+
using Monitoring.HeartbeatMonitoring;
1112
using Particular.ServiceControl.Licensing;
1213
using ServiceBus.Management.Infrastructure.Settings;
1314
using ServiceControl.Api;
1415
using ServiceControl.Api.Contracts;
1516

1617
class ConfigurationApi(ActiveLicense license,
1718
Settings settings,
18-
IHttpClientFactory httpClientFactory) : IConfigurationApi
19+
IHttpClientFactory httpClientFactory, MassTransitConnectorHeartbeatStatus connectorHeartbeatStatus) : IConfigurationApi
1920
{
2021
public Task<RootUrls> GetUrls(string baseUrl, CancellationToken cancellationToken)
2122
{
@@ -83,10 +84,7 @@ public Task<object> GetConfig(CancellationToken cancellationToken)
8384
{
8485
settings.HeartbeatGracePeriod
8586
},
86-
MassTransitConnector = new
87-
{
88-
foobar = "barfoo"
89-
}
87+
MassTransitConnector = connectorHeartbeatStatus.LastHeartbeat
9088
};
9189

9290
return Task.FromResult(content);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
namespace ServiceControl.Connector.MassTransit;
2+
3+
using System;
4+
using NServiceBus;
5+
6+
public class MassTransitConnectorHeartbeat : IMessage
7+
{
8+
public required string Version { get; set; }
9+
public required ErrorQueue[] ErrorQueues { get; set; }
10+
public required LogEntry[] Logs { get; set; }
11+
public required DateTimeOffset SentDateTimeOffset { get; set; }
12+
}
13+
14+
#pragma warning disable CA1711
15+
public class ErrorQueue
16+
#pragma warning restore CA1711
17+
{
18+
public required string Name { get; set; }
19+
public required bool Ingesting { get; set; }
20+
}
21+
22+
public class LogEntry
23+
{
24+
public string Message { get; set; }
25+
public DateTimeOffset Date { get; set; }
26+
public string Level { get; set; }
27+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#nullable enable
2+
namespace ServiceControl.Monitoring.HeartbeatMonitoring;
3+
4+
using Connector.MassTransit;
5+
6+
public class MassTransitConnectorHeartbeatStatus
7+
{
8+
public MassTransitConnectorHeartbeat? LastHeartbeat { get; private set; }
9+
10+
public void Update(MassTransitConnectorHeartbeat lastHeartbeat) => LastHeartbeat = lastHeartbeat;
11+
}

src/ServiceControl/Monitoring/HeartbeatMonitoringComponent.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using EndpointControl.Handlers;
55
using EventLog;
66
using ExternalIntegrations;
7+
using HeartbeatMonitoring;
78
using Infrastructure.DomainEvents;
89
using Microsoft.Extensions.DependencyInjection;
910
using Microsoft.Extensions.Hosting;
@@ -21,6 +22,7 @@ public override void Configure(Settings settings, ITransportCustomization transp
2122
hostBuilder.Services.AddHostedService<HeartbeatEndpointSettingsSyncHostedService>();
2223

2324
hostBuilder.Services.AddSingleton<IEndpointInstanceMonitoring, EndpointInstanceMonitoring>();
25+
hostBuilder.Services.AddSingleton<MassTransitConnectorHeartbeatStatus>();
2426

2527
hostBuilder.Services.AddDomainEventHandler<MonitoringDataPersister>();
2628

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace ServiceControl.Monitoring;
2+
3+
using System.Threading.Tasks;
4+
using Connector.MassTransit;
5+
using HeartbeatMonitoring;
6+
using NServiceBus;
7+
8+
class MassTransitConnectorHeartbeatHandler(MassTransitConnectorHeartbeatStatus connectorHeartbeatStatus) : IHandleMessages<MassTransitConnectorHeartbeat>
9+
{
10+
public Task Handle(MassTransitConnectorHeartbeat message, IMessageHandlerContext context)
11+
{
12+
if (connectorHeartbeatStatus.LastHeartbeat == null || message.SentDateTimeOffset > connectorHeartbeatStatus.LastHeartbeat.SentDateTimeOffset)
13+
{
14+
connectorHeartbeatStatus.Update(message);
15+
}
16+
17+
return Task.CompletedTask;
18+
}
19+
}

0 commit comments

Comments
 (0)