From b3222cf30b738193ba0ef7ec1eb35960b4d60d82 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 23 Mar 2026 00:37:33 -0400 Subject: [PATCH] fix(site-runtime): wire EventLogHandlerActor so site event log queries work The SiteCommunicationActor expected an event log handler but none was registered, causing "Event log handler not available" on the Event Logs page and CLI. Bridge IEventLogQueryService to Akka via a simple actor. --- .../Actors/AkkaHostedService.cs | 10 +++++++ .../EventLogHandlerActor.cs | 27 +++++++++++++++++++ .../ScadaLink.SiteEventLogging.csproj | 1 + 3 files changed, 38 insertions(+) create mode 100644 src/ScadaLink.SiteEventLogging/EventLogHandlerActor.cs diff --git a/src/ScadaLink.Host/Actors/AkkaHostedService.cs b/src/ScadaLink.Host/Actors/AkkaHostedService.cs index a1c805f..6a7da91 100644 --- a/src/ScadaLink.Host/Actors/AkkaHostedService.cs +++ b/src/ScadaLink.Host/Actors/AkkaHostedService.cs @@ -302,6 +302,16 @@ akka {{ // Register local handlers with SiteCommunicationActor siteCommActor.Tell(new RegisterLocalHandler(LocalHandlerType.Artifacts, dmProxy)); + // Event log handler — bridges Akka to IEventLogQueryService + var eventLogQueryService = _serviceProvider.GetService(); + if (eventLogQueryService != null) + { + var eventLogHandler = _actorSystem.ActorOf( + Props.Create(() => new SiteEventLogging.EventLogHandlerActor(eventLogQueryService)), + "event-log-handler"); + siteCommActor.Tell(new RegisterLocalHandler(LocalHandlerType.EventLog, eventLogHandler)); + } + // Register SiteCommunicationActor with ClusterClientReceptionist so central ClusterClients can reach it ClusterClientReceptionist.Get(_actorSystem).RegisterService(siteCommActor); diff --git a/src/ScadaLink.SiteEventLogging/EventLogHandlerActor.cs b/src/ScadaLink.SiteEventLogging/EventLogHandlerActor.cs new file mode 100644 index 0000000..73d1712 --- /dev/null +++ b/src/ScadaLink.SiteEventLogging/EventLogHandlerActor.cs @@ -0,0 +1,27 @@ +using Akka.Actor; +using Akka.Event; +using ScadaLink.Commons.Messages.RemoteQuery; + +namespace ScadaLink.SiteEventLogging; + +/// +/// Akka actor bridge for . +/// Receives from the SiteCommunicationActor +/// and returns . +/// +public class EventLogHandlerActor : ReceiveActor +{ + private readonly ILoggingAdapter _log = Context.GetLogger(); + private readonly IEventLogQueryService _queryService; + + public EventLogHandlerActor(IEventLogQueryService queryService) + { + _queryService = queryService; + + Receive(msg => + { + var response = _queryService.ExecuteQuery(msg); + Sender.Tell(response); + }); + } +} diff --git a/src/ScadaLink.SiteEventLogging/ScadaLink.SiteEventLogging.csproj b/src/ScadaLink.SiteEventLogging/ScadaLink.SiteEventLogging.csproj index 080a38e..c66bd59 100644 --- a/src/ScadaLink.SiteEventLogging/ScadaLink.SiteEventLogging.csproj +++ b/src/ScadaLink.SiteEventLogging/ScadaLink.SiteEventLogging.csproj @@ -8,6 +8,7 @@ +