From 3b8dc03810879e31c137d827e0b230b9b7af77de Mon Sep 17 00:00:00 2001 From: wiktork Date: Wed, 15 Mar 2023 09:42:08 -0700 Subject: [PATCH] Refactor registration to artifact operation --- .../Controllers/DiagController.cs | 6 ------ .../CollectionRules/Actions/CollectTraceAction.cs | 3 --- src/Tools/dotnet-monitor/Logs/LogsOperation.cs | 4 ++-- src/Tools/dotnet-monitor/Logs/LogsOperationFactory.cs | 6 ++++-- src/Tools/dotnet-monitor/Metrics/MetricsOperation.cs | 4 ++-- .../dotnet-monitor/Metrics/MetricsOperationFactory.cs | 6 ++++-- src/Tools/dotnet-monitor/PipelineArtifactOperation.cs | 10 +++++++++- .../dotnet-monitor/Trace/AbstractTraceOperation.cs | 4 ++-- src/Tools/dotnet-monitor/Trace/TraceOperation.cs | 4 ++-- .../dotnet-monitor/Trace/TraceOperationFactory.cs | 8 +++++--- .../dotnet-monitor/Trace/TraceUntilEventOperation.cs | 3 ++- 11 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/Microsoft.Diagnostics.Monitoring.WebApi/Controllers/DiagController.cs b/src/Microsoft.Diagnostics.Monitoring.WebApi/Controllers/DiagController.cs index 5b17611c6a6..564c93d94bc 100644 --- a/src/Microsoft.Diagnostics.Monitoring.WebApi/Controllers/DiagController.cs +++ b/src/Microsoft.Diagnostics.Monitoring.WebApi/Controllers/DiagController.cs @@ -642,12 +642,6 @@ private Task StartTrace( configuration, duration); - if (_diagnosticPortOptions.Value.ConnectionMode == DiagnosticPortConnectionMode.Listen) - { - IDisposable operationRegistration = _operationTrackerService.Register(processInfo.EndpointInfo); - HttpContext.Response.RegisterForDispose(operationRegistration); - } - return Result( Utilities.ArtifactType_Trace, egressProvider, diff --git a/src/Tools/dotnet-monitor/CollectionRules/Actions/CollectTraceAction.cs b/src/Tools/dotnet-monitor/CollectionRules/Actions/CollectTraceAction.cs index cfe51e83b74..627ae4b52de 100644 --- a/src/Tools/dotnet-monitor/CollectionRules/Actions/CollectTraceAction.cs +++ b/src/Tools/dotnet-monitor/CollectionRules/Actions/CollectTraceAction.cs @@ -45,14 +45,12 @@ private sealed class CollectTraceAction : { private readonly IServiceProvider _serviceProvider; private readonly IOptionsMonitor _counterOptions; - private readonly OperationTrackerService _operationTrackerService; public CollectTraceAction(IServiceProvider serviceProvider, IEndpointInfo endpointInfo, CollectTraceOptions options) : base(endpointInfo, options) { _serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider)); _counterOptions = _serviceProvider.GetRequiredService>(); - _operationTrackerService = _serviceProvider.GetRequiredService(); } protected override async Task ExecuteCoreAsync( @@ -109,7 +107,6 @@ protected override async Task ExecuteCoreAsync( EgressOperation egressOperation = new EgressOperation( async (outputStream, token) => { - using IDisposable operationRegistration = _operationTrackerService.Register(EndpointInfo); await operation.ExecuteAsync(outputStream, startCompletionSource, token); }, egressProvider, diff --git a/src/Tools/dotnet-monitor/Logs/LogsOperation.cs b/src/Tools/dotnet-monitor/Logs/LogsOperation.cs index 204015d6846..7e26198b1a7 100644 --- a/src/Tools/dotnet-monitor/Logs/LogsOperation.cs +++ b/src/Tools/dotnet-monitor/Logs/LogsOperation.cs @@ -19,8 +19,8 @@ internal sealed class LogsOperation : PipelineArtifactOperation _logger; - public LogsOperationFactory(ILogger logger) + public LogsOperationFactory(OperationTrackerService operationTrackerService, ILogger logger) { + _operationTrackerService = operationTrackerService; _logger = logger; } public IArtifactOperation Create(IEndpointInfo endpointInfo, EventLogsPipelineSettings settings, LogFormat format) { - return new LogsOperation(endpointInfo, settings, format, _logger); + return new LogsOperation(endpointInfo, settings, format, _operationTrackerService, _logger); } } } diff --git a/src/Tools/dotnet-monitor/Metrics/MetricsOperation.cs b/src/Tools/dotnet-monitor/Metrics/MetricsOperation.cs index 7242c00f36c..a5d2fc6749d 100644 --- a/src/Tools/dotnet-monitor/Metrics/MetricsOperation.cs +++ b/src/Tools/dotnet-monitor/Metrics/MetricsOperation.cs @@ -17,8 +17,8 @@ internal sealed class MetricsOperation : PipelineArtifactOperation _logger; - public MetricsOperationFactory(ILogger logger) + public MetricsOperationFactory(OperationTrackerService operationTrackerService, ILogger logger) { + _operationTrackerService = operationTrackerService; _logger = logger; } public IArtifactOperation Create(IEndpointInfo endpointInfo, MetricsPipelineSettings settings) { - return new MetricsOperation(endpointInfo, settings, _logger); + return new MetricsOperation(endpointInfo, settings, _operationTrackerService, _logger); } } } diff --git a/src/Tools/dotnet-monitor/PipelineArtifactOperation.cs b/src/Tools/dotnet-monitor/PipelineArtifactOperation.cs index b9d199ff81b..8691ca9467c 100644 --- a/src/Tools/dotnet-monitor/PipelineArtifactOperation.cs +++ b/src/Tools/dotnet-monitor/PipelineArtifactOperation.cs @@ -19,13 +19,17 @@ internal abstract class PipelineArtifactOperation : private Func _stopFunc; - protected PipelineArtifactOperation(ILogger logger, string artifactType, IEndpointInfo endpointInfo, bool isStoppable = true) + protected OperationTrackerService OperationTrackerService { get; } + + protected PipelineArtifactOperation(OperationTrackerService trackerService, ILogger logger, string artifactType, IEndpointInfo endpointInfo, bool isStoppable = true, bool register = false) { _artifactType = artifactType; + OperationTrackerService = trackerService; Logger = logger; EndpointInfo = endpointInfo; IsStoppable = isStoppable; + Register = register; } public async Task ExecuteAsync(Stream outputStream, TaskCompletionSource startCompletionSource, CancellationToken token) @@ -34,6 +38,8 @@ public async Task ExecuteAsync(Stream outputStream, TaskCompletionSource _stopFunc = pipeline.StopAsync; + using IDisposable trackerRegistration = Register ? OperationTrackerService.Register(EndpointInfo) : null; + Task runTask = await StartPipelineAsync(pipeline, token); Logger.StartCollectArtifact(_artifactType); @@ -65,6 +71,8 @@ public async Task StopAsync(CancellationToken token) public bool IsStoppable { get; } + public bool Register { get; } + protected abstract T CreatePipeline(Stream outputStream); /// diff --git a/src/Tools/dotnet-monitor/Trace/AbstractTraceOperation.cs b/src/Tools/dotnet-monitor/Trace/AbstractTraceOperation.cs index 500f2c7a433..f737181c4f2 100644 --- a/src/Tools/dotnet-monitor/Trace/AbstractTraceOperation.cs +++ b/src/Tools/dotnet-monitor/Trace/AbstractTraceOperation.cs @@ -16,8 +16,8 @@ internal abstract class AbstractTraceOperation : PipelineArtifactOperation _eventStreamAvailableCompletionSource = new(TaskCreationOptions.RunContinuationsAsynchronously); - public TraceOperation(IEndpointInfo endpointInfo, EventTracePipelineSettings settings, ILogger logger) - : base(endpointInfo, settings, logger) { } + public TraceOperation(IEndpointInfo endpointInfo, EventTracePipelineSettings settings, OperationTrackerService trackerService, ILogger logger) + : base(endpointInfo, settings, trackerService, logger) { } protected override EventTracePipeline CreatePipeline(Stream outputStream) { diff --git a/src/Tools/dotnet-monitor/Trace/TraceOperationFactory.cs b/src/Tools/dotnet-monitor/Trace/TraceOperationFactory.cs index 3a7a58f04a1..216b5faa135 100644 --- a/src/Tools/dotnet-monitor/Trace/TraceOperationFactory.cs +++ b/src/Tools/dotnet-monitor/Trace/TraceOperationFactory.cs @@ -11,10 +11,12 @@ namespace Microsoft.Diagnostics.Tools.Monitor { internal sealed class TraceOperationFactory : ITraceOperationFactory { + private readonly OperationTrackerService _operationTrackerService; private readonly ILogger _logger; - public TraceOperationFactory(ILogger logger) + public TraceOperationFactory(OperationTrackerService operationTrackerService, ILogger logger) { + _operationTrackerService = operationTrackerService; _logger = logger; } @@ -26,7 +28,7 @@ public IArtifactOperation Create(IEndpointInfo endpointInfo, MonitoringSourceCon Duration = duration }; - return new TraceOperation(endpointInfo, settings, _logger); + return new TraceOperation(endpointInfo, settings, _operationTrackerService, _logger); } public IArtifactOperation Create(IEndpointInfo endpointInfo, MonitoringSourceConfiguration configuration, TimeSpan duration, string providerName, string eventName, IDictionary payloadFilter) @@ -37,7 +39,7 @@ public IArtifactOperation Create(IEndpointInfo endpointInfo, MonitoringSourceCon Duration = duration }; - return new TraceUntilEventOperation(endpointInfo, settings, providerName, eventName, payloadFilter, _logger); + return new TraceUntilEventOperation(endpointInfo, settings, providerName, eventName, payloadFilter, _operationTrackerService, _logger); } } } diff --git a/src/Tools/dotnet-monitor/Trace/TraceUntilEventOperation.cs b/src/Tools/dotnet-monitor/Trace/TraceUntilEventOperation.cs index dc7f70211bd..5950d62e3f1 100644 --- a/src/Tools/dotnet-monitor/Trace/TraceUntilEventOperation.cs +++ b/src/Tools/dotnet-monitor/Trace/TraceUntilEventOperation.cs @@ -27,8 +27,9 @@ public TraceUntilEventOperation( string providerName, string eventName, IDictionary payloadFilter, + OperationTrackerService trackerService, ILogger logger) - : base(endpointInfo, settings, logger) + : base(endpointInfo, settings, trackerService, logger) { _providerName = providerName; _eventName = eventName;