98 lines
4.1 KiB
C#
98 lines
4.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ZB.MOM.WW.LmxOpcUa.Host.Historian
|
|
{
|
|
/// <summary>
|
|
/// Point-in-time runtime health of the historian plugin, surfaced to the status dashboard
|
|
/// and health check service. Fills the gap between the load-time plugin status
|
|
/// (<see cref="HistorianPluginLoader.LastOutcome"/>) and actual query behavior so operators
|
|
/// can detect silent query degradation.
|
|
/// </summary>
|
|
public sealed class HistorianHealthSnapshot
|
|
{
|
|
/// <summary>
|
|
/// Gets or sets the total number of historian read operations attempted since startup
|
|
/// across all read paths (raw, aggregate, at-time, events).
|
|
/// </summary>
|
|
public long TotalQueries { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the total number of read operations that completed without an exception
|
|
/// being caught by the plugin's error handler. Includes empty result sets as successes —
|
|
/// the counter reflects "the SDK call returned" not "the SDK call returned data".
|
|
/// </summary>
|
|
public long TotalSuccesses { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the total number of read operations that raised an exception. Each failure
|
|
/// also resets and closes the underlying SDK connection via the existing reconnect path.
|
|
/// </summary>
|
|
public long TotalFailures { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the number of consecutive failures since the last success. Latches until
|
|
/// a successful query clears it. The health check service uses this as a degradation signal.
|
|
/// </summary>
|
|
public int ConsecutiveFailures { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the UTC timestamp of the last successful read, or <see langword="null"/>
|
|
/// when no query has succeeded since startup.
|
|
/// </summary>
|
|
public DateTime? LastSuccessTime { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the UTC timestamp of the last failure, or <see langword="null"/> when no
|
|
/// query has failed since startup.
|
|
/// </summary>
|
|
public DateTime? LastFailureTime { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the exception message from the most recent failure. Cleared on the next
|
|
/// successful query.
|
|
/// </summary>
|
|
public string? LastError { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether the plugin currently holds an open SDK
|
|
/// connection for the process (historical values) path.
|
|
/// </summary>
|
|
public bool ProcessConnectionOpen { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets a value indicating whether the plugin currently holds an open SDK
|
|
/// connection for the event (alarm history) path.
|
|
/// </summary>
|
|
public bool EventConnectionOpen { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the node the plugin is currently connected to for the process path,
|
|
/// or <see langword="null"/> when no connection is open.
|
|
/// </summary>
|
|
public string? ActiveProcessNode { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the node the plugin is currently connected to for the event path,
|
|
/// or <see langword="null"/> when no event connection is open.
|
|
/// </summary>
|
|
public string? ActiveEventNode { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the total number of configured historian cluster nodes. A value of 1
|
|
/// reflects a legacy single-node deployment.
|
|
/// </summary>
|
|
public int NodeCount { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the number of configured nodes that are currently healthy (not in cooldown).
|
|
/// </summary>
|
|
public int HealthyNodeCount { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or sets the per-node cluster state in configuration order.
|
|
/// </summary>
|
|
public List<HistorianClusterNodeState> Nodes { get; set; } = new();
|
|
}
|
|
}
|