Example #1
0
        /// <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);
        }