public DerivedStreamContainerTreeNode AddDerivedReceiverDiagnosticsChildren()

in Sources/Visualization/Microsoft.Psi.Visualization.Windows/ViewModels/PipelineDiagnosticsStreamTreeNode.cs [39:230]


        public DerivedStreamContainerTreeNode AddDerivedReceiverDiagnosticsChildren(int receiverId)
        {
            var receiverDiagnostics = this.InternalChildren.FirstOrDefault(c => c.Name == "ReceiverDiagnostics");
            if (receiverDiagnostics == null)
            {
                receiverDiagnostics = new DerivedStreamContainerTreeNode(this.PartitionViewModel, $"{this.Path}.ReceiverDiagnostics", "ReceiverDiagnostics");

                // Insert the child into the existing list, before all non-member sub-streams, and in alphabetical order
                var lastOrDefault = this.InternalChildren.LastOrDefault(stn => string.Compare(stn.Name, "0") < 0 && stn is StreamTreeNode);
                var index = lastOrDefault != null ? this.InternalChildren.IndexOf(lastOrDefault) + 1 : 0;
                this.InternalChildren.Insert(index, receiverDiagnostics);
            }

            if (receiverDiagnostics.Children.FirstOrDefault(c => c.Name == $"{receiverId}") is not DerivedStreamContainerTreeNode receiverContainer)
            {
                receiverContainer = new DerivedStreamContainerTreeNode(this.PartitionViewModel, $"{this.Path}.ReceiverDiagnostics.{receiverId}", $"{receiverId}");
                receiverDiagnostics.AddChildTreeNode(receiverContainer);

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgMessageEmittedLatency)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgMessageEmittedLatency),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.AvgMessageEmittedLatency));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgMessageCreatedLatency)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgMessageCreatedLatency),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.AvgMessageCreatedLatency));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgMessageProcessTime)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgMessageProcessTime),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.AvgMessageProcessTime));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgMessageReceivedLatency)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgMessageReceivedLatency),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.AvgMessageReceivedLatency));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgMessageSize)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgMessageSize),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.AvgMessageSize));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgDeliveryQueueSize)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.AvgDeliveryQueueSize),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.AvgDeliveryQueueSize));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.LastMessageEmittedLatency)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.LastMessageEmittedLatency),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.LastMessageEmittedLatency));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.LastMessageCreatedLatency)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.LastMessageCreatedLatency),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.LastMessageCreatedLatency));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.LastMessageProcessTime)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.LastMessageProcessTime),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.LastMessageProcessTime));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.LastMessageReceivedLatency)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.LastMessageReceivedLatency),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.LastMessageReceivedLatency));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.LastMessageSize)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.LastMessageSize),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.LastMessageSize));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<double>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.LastDeliveryQueueSize)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.LastDeliveryQueueSize),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.LastDeliveryQueueSize));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<bool>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.ReceiverIsThrottled)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.ReceiverIsThrottled),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.ReceiverIsThrottled));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<int>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.TotalMessageDroppedCount)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.TotalMessageDroppedCount),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.TotalMessageDroppedCount));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<int>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.TotalMessageEmittedCount)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.TotalMessageEmittedCount),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.TotalMessageEmittedCount));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<int>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.TotalMessageProcessedCount)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.TotalMessageProcessedCount),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.TotalMessageProcessedCount));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<int>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.WindowMessageDroppedCount)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.WindowMessageDroppedCount),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.WindowMessageDroppedCount));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<int>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.WindowMessageEmittedCount)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.WindowMessageEmittedCount),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.WindowMessageEmittedCount));

                receiverContainer.AddChildTreeNode(
                    new DerivedReceiverDiagnosticsStreamTreeNode<int>(
                        this.PartitionViewModel,
                        $"{this.Path}.ReceiverDiagnostics.{receiverId}.{nameof(PipelineDiagnostics.ReceiverDiagnostics.WindowMessageProcessedCount)}",
                        nameof(PipelineDiagnostics.ReceiverDiagnostics.WindowMessageProcessedCount),
                        this.SourceStreamMetadata,
                        receiverId,
                        pd => pd.WindowMessageProcessedCount));
            }

            return receiverContainer;
        }