Skip to content

Commit

Permalink
log esdb version periodically in the server logs
Browse files Browse the repository at this point in the history
  • Loading branch information
dhingrak committed Jun 29, 2023
1 parent b3305db commit 23eb3c1
Show file tree
Hide file tree
Showing 6 changed files with 117 additions and 3 deletions.
13 changes: 13 additions & 0 deletions src/EventStore.Core.Tests/Fakes/FakeLogger.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System.Collections.Generic;
using Serilog;
using Serilog.Events;

namespace EventStore.Core.Tests.Fakes;

public class FakeLogger : ILogger {
public List<LogEvent> LogMessages { get; } = new();

public void Write(LogEvent logEvent) {
LogMessages.Add(logEvent);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using System;
using System.Linq;
using EventStore.Core.Messages;
using EventStore.Core.Services.PeriodicLogs;
using EventStore.Core.Services.TimerService;
using EventStore.Core.Tests.Fakes;
using NUnit.Framework;

namespace EventStore.Core.Tests.Services.PeriodicLogs;

public class PeriodicallyLoggingServiceTests {

private FakePublisher _publisher;
private FakeLogger _logger;
private string _esVersion;

[SetUp]
public void SetUp() {
_publisher = new();
_logger = new FakeLogger();
_esVersion = "0.0.0.0";
}

[Test]
public void on_start() {
// given
var sut = new PeriodicallyLoggingService(_publisher, _esVersion, _logger);

// when
sut.Handle(new SystemMessage.SystemStart());

// then
Assert.IsInstanceOf<MonitoringMessage.CheckEsVersion>(_publisher.Messages.Single());
Assert.IsEmpty(_logger.LogMessages);
}

[Test]
public void log_es_version_periodically() {
// given
var sut = new PeriodicallyLoggingService(_publisher, _esVersion, _logger);

// when
sut.Handle(new MonitoringMessage.CheckEsVersion());

// then
var schedule = (TimerMessage.Schedule)_publisher.Messages.Single();
Assert.AreEqual(TimeSpan.FromHours(12), schedule.TriggerAfter);
Assert.IsInstanceOf<MonitoringMessage.CheckEsVersion>(schedule.ReplyMessage);

var logMessage = _logger.LogMessages.Single();
Assert.AreEqual($"Current version of Event Store is : \"0.0.0.0\" ", logMessage.RenderMessage());
}

}
4 changes: 4 additions & 0 deletions src/EventStore.Core/ClusterVNode.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
using EventStore.Core.Caching;
using EventStore.Core.Certificates;
using EventStore.Core.Cluster;
using EventStore.Core.Services.PeriodicLogs;
using EventStore.Core.Synchronization;
using EventStore.Core.TransactionLog.Checkpoint;
using EventStore.Core.TransactionLog.FileNamingStrategy;
Expand Down Expand Up @@ -1536,6 +1537,9 @@ public class ClusterVNode<TStreamId> :
options.Cluster.DiscoverViaDns ? options.Cluster.ClusterDns : null);
_mainBus.Subscribe<SystemMessage.SystemReady>(_startup);
_mainBus.Subscribe<SystemMessage.BecomeShuttingDown>(_startup);
var periodicLogging = new PeriodicallyLoggingService(_mainQueue, VersionInfo.Version, Log);
_mainBus.Subscribe<SystemMessage.SystemStart>(periodicLogging);
_mainBus.Subscribe<MonitoringMessage.CheckEsVersion>(periodicLogging);

dynamicCacheManager.Start();
}
Expand Down
4 changes: 4 additions & 0 deletions src/EventStore.Core/Messages/MonitoringMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -208,5 +208,9 @@ public partial class InternalStatsRequestResponse : Message {
[DerivedMessage(CoreMessage.Misc)]
public partial class DynamicCacheManagerTick : Message {
}

[DerivedMessage(CoreMessage.Misc)]
public partial class CheckEsVersion : Message {
}
}
}
3 changes: 0 additions & 3 deletions src/EventStore.Core/Services/Gossip/GossipServiceBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Net;
using EventStore.Common.Log;
using EventStore.Common.Utils;
using EventStore.Core.Bus;
using EventStore.Core.Cluster;
Expand Down Expand Up @@ -32,7 +31,6 @@ public abstract class GossipServiceBase : IHandle<SystemMessage.SystemInit>,
public static readonly TimeSpan GossipStartupInterval = TimeSpan.FromMilliseconds(100);
private readonly TimeSpan DeadMemberRemovalPeriod;
private static readonly ILogger Log = Serilog.Log.ForContext<GossipServiceBase>();
private static readonly ThrottledLog<GossipServiceBase> ThrottledLog = new(TimeSpan.FromHours(12));

protected readonly MemberInfo _memberInfo;
protected VNodeState CurrentRole = VNodeState.Initializing;
Expand Down Expand Up @@ -142,7 +140,6 @@ public abstract class GossipServiceBase : IHandle<SystemMessage.SystemInit>,
var gossipRound = Math.Min(int.MaxValue - 1, node == null ? message.GossipRound : message.GossipRound + 1);
_bus.Publish(
TimerMessage.Schedule.Create(interval, _publishEnvelope, new GossipMessage.Gossip(gossipRound)));
ThrottledLog.Information($"Current version of Event Store is : {_memberInfo.ESVersion}");
}

private MemberInfo GetNodeToGossipTo(MemberInfo[] members) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using System;
using EventStore.Common.Utils;
using EventStore.Core.Bus;
using EventStore.Core.Messages;
using EventStore.Core.Messaging;
using EventStore.Core.Services.TimerService;
using Serilog;

namespace EventStore.Core.Services.PeriodicLogs;

public class PeriodicallyLoggingService :
IHandle<SystemMessage.SystemStart>,
IHandle<MonitoringMessage.CheckEsVersion> {

private static readonly TimeSpan _interval = TimeSpan.FromHours(12);

private readonly IPublisher _publisher;
private readonly string _esVersion;
private readonly ILogger _logger;
private readonly TimerMessage.Schedule _esVersionScheduleLog;

public PeriodicallyLoggingService(IPublisher publisher, string esVersion, ILogger logger) {
Ensure.NotNull(publisher, nameof(publisher));
Ensure.NotNull(logger, nameof(logger));

_publisher = publisher;
_esVersion = esVersion;
_logger = logger;
_esVersionScheduleLog = TimerMessage.Schedule.Create(_interval, new PublishEnvelope(publisher),
new MonitoringMessage.CheckEsVersion());
}

public void Handle(SystemMessage.SystemStart message) {
_publisher.Publish(new MonitoringMessage.CheckEsVersion());
}

public void Handle(MonitoringMessage.CheckEsVersion message) {
_logger.Information("Current version of Event Store is : {esVersion} ", _esVersion);
_publisher.Publish(_esVersionScheduleLog);
}

}

0 comments on commit 23eb3c1

Please sign in to comment.