예제 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="PipelineDiagnostics"/> class.
        /// </summary>
        /// <param name="pipelineDiagnosticsInternal">Internal pipeline diagnostics.</param>
        /// <param name="includeStoppedPipelines">Whether to include stopped pipelines.</param>
        /// <param name="includeStoppedPipelineElements">Whether to include stopped pipeline elements.</param>
        internal PipelineDiagnostics(PipelineDiagnosticsInternal pipelineDiagnosticsInternal, bool includeStoppedPipelines, bool includeStoppedPipelineElements)
        {
            // This is the constructor used when creating a summary snapshot to be posted.
            // The Builder is used to construct one-and-only-one instance of each part of the
            // graph and to initialize circular references (via delayed thunks).
            var builder = new Builder();

            this.Initialize(pipelineDiagnosticsInternal, null, builder, includeStoppedPipelines, includeStoppedPipelineElements);
            builder.InvokeThunks();
        }
예제 #2
0
        /// <summary>
        /// Pipeline creation.
        /// </summary>
        /// <remarks>Called upon pipeline construction.</remarks>
        /// <param name="pipeline">Pipeline being created.</param>
        public void PipelineCreate(Pipeline pipeline)
        {
            var graph = new PipelineDiagnosticsInternal(pipeline.Id, pipeline.Name);

            if (!this.graphs.TryAdd(pipeline.Id, graph))
            {
                throw new InvalidOperationException("Failed to add created graph");
            }

            if (this.CurrentRoot == null && !(pipeline is Subpipeline))
            {
                this.CurrentRoot = graph;
            }
        }
예제 #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PipelineDiagnostics"/> class.
 /// </summary>
 /// <param name="pipelineDiagnosticsInternal">Internal pipeline diagnostics.</param>
 /// <param name="parent">Parent pipeline diagnostics to this pipeline diagnostics.</param>
 /// <param name="builder">Builder of pipeline parts used during construction.</param>
 /// <param name="includeStoppedPipelines">Whether to include stopped pipelines.</param>
 /// <param name="includeStoppedPipelineElements">Whether to include stopped pipeline element .</param>
 private void Initialize(PipelineDiagnosticsInternal pipelineDiagnosticsInternal, PipelineDiagnostics parent, Builder builder, bool includeStoppedPipelines, bool includeStoppedPipelineElements)
 {
     this.Id   = pipelineDiagnosticsInternal.Id;
     this.Name = pipelineDiagnosticsInternal.Name;
     this.IsPipelineRunning         = pipelineDiagnosticsInternal.IsPipelineRunning;
     this.ParentPipelineDiagnostics = parent;
     this.SubpipelineDiagnostics    =
         pipelineDiagnosticsInternal.Subpipelines.Values
         .Where(s => includeStoppedPipelines || s.IsPipelineRunning)
         .Select(s => builder.GetOrCreatePipelineDiagnostics(s, this, includeStoppedPipelines, includeStoppedPipelineElements))
         .ToArray();
     this.PipelineElements =
         pipelineDiagnosticsInternal.PipelineElements.Values
         .Where(pe => includeStoppedPipelineElements || (pe.IsRunning && (pe.RepresentsSubpipeline == null || pe.RepresentsSubpipeline.IsPipelineRunning)))
         .Select(pe => builder.GetOrCreatePipelineElementDiagnostics(pe))
         .ToArray();
 }
예제 #4
0
 /// <summary>
 /// Get or create external pipeline diagnostics representation.
 /// </summary>
 /// <param name="pipelineDiagnosticsInternal">Internal pipeline diagnostics representation.</param>
 /// <param name="parentPipelineDiagnostics">Parent pipeline diagnostics.</param>
 /// <param name="includeStoppedPipelines">Whether to include stopped pipelines.</param>
 /// <param name="includeStoppedPipelineElements">Whether to include stopped pipeline element .</param>
 /// <returns>External pipeline diagnostics representation.</returns>
 public PipelineDiagnostics GetOrCreatePipelineDiagnostics(PipelineDiagnosticsInternal pipelineDiagnosticsInternal, PipelineDiagnostics parentPipelineDiagnostics, bool includeStoppedPipelines, bool includeStoppedPipelineElements)
 {
     return(this.GetOrCreate(this.Pipelines, pipelineDiagnosticsInternal, p => p.Id, (p, c) => new PipelineDiagnostics(p, parentPipelineDiagnostics, c, includeStoppedPipelines, includeStoppedPipelineElements)));
 }
예제 #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="PipelineDiagnostics"/> class.
 /// </summary>
 /// <param name="pipelineDiagnosticsInternal">Internal pipeline diagnostics.</param>
 /// <param name="parent">Parent pipeline diagnostics to this pipeline diagnostics.</param>
 /// <param name="builder">Builder of pipeline parts used during construction.</param>
 /// <param name="includeStoppedPipelines">Whether to include stopped pipelines.</param>
 /// <param name="includeStoppedPipelineElements">Whether to include stopped pipeline elements.</param>
 private PipelineDiagnostics(PipelineDiagnosticsInternal pipelineDiagnosticsInternal, PipelineDiagnostics parent, Builder builder, bool includeStoppedPipelines, bool includeStoppedPipelineElements)
 {
     this.Initialize(pipelineDiagnosticsInternal, parent, builder, includeStoppedPipelines, includeStoppedPipelineElements);
 }