Skip to content

Commit 0792faf

Browse files
committed
Use separate trigger descriptor types
1 parent 65f601a commit 0792faf

File tree

10 files changed

+72
-56
lines changed

10 files changed

+72
-56
lines changed

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRules/Triggers/ManualTrigger.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using Microsoft.Diagnostics.Monitoring.WebApi;
5+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
56
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Triggers;
67
using System;
78
using System.Threading;
@@ -59,6 +60,13 @@ private void NotifyHandler(object sender, EventArgs args)
5960
}
6061
}
6162

63+
internal sealed class ManualTriggerDescriptor : ICollectionRuleTriggerDescriptor
64+
{
65+
public string TriggerName => ManualTrigger.TriggerName;
66+
public Type FactoryType => typeof(ManualTriggerFactory);
67+
public Type OptionsType => null;
68+
}
69+
6270
internal sealed class ManualTriggerService
6371
{
6472
public event EventHandler NotifyStarted;

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/CollectionRules/Triggers/TriggersServiceCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ internal static class TriggersServiceCollectionExtensions
1111
public static IServiceCollection RegisterManualTrigger(this IServiceCollection services, ManualTriggerService service)
1212
{
1313
services.AddSingleton(service);
14-
return services.RegisterCollectionRuleTrigger<ManualTriggerFactory>(ManualTrigger.TriggerName);
14+
return services.RegisterCollectionRuleTrigger<ManualTriggerFactory, ManualTriggerDescriptor>();
1515
}
1616
}
1717
}

src/Tools/dotnet-monitor/CollectionRules/Configuration/CollectionRuleTriggerDescriptor.cs

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/Tools/dotnet-monitor/CollectionRules/Triggers/AspNetRequestCountTriggerFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Diagnostics.Monitoring.EventPipe.Triggers.AspNet;
77
using Microsoft.Diagnostics.Monitoring.WebApi;
88
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Triggers;
9+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
910
using System;
1011
using System.Globalization;
1112

@@ -44,4 +45,11 @@ public ICollectionRuleTrigger Create(IEndpointInfo endpointInfo, Action callback
4445
return EventPipeTriggerFactory.Create(endpointInfo, aspnetTriggerSourceConfiguration, _traceEventTriggerFactory, settings, callback);
4546
}
4647
}
48+
49+
internal sealed class AspNetRequestCountTriggerDescriptor : ICollectionRuleTriggerDescriptor
50+
{
51+
public Type FactoryType => typeof(AspNetRequestCountTriggerFactory);
52+
public Type? OptionsType => typeof(AspNetRequestCountOptions);
53+
public string TriggerName => KnownCollectionRuleTriggers.AspNetRequestCount;
54+
}
4755
}

src/Tools/dotnet-monitor/CollectionRules/Triggers/AspNetRequestDurationTriggerFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Diagnostics.Monitoring.EventPipe.Triggers.AspNet;
77
using Microsoft.Diagnostics.Monitoring.WebApi;
88
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Triggers;
9+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
910
using Microsoft.Extensions.Options;
1011
using System;
1112
using System.Globalization;
@@ -50,4 +51,11 @@ public ICollectionRuleTrigger Create(IEndpointInfo endpointInfo, Action callback
5051
return EventPipeTriggerFactory.Create(endpointInfo, aspnetTriggerSourceConfiguration, _traceEventTriggerFactory, settings, callback);
5152
}
5253
}
54+
55+
internal sealed class AspNetRequestDurationTriggerDescriptor : ICollectionRuleTriggerDescriptor
56+
{
57+
public Type FactoryType => typeof(AspNetRequestDurationTriggerFactory);
58+
public Type? OptionsType => typeof(AspNetRequestDurationOptions);
59+
public string TriggerName => KnownCollectionRuleTriggers.AspNetRequestDuration;
60+
}
5361
}

src/Tools/dotnet-monitor/CollectionRules/Triggers/AspNetResponseStatusTriggerFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Diagnostics.Monitoring.EventPipe.Triggers.AspNet;
77
using Microsoft.Diagnostics.Monitoring.WebApi;
88
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Triggers;
9+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
910
using System;
1011
using System.Globalization;
1112
using System.Linq;
@@ -59,4 +60,11 @@ private static StatusCodeRange ParseRange(string range)
5960
return new StatusCodeRange(min, max);
6061
}
6162
}
63+
64+
internal sealed class AspNetResponseStatusTriggerDescriptor : ICollectionRuleTriggerDescriptor
65+
{
66+
public Type FactoryType => typeof(AspNetResponseStatusTriggerFactory);
67+
public Type? OptionsType => typeof(AspNetResponseStatusOptions);
68+
public string TriggerName => KnownCollectionRuleTriggers.AspNetResponseStatus;
69+
}
6270
}

src/Tools/dotnet-monitor/CollectionRules/Triggers/EventCounterTriggerFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using Microsoft.Diagnostics.Monitoring.WebApi;
77
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Triggers;
88
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Triggers.EventCounterShortcuts;
9+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
910
using Microsoft.Extensions.Options;
1011
using System;
1112

@@ -109,4 +110,11 @@ internal static EventCounterOptions ToEventCounterOptions(IEventCounterShortcuts
109110
};
110111
}
111112
}
113+
114+
internal sealed class EventCounterTriggerDescriptor : ICollectionRuleTriggerDescriptor
115+
{
116+
public Type FactoryType => typeof(EventCounterTriggerFactory);
117+
public Type? OptionsType => typeof(EventCounterOptions);
118+
public string TriggerName => KnownCollectionRuleTriggers.EventCounter;
119+
}
112120
}

src/Tools/dotnet-monitor/CollectionRules/Triggers/EventMeterTriggerFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.Diagnostics.Monitoring.EventPipe.Triggers.SystemDiagnosticsMetrics;
66
using Microsoft.Diagnostics.Monitoring.WebApi;
77
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Triggers;
8+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
89
using Microsoft.Extensions.Options;
910
using System;
1011

@@ -55,4 +56,11 @@ public ICollectionRuleTrigger Create(IEndpointInfo endpointInfo, Action callback
5556
callback);
5657
}
5758
}
59+
60+
internal sealed class EventMeterTriggerDescriptor : ICollectionRuleTriggerDescriptor
61+
{
62+
public Type FactoryType => typeof(EventMeterTriggerFactory);
63+
public Type? OptionsType => typeof(EventMeterOptions);
64+
public string TriggerName => KnownCollectionRuleTriggers.EventMeter;
65+
}
5866
}

src/Tools/dotnet-monitor/CollectionRules/Triggers/StartupTriggerFactory.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using Microsoft.Diagnostics.Monitoring.WebApi;
5+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
56
using System;
67

78
namespace Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Triggers
@@ -18,4 +19,11 @@ public ICollectionRuleTrigger Create(IEndpointInfo endpointInfo, Action callback
1819
return new StartupTrigger(callback);
1920
}
2021
}
22+
23+
internal sealed class StartupTriggerDescriptor : ICollectionRuleTriggerDescriptor
24+
{
25+
public Type FactoryType => typeof(StartupTriggerFactory);
26+
public Type? OptionsType => null;
27+
public string TriggerName => KnownCollectionRuleTriggers.Startup;
28+
}
2129
}

src/Tools/dotnet-monitor/ServiceCollectionExtensions.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -152,15 +152,15 @@ public static IServiceCollection ConfigureCollectionRules(this IServiceCollectio
152152
services.RegisterCollectionRuleAction<SetEnvironmentVariableActionFactory, SetEnvironmentVariableOptions, SetEnvironmentVariableActionDescriptor>();
153153
services.RegisterCollectionRuleAction<GetEnvironmentVariableActionFactory, GetEnvironmentVariableOptions, GetEnvironmentVariableActionDescriptor>();
154154

155-
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.AspNetRequestCountTriggerFactory, AspNetRequestCountOptions>(KnownCollectionRuleTriggers.AspNetRequestCount);
156-
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.AspNetRequestDurationTriggerFactory, AspNetRequestDurationOptions>(KnownCollectionRuleTriggers.AspNetRequestDuration);
157-
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.AspNetResponseStatusTriggerFactory, AspNetResponseStatusOptions>(KnownCollectionRuleTriggers.AspNetResponseStatus);
158-
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.EventCounterTriggerFactory, EventCounterOptions>(KnownCollectionRuleTriggers.EventCounter);
159-
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.EventCounterTriggerFactory, CPUUsageOptions>(KnownCollectionRuleTriggers.CPUUsage);
160-
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.EventCounterTriggerFactory, GCHeapSizeOptions>(KnownCollectionRuleTriggers.GCHeapSize);
161-
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.EventCounterTriggerFactory, ThreadpoolQueueLengthOptions>(KnownCollectionRuleTriggers.ThreadpoolQueueLength);
162-
services.RegisterCollectionRuleTrigger<StartupTriggerFactory>(KnownCollectionRuleTriggers.Startup);
163-
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.EventMeterTriggerFactory, EventMeterOptions>(KnownCollectionRuleTriggers.EventMeter);
155+
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.AspNetRequestCountTriggerFactory, AspNetRequestCountOptions, CollectionRules.Triggers.AspNetRequestCountTriggerDescriptor>();
156+
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.AspNetRequestDurationTriggerFactory, AspNetRequestDurationOptions, CollectionRules.Triggers.AspNetRequestDurationTriggerDescriptor>();
157+
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.AspNetResponseStatusTriggerFactory, AspNetResponseStatusOptions, CollectionRules.Triggers.AspNetResponseStatusTriggerDescriptor>();
158+
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.EventCounterTriggerFactory, EventCounterOptions, CollectionRules.Triggers.EventCounterTriggerDescriptor>();
159+
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.EventCounterTriggerFactory, CPUUsageOptions, CollectionRules.Triggers.EventCounterTriggerDescriptor>();
160+
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.EventCounterTriggerFactory, GCHeapSizeOptions, CollectionRules.Triggers.EventCounterTriggerDescriptor>();
161+
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.EventCounterTriggerFactory, ThreadpoolQueueLengthOptions, CollectionRules.Triggers.EventCounterTriggerDescriptor>();
162+
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.StartupTriggerFactory, CollectionRules.Triggers.StartupTriggerDescriptor>();
163+
services.RegisterCollectionRuleTrigger<CollectionRules.Triggers.EventMeterTriggerFactory, EventMeterOptions, CollectionRules.Triggers.EventMeterTriggerDescriptor>();
164164

165165
services.AddSingleton<EventPipeTriggerFactory>();
166166
services.AddSingleton<ITraceEventTriggerFactory<EventCounterTriggerSettings>, Monitoring.EventPipe.Triggers.EventCounter.EventCounterTriggerFactory>();
@@ -210,24 +210,24 @@ public static IServiceCollection RegisterCollectionRuleAction<TFactory, TOptions
210210
return services;
211211
}
212212

213-
public static IServiceCollection RegisterCollectionRuleTrigger<TFactory>(this IServiceCollection services, string triggerName)
213+
public static IServiceCollection RegisterCollectionRuleTrigger<TFactory, TDescriptor>(this IServiceCollection services)
214214
where TFactory : class, ICollectionRuleTriggerFactory
215+
where TDescriptor : class, ICollectionRuleTriggerDescriptor, new()
215216
{
216217
services.AddSingleton<TFactory>();
217218
services.AddSingleton<CollectionRuleTriggerFactoryProxy<TFactory>>();
218-
services.AddSingleton<ICollectionRuleTriggerDescriptor, CollectionRuleTriggerDescriptor<TFactory>>(
219-
sp => new CollectionRuleTriggerDescriptor<TFactory>(triggerName));
219+
services.AddSingleton<ICollectionRuleTriggerDescriptor, TDescriptor>(sp => new TDescriptor());
220220
return services;
221221
}
222222

223-
public static IServiceCollection RegisterCollectionRuleTrigger<TFactory, TOptions>(this IServiceCollection services, string triggerName)
223+
public static IServiceCollection RegisterCollectionRuleTrigger<TFactory, TOptions, TDescriptor>(this IServiceCollection services)
224224
where TFactory : class, ICollectionRuleTriggerFactory<TOptions>
225225
where TOptions : class, new()
226+
where TDescriptor : class, ICollectionRuleTriggerDescriptor, new()
226227
{
227228
services.AddSingleton<TFactory>();
228229
services.AddSingleton<CollectionRuleTriggerFactoryProxy<TFactory, TOptions>>();
229-
services.AddSingleton<ICollectionRuleTriggerDescriptor, CollectionRuleTriggerProvider<TFactory, TOptions>>(
230-
sp => new CollectionRuleTriggerProvider<TFactory, TOptions>(triggerName));
230+
services.AddSingleton<ICollectionRuleTriggerDescriptor, TDescriptor>(sp => new TDescriptor());
231231
// NOTE: When opening collection rule triggers for extensibility, this should not be added for all registered triggers.
232232
// Each trigger should register its own IValidateOptions<> implementation (if it needs one).
233233
services.AddSingleton<IValidateOptions<TOptions>, DataAnnotationValidateOptions<TOptions>>();

0 commit comments

Comments
 (0)