Skip to content

Commit

Permalink
feat: Adds heartbeat
Browse files Browse the repository at this point in the history
  • Loading branch information
mynkow committed Apr 4, 2024
1 parent 818e8e9 commit 4ba2dc0
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ public static IServiceCollection AddCronus(this IServiceCollection services, Cro
foreach (var result in discoveryResults)
cronusServicesProvider.HandleDiscoveredModel(result);

services.AddCronusHeartbeat();

return services;
}

Expand All @@ -53,7 +55,7 @@ internal static IServiceCollection AddJobManager(this IServiceCollection service
return services;
}

public static IServiceCollection AddCronusHeartbeat(this IServiceCollection services)
internal static IServiceCollection AddCronusHeartbeat(this IServiceCollection services)
{
services.AddOptions<HeartbeatOptions, HeartbeaOptionsProvider>();
services.AddSingleton<IHeartbeat, CronusHeartbeat>();
Expand Down
3 changes: 3 additions & 0 deletions src/Elders.Cronus/Hosting/Heartbeat/CronusHeartbeat.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,15 @@ public async Task StartBeatingAsync(CancellationToken stoppingToken)
catch (Exception ex) when (ex is TaskCanceledException or ObjectDisposedException)
{
// Someone has cancled the task during the delay. In this case we just return without any error.

}
catch (Exception ex)
{
// failed to send heartbeat
logger.WarnException(ex, () => "Failed to send heartbeat.");
}
}

logger.LogInformation("Heartbeat has been stopped.");
}
}
7 changes: 5 additions & 2 deletions src/Elders.Cronus/Hosting/Heartbeat/HeartbeatSignal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,13 @@

namespace Elders.Cronus.Hosting.Heartbeat;

[DataContract(Name = "c80739a6-b5dc-483e-8c11-06a85542416e")]
[DataContract(Namespace = "cronus", Name = "c80739a6-b5dc-483e-8c11-06a85542416e")]
public sealed class HeartbeatSignal : ISignal
{
HeartbeatSignal() { }
HeartbeatSignal()
{
Tenants = new List<string>();
}

public HeartbeatSignal(string boundedContext, List<string> tenants)
{
Expand Down
2 changes: 1 addition & 1 deletion src/Elders.Cronus/Hosting/ProjectionsStartup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
namespace Elders.Cronus;

[CronusStartup(Bootstraps.Projections)]
internal class ProjectionsStartup : ICronusStartup
internal sealed class ProjectionsStartup : ICronusStartup
{
private readonly CronusProjectionBootstrapper projectionsBootstrapper;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,26 @@ internal class CronusProjectionBootstrapper
private readonly ProjectionFinderViaReflection projectionFinderViaReflection;
private readonly LatestProjectionVersionFinder projectionFinder;
private readonly IPublisher<ICommand> publisher;
private readonly IOptionsMonitor<CronusHostOptions> cronusOptionsMonitor;
private readonly CronusHostOptions cronusHostOptions;
private readonly TenantsOptions tenants;

public CronusProjectionBootstrapper(IServiceProvider serviceProvider, ProjectionFinderViaReflection projectionFinderViaReflection, LatestProjectionVersionFinder projectionFinder, IOptions<CronusHostOptions> cronusHostOptions, IOptions<TenantsOptions> tenantsOptions, IPublisher<ICommand> publisher)
public CronusProjectionBootstrapper(IServiceProvider serviceProvider, ProjectionFinderViaReflection projectionFinderViaReflection, LatestProjectionVersionFinder projectionFinder, IOptions<CronusHostOptions> cronusHostOptions, IOptions<TenantsOptions> tenantsOptions, IPublisher<ICommand> publisher, IOptionsMonitor<CronusHostOptions> cronusOptionsMonitor)
{
this.serviceProvider = serviceProvider;
this.projectionFinderViaReflection = projectionFinderViaReflection;
this.projectionFinder = projectionFinder;
this.publisher = publisher;
this.cronusOptionsMonitor = cronusOptionsMonitor;
this.cronusHostOptions = cronusHostOptions.Value;
this.tenants = tenantsOptions.Value;
}

public async Task BootstrapAsync()
{
if (cronusOptionsMonitor.CurrentValue.ProjectionsEnabled == false)
return;

foreach (var tenant in tenants.Tenants)
{
using (var scopedServiceProvider = serviceProvider.CreateScope())
Expand Down

0 comments on commit 4ba2dc0

Please sign in to comment.