Skip to content

Commit

Permalink
Avoid DoScan() loop in DiagnosticsNodeManager.OnReadDiagnosticsArray(…
Browse files Browse the repository at this point in the history
…) . Fixes #1258 (#1270)
  • Loading branch information
AlinMoldovean committed Feb 3, 2021
1 parent 9ce1c33 commit c14d84c
Showing 1 changed file with 36 additions and 7 deletions.
43 changes: 36 additions & 7 deletions Libraries/Opc.Ua.Server/Diagnostics/DiagnosticsNodeManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1182,17 +1182,46 @@ private bool UpdateServerDiagnosticsSummary()

if (DateTime.UtcNow < m_lastDiagnosticsScanTime.AddSeconds(1))
{
// diagnostic nodes already scanned.
return ServiceResult.Good;
}

DoScan(true);
if (node.NodeId == VariableIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionDiagnosticsArray)
{
// read session diagnostics.
SessionDiagnosticsDataType[] sessionArray = new SessionDiagnosticsDataType[m_sessions.Count];

for (int ii = 0; ii < m_sessions.Count; ii++)
{
SessionDiagnosticsData diagnostics = m_sessions[ii];
UpdateSessionDiagnostics(diagnostics, sessionArray, ii);
}

value = sessionArray;
}
else if (node.NodeId == VariableIds.Server_ServerDiagnostics_SessionsDiagnosticsSummary_SessionSecurityDiagnosticsArray)
{
// read session security diagnostics.
SessionSecurityDiagnosticsDataType[] sessionSecurityArray = new SessionSecurityDiagnosticsDataType[m_sessions.Count];

// pull the value out of the node which was updated by the scan operation.
BaseVariableState variable = node as BaseVariableState;
for (int ii = 0; ii < m_sessions.Count; ii++)
{
UpdateSessionSecurityDiagnostics(m_sessions[ii], sessionSecurityArray, ii);
}

if (variable != null)
value = sessionSecurityArray;
}
else if (node.NodeId == VariableIds.Server_ServerDiagnostics_SubscriptionDiagnosticsArray)
{
value = variable.Value;
// read subscription diagnostics.
SubscriptionDiagnosticsDataType[] subscriptionArray = new SubscriptionDiagnosticsDataType[m_subscriptions.Count];

for (int ii = 0; ii < m_subscriptions.Count; ii++)
{
UpdateSubscriptionDiagnostics(m_subscriptions[ii], subscriptionArray, ii);
}

value = subscriptionArray;
}

return ServiceResult.Good;
Expand Down Expand Up @@ -1252,7 +1281,7 @@ private void DoScan(object alwaysUpdateArrays)

if (UpdateSessionSecurityDiagnostics(diagnostics, sessionSecurityArray, ii))
{
sessionsChanged = true;
sessionsSecurityChanged = true;
}
}

Expand All @@ -1276,7 +1305,7 @@ private void DoScan(object alwaysUpdateArrays)

if (UpdateSubscriptionDiagnostics(diagnostics, subscriptionArray, ii))
{
sessionsChanged = true;
subscriptionsChanged = true;
}
}

Expand Down

0 comments on commit c14d84c

Please sign in to comment.