/// <summary> /// Create an api model from service model ignoring the password /// </summary> public static PublishNodesEndpointApiModel ToApiModel( this EndpointDiagnosticModel endpoint) { if (endpoint == null) { return(null); } return(new PublishNodesEndpointApiModel { EndpointUrl = endpoint.EndpointUrl.OriginalString, UseSecurity = endpoint.UseSecurity, OpcAuthenticationMode = (AuthenticationMode)endpoint.OpcAuthenticationMode, UserName = endpoint.OpcAuthenticationUsername, DataSetWriterGroup = endpoint.DataSetWriterGroup, }); }
/// <inheritdoc/> public JobDiagnosticInfoModel GetDiagnosticInfo() { var totalSeconds = (DateTime.UtcNow - _diagnosticStart).TotalSeconds; double totalDuration = _diagnosticStart != DateTime.MinValue ? totalSeconds : 0; double chunkSizeAverage = _messageEncoder.AvgMessageSize / (4 * 1024); double sentMessagesPerSec = totalDuration > 0 ? _messageSink.SentMessagesCount / totalDuration : 0; double estimatedMsgChunksPerDay = Math.Ceiling(chunkSizeAverage) * sentMessagesPerSec * 60 * 60 * 24; var diagnosticInfo = new JobDiagnosticInfoModel(); var endpointDiagnosticInfo = new EndpointDiagnosticModel(); endpointDiagnosticInfo.EndpointUrl = _messageTrigger.EndpointUrl; endpointDiagnosticInfo.DataSetWriterGroup = _messageTrigger.DataSetWriterGroup; endpointDiagnosticInfo.UseSecurity = _messageTrigger.UseSecurity; endpointDiagnosticInfo.OpcAuthenticationMode = (AuthMode)_messageTrigger.AuthenticationMode; endpointDiagnosticInfo.OpcAuthenticationUsername = _messageTrigger.AuthenticationUsername; diagnosticInfo.Endpoint = endpointDiagnosticInfo; diagnosticInfo.Id = Name; diagnosticInfo.SentMessagesPerSec = sentMessagesPerSec; diagnosticInfo.IngestionDuration = TimeSpan.FromSeconds(totalDuration); diagnosticInfo.IngressDataChanges = _messageTrigger.DataChangesCount; diagnosticInfo.IngressValueChanges = _messageTrigger.ValueChangesCount; diagnosticInfo.IngressBatchBlockBufferSize = _batchDataSetMessageBlock.OutputCount; diagnosticInfo.EncodingBlockInputSize = _encodingBlock.InputCount; diagnosticInfo.EncodingBlockOutputSize = _encodingBlock.OutputCount; diagnosticInfo.EncoderNotificationsProcessed = _messageEncoder.NotificationsProcessedCount; diagnosticInfo.EncoderNotificationsDropped = _messageEncoder.NotificationsDroppedCount; diagnosticInfo.EncoderIoTMessagesProcessed = _messageEncoder.MessagesProcessedCount; diagnosticInfo.EncoderAvgNotificationsMessage = _messageEncoder.AvgNotificationsPerMessage; diagnosticInfo.EncoderAvgIoTMessageBodySize = _messageEncoder.AvgMessageSize; diagnosticInfo.EncoderAvgIoTChunkUsage = chunkSizeAverage; diagnosticInfo.EstimatedIoTChunksPerDay = estimatedMsgChunksPerDay; diagnosticInfo.OutgressBatchBlockBufferSize = _batchNetworkMessageBlock.OutputCount; diagnosticInfo.OutgressInputBufferCount = _sinkBlock.InputCount; diagnosticInfo.OutgressInputBufferDropped = _sinkBlockInputDroppedCount; diagnosticInfo.OutgressIoTMessageCount = _messageSink.SentMessagesCount; diagnosticInfo.ConnectionRetries = _messageTrigger.NumberOfConnectionRetries; diagnosticInfo.OpcEndpointConnected = _messageTrigger.IsConnectionOk; diagnosticInfo.MonitoredOpcNodesSucceededCount = _messageTrigger.NumberOfGoodNodes; diagnosticInfo.MonitoredOpcNodesFailedCount = _messageTrigger.NumberOfBadNodes; return(diagnosticInfo); }