docs: add XML doc comments across src + Sister Projects section in CLAUDE.md
Bulk CommentChecker pass: fills in <param>/<inheritdoc> tags on public APIs across all 23 src/ projects so the doc-coverage gate is green. Also adds a Sister Projects section to CLAUDE.md pointing at the MxAccess Gateway and OtOpcUa sibling repos, and gitignores local credential captures (*login*.txt) and the wonder-app-vd03 deploy/ artifacts.
This commit is contained in:
@@ -35,86 +35,55 @@ public class SiteHealthCollector : ISiteHealthCollector
|
||||
/// is injectable so the report timestamp is deterministically testable —
|
||||
/// consistent with the rest of the module's time-dependent classes.
|
||||
/// </summary>
|
||||
/// <param name="timeProvider">Optional custom time provider; defaults to system time.</param>
|
||||
public SiteHealthCollector(TimeProvider? timeProvider = null)
|
||||
{
|
||||
_timeProvider = timeProvider ?? TimeProvider.System;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Increment the script error counter. Covers unhandled exceptions,
|
||||
/// timeouts, and recursion limit violations.
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void IncrementScriptError()
|
||||
{
|
||||
Interlocked.Increment(ref _scriptErrorCount);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Increment the alarm evaluation error counter.
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void IncrementAlarmError()
|
||||
{
|
||||
Interlocked.Increment(ref _alarmErrorCount);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Increment the dead letter counter for this reporting interval.
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void IncrementDeadLetter()
|
||||
{
|
||||
Interlocked.Increment(ref _deadLetterCount);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Audit Log (#23) Bundle G — increment the per-interval count of
|
||||
/// <c>FallbackAuditWriter</c> primary failures. Bridged from the
|
||||
/// <c>IAuditWriteFailureCounter</c> binding registered via
|
||||
/// <c>AddAuditLogHealthMetricsBridge()</c>; reset every interval together
|
||||
/// with the other per-interval counters.
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void IncrementSiteAuditWriteFailures()
|
||||
{
|
||||
Interlocked.Increment(ref _siteAuditWriteFailures);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Audit Log (#23) M5 Bundle C — increment the per-interval count of
|
||||
/// payload-filter redactor over-redactions (header / body / SQL
|
||||
/// parameter stages routed to the
|
||||
/// <c><redacted: redactor error></c> marker). Bridged from the
|
||||
/// <c>IAuditRedactionFailureCounter</c> binding registered via
|
||||
/// <c>AddAuditLogHealthMetricsBridge()</c>; reset every interval together
|
||||
/// with the other per-interval counters.
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void IncrementAuditRedactionFailure()
|
||||
{
|
||||
Interlocked.Increment(ref _auditRedactionFailures);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Audit Log (#23) M6 Bundle E (T6) — replace the latest backlog snapshot
|
||||
/// from the site SQLite writer. The field is a single reference write
|
||||
/// (volatile) so the next <see cref="CollectReport"/> sees the most recent
|
||||
/// snapshot — there is no count to reset, the report just carries forward
|
||||
/// whatever was last refreshed.
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void UpdateSiteAuditBacklog(SiteAuditBacklogSnapshot snapshot)
|
||||
{
|
||||
_siteAuditBacklog = snapshot ?? throw new ArgumentNullException(nameof(snapshot));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update the health status for a named data connection.
|
||||
/// Called by DCL when connection state changes.
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void UpdateConnectionHealth(string connectionName, ConnectionHealth health)
|
||||
{
|
||||
_connectionStatuses[connectionName] = health;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove a connection from tracking (e.g., on connection disposal).
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void RemoveConnection(string connectionName)
|
||||
{
|
||||
_connectionStatuses.TryRemove(connectionName, out _);
|
||||
@@ -123,47 +92,43 @@ public class SiteHealthCollector : ISiteHealthCollector
|
||||
_tagQualityCounts.TryRemove(connectionName, out _);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update tag resolution counts for a named data connection.
|
||||
/// Called by DCL after tag resolution attempts.
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void UpdateTagResolution(string connectionName, int totalSubscribed, int successfullyResolved)
|
||||
{
|
||||
_tagResolutionCounts[connectionName] = new TagResolutionStatus(totalSubscribed, successfullyResolved);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void UpdateConnectionEndpoint(string connectionName, string endpoint)
|
||||
{
|
||||
_connectionEndpoints[connectionName] = endpoint;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void UpdateTagQuality(string connectionName, int good, int bad, int uncertain)
|
||||
{
|
||||
_tagQualityCounts[connectionName] = new TagQualityCounts(good, bad, uncertain);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void SetParkedMessageCount(int count)
|
||||
{
|
||||
Interlocked.Exchange(ref _parkedMessageCount, count);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void SetNodeHostname(string hostname) => _nodeHostname = hostname;
|
||||
|
||||
/// <inheritdoc />
|
||||
public void SetClusterNodes(IReadOnlyList<Commons.Messages.Health.NodeStatus> nodes) => _clusterNodes = nodes;
|
||||
|
||||
/// <summary>
|
||||
/// Set the current store-and-forward buffer depths snapshot.
|
||||
/// Called before report collection with data from the S&F service.
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void SetStoreAndForwardDepths(IReadOnlyDictionary<string, int> depths)
|
||||
{
|
||||
_sfBufferDepths = depths;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set the current instance counts.
|
||||
/// Called by the Deployment Manager after instance state changes.
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public void SetInstanceCounts(int deployed, int enabled, int disabled)
|
||||
{
|
||||
Interlocked.Exchange(ref _deployedInstanceCount, deployed);
|
||||
@@ -171,15 +136,13 @@ public class SiteHealthCollector : ISiteHealthCollector
|
||||
Interlocked.Exchange(ref _disabledInstanceCount, disabled);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public void SetActiveNode(bool isActive) => _isActiveNode = isActive;
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool IsActiveNode => _isActiveNode;
|
||||
|
||||
/// <summary>
|
||||
/// Collect the current health report for the site and reset interval counters.
|
||||
/// Connection statuses and tag resolution counts are NOT reset (they reflect current state).
|
||||
/// Script errors, alarm errors, and dead letters ARE reset (they are per-interval counts).
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
public SiteHealthReport CollectReport(string siteId)
|
||||
{
|
||||
// Atomically read and reset the counters
|
||||
|
||||
Reference in New Issue
Block a user