/// <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(); }
/// <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; } }
/// <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(); }
/// <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))); }
/// <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); }