feat: wire all health metrics and add instance counts to dashboard

Wired ISiteHealthCollector calls for script errors (ScriptExecutionActor),
alarm eval errors (AlarmActor), dead letters (DeadLetterMonitorActor), and
S&F buffer depth placeholder. Added instance count tracking (deployed/
enabled/disabled) to SiteHealthReport via DeploymentManagerActor. Updated
Health Dashboard UI to show instance counts per site. All metrics flow
through the existing health report pipeline via ClusterClient.
This commit is contained in:
Joseph Doherty
2026-03-18 00:57:49 -04:00
parent 88b5f6cb54
commit f165ca2774
18 changed files with 151 additions and 28 deletions

View File

@@ -4,6 +4,7 @@ using Microsoft.Extensions.Logging;
using ScadaLink.Commons.Messages.ScriptExecution;
using ScadaLink.Commons.Messages.Streaming;
using ScadaLink.Commons.Types.Flattening;
using ScadaLink.HealthMonitoring;
using ScadaLink.SiteRuntime.Scripts;
using System.Text.Json;
@@ -29,6 +30,7 @@ public class ScriptActor : ReceiveActor, IWithTimers
private readonly SharedScriptLibrary _sharedScriptLibrary;
private readonly SiteRuntimeOptions _options;
private readonly ILogger _logger;
private readonly ISiteHealthCollector? _healthCollector;
private Script<object?>? _compiledScript;
private ScriptTriggerConfig? _triggerConfig;
@@ -46,7 +48,8 @@ public class ScriptActor : ReceiveActor, IWithTimers
ResolvedScript scriptConfig,
SharedScriptLibrary sharedScriptLibrary,
SiteRuntimeOptions options,
ILogger logger)
ILogger logger,
ISiteHealthCollector? healthCollector = null)
{
_scriptName = scriptName;
_instanceName = instanceName;
@@ -55,6 +58,7 @@ public class ScriptActor : ReceiveActor, IWithTimers
_sharedScriptLibrary = sharedScriptLibrary;
_options = options;
_logger = logger;
_healthCollector = healthCollector;
_minTimeBetweenRuns = scriptConfig.MinTimeBetweenRuns;
// Parse trigger configuration
@@ -207,7 +211,8 @@ public class ScriptActor : ReceiveActor, IWithTimers
_options,
replyTo,
correlationId,
_logger));
_logger,
_healthCollector));
Context.ActorOf(props, executionId);
}