Skip to content

Commit f448701

Browse files
committed
Merge branch 'bindingDescriptors' into validationWip
2 parents 142a8c1 + 9120678 commit f448701

36 files changed

+450
-232
lines changed

src/Tests/CollectionRuleActions.UnitTests/ActionListExecutorTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
186186
Assert.Throws<OptionsValidationException>(() => host.Services.GetRequiredService<IOptionsMonitor<CollectionRuleOptions>>().Get(DefaultRuleName));
187187
}, serviceCollection =>
188188
{
189-
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions>(nameof(PassThroughAction));
189+
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
190190
TestValidatableTypes.AddValidation(serviceCollection);
191191
});
192192
}

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTestCommon/CollectionRules/Actions/ActionsServiceCollectionExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ internal static class ActionsServiceCollectionExtensions
1414
public static IServiceCollection RegisterTestAction(this IServiceCollection services, CallbackActionService callback)
1515
{
1616
services.AddSingleton(callback);
17-
services.RegisterCollectionRuleAction<CallbackActionFactory, BaseRecordOptions>(CallbackAction.ActionName);
17+
services.RegisterCollectionRuleAction<CallbackActionFactory, BaseRecordOptions, CallbackActionDescriptor>();
1818

1919
return services;
2020
}
2121

2222
public static IServiceCollection RegisterDelayedTestAction(this IServiceCollection services, CallbackActionService callback)
2323
{
2424
services.AddSingleton(callback);
25-
services.RegisterCollectionRuleAction<DelayedCallbackActionFactory, BaseRecordOptions>(DelayedCallbackAction.ActionName);
25+
services.RegisterCollectionRuleAction<DelayedCallbackActionFactory, BaseRecordOptions, DelayedCallbackActionDescriptor>();
2626

2727
return services;
2828
}

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTestCommon/CollectionRules/Actions/CallbackAction.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33

44
using Microsoft.Diagnostics.Monitoring.WebApi;
55
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Actions;
6+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
67
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
8+
using Microsoft.Extensions.Configuration;
79
using System;
810
using System.Collections.Generic;
911
using System.Threading;
@@ -73,6 +75,20 @@ public ICollectionRuleAction Create(IProcessInfo processInfo, BaseRecordOptions
7375
}
7476
}
7577

78+
internal sealed class CallbackActionDescriptor : ICollectionRuleActionDescriptor
79+
{
80+
public string ActionName => CallbackAction.ActionName;
81+
public Type OptionsType => typeof(BaseRecordOptions);
82+
public Type FactoryType => typeof(CallbackActionFactory);
83+
84+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
85+
{
86+
BaseRecordOptions options = new();
87+
settingsSection.Bind(options);
88+
settings = options;
89+
}
90+
}
91+
7692
internal sealed class DelayedCallbackAction : ICollectionRuleAction
7793
{
7894
public const string ActionName = nameof(DelayedCallbackAction);
@@ -111,6 +127,20 @@ public Task<CollectionRuleActionResult> WaitForCompletionAsync(CancellationToken
111127
}
112128
}
113129

130+
internal sealed class DelayedCallbackActionDescriptor : ICollectionRuleActionDescriptor
131+
{
132+
public string ActionName => DelayedCallbackAction.ActionName;
133+
public Type OptionsType => typeof(BaseRecordOptions);
134+
public Type FactoryType => typeof(DelayedCallbackActionFactory);
135+
136+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
137+
{
138+
BaseRecordOptions options = new();
139+
settingsSection.Bind(options);
140+
settings = options;
141+
}
142+
}
143+
114144
internal sealed class CallbackActionService
115145
{
116146
public TimeProvider TimeProvider { get; }

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTestCommon/CollectionRules/Actions/PassThroughAction.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33

44
using Microsoft.Diagnostics.Monitoring.WebApi;
55
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Actions;
6+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
67
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
8+
using Microsoft.Extensions.Configuration;
9+
using System;
710
using System.Collections.Generic;
811
using System.Threading;
912
using System.Threading.Tasks;
@@ -53,6 +56,20 @@ public Task<CollectionRuleActionResult> WaitForCompletionAsync(CancellationToken
5356
}
5457
}
5558

59+
internal sealed class PassThroughActionDescriptor : ICollectionRuleActionDescriptor
60+
{
61+
public string ActionName => nameof(PassThroughAction);
62+
public Type OptionsType => typeof(PassThroughOptions);
63+
public Type FactoryType => typeof(PassThroughActionFactory);
64+
65+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
66+
{
67+
PassThroughOptions options = new();
68+
settingsSection.Bind(options);
69+
settings = options;
70+
}
71+
}
72+
5673
internal sealed record class PassThroughOptions : BaseRecordOptions
5774
{
5875
[ActionOptionsDependencyProperty]

src/Tests/Microsoft.Diagnostics.Monitoring.Tool.UnitTests/ActionDependencyAnalyzerTests.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
135135
Assert.Equal("Output a1input3 trail", a2output3);
136136
}, serviceCollection =>
137137
{
138-
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions>(nameof(PassThroughAction));
138+
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
139139
});
140140
}
141141

@@ -174,7 +174,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
174174

175175
}, serviceCollection =>
176176
{
177-
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions>(nameof(PassThroughAction));
177+
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
178178
});
179179
}
180180

@@ -211,7 +211,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
211211
}, serviceCollection =>
212212
{
213213
serviceCollection.AddSingleton<TimeProvider, MockTimeProvider>();
214-
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions>(nameof(PassThroughAction));
214+
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
215215
});
216216
}
217217

@@ -254,7 +254,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
254254

255255
}, serviceCollection =>
256256
{
257-
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions>(nameof(PassThroughAction));
257+
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
258258
}, loggingBuilder =>
259259
{
260260
loggingBuilder.AddProvider(new TestLoggerProvider(record));
@@ -290,7 +290,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
290290

291291
}, serviceCollection =>
292292
{
293-
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions>(nameof(PassThroughAction));
293+
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
294294
});
295295
}
296296

@@ -352,7 +352,7 @@ await TestHostHelper.CreateCollectionRulesHost(_outputHelper, rootOptions =>
352352
Assert.Equal("Output a1input3 trail", a2output3);
353353
}, serviceCollection =>
354354
{
355-
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions>(nameof(PassThroughAction));
355+
serviceCollection.RegisterCollectionRuleAction<PassThroughActionFactory, PassThroughOptions, PassThroughActionDescriptor>();
356356
});
357357
}
358358
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
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;
7+
using Microsoft.Extensions.Configuration;
68
using System;
79
using System.Threading;
810
using System.Threading.Tasks;
@@ -59,6 +61,19 @@ private void NotifyHandler(object sender, EventArgs args)
5961
}
6062
}
6163

64+
internal sealed class ManualTriggerDescriptor : ICollectionRuleTriggerDescriptor
65+
{
66+
public string TriggerName => ManualTrigger.TriggerName;
67+
public Type FactoryType => typeof(ManualTriggerFactory);
68+
public Type OptionsType => null;
69+
70+
public bool TryBindOptions(IConfigurationSection settingsSection, out object settings)
71+
{
72+
settings = null;
73+
return false;
74+
}
75+
}
76+
6277
internal sealed class ManualTriggerService
6378
{
6479
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/Actions/CollectDumpAction.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
using Microsoft.Diagnostics.Monitoring.WebApi;
66
using Microsoft.Diagnostics.Monitoring.WebApi.Models;
77
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options;
8+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
89
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
10+
using Microsoft.Extensions.Configuration;
911
using Microsoft.Extensions.DependencyInjection;
1012
using Microsoft.Extensions.Options;
1113
using System;
@@ -69,4 +71,18 @@ protected override EgressOperation CreateArtifactOperation(CollectionRuleMetadat
6971
}
7072
}
7173
}
74+
75+
internal sealed class CollectDumpActionDescriptor : ICollectionRuleActionDescriptor
76+
{
77+
public string ActionName => KnownCollectionRuleActions.CollectDump;
78+
public Type FactoryType => typeof(CollectDumpActionFactory);
79+
public Type OptionsType => typeof(CollectDumpOptions);
80+
81+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
82+
{
83+
CollectDumpOptions options = new();
84+
settingsSection.Bind(options);
85+
settings = options;
86+
}
87+
}
7288
}

src/Tools/dotnet-monitor/CollectionRules/Actions/CollectExceptionsAction.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
using Microsoft.Diagnostics.Monitoring.WebApi;
66
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options;
77
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
8+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
89
using Microsoft.Extensions.DependencyInjection;
910
using Microsoft.Extensions.Options;
11+
using Microsoft.Extensions.Configuration;
1012
using System;
1113
using System.Collections.Generic;
1214
using System.ComponentModel.DataAnnotations;
@@ -72,4 +74,18 @@ protected override EgressOperation CreateArtifactOperation(CollectionRuleMetadat
7274
return egressOperation;
7375
}
7476
}
77+
78+
internal sealed class CollectExceptionsActionDescriptor : ICollectionRuleActionDescriptor
79+
{
80+
public string ActionName => KnownCollectionRuleActions.CollectExceptions;
81+
public Type FactoryType => typeof(CollectExceptionsActionFactory);
82+
public Type OptionsType => typeof(CollectExceptionsOptions);
83+
84+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
85+
{
86+
CollectExceptionsOptions options = new();
87+
settingsSection.Bind(options);
88+
settings = options;
89+
}
90+
}
7591
}

src/Tools/dotnet-monitor/CollectionRules/Actions/CollectGCDumpAction.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33

44
using Microsoft.Diagnostics.Monitoring.WebApi;
55
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
6+
using Microsoft.Extensions.Configuration;
67
using Microsoft.Extensions.DependencyInjection;
78
using Microsoft.Extensions.Options;
89
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options;
910
using System;
1011
using Utils = Microsoft.Diagnostics.Monitoring.WebApi.Utilities;
1112
using Microsoft.AspNetCore.Http.Validation;
13+
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
1214

1315
namespace Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Actions
1416
{
@@ -61,4 +63,18 @@ protected override EgressOperation CreateArtifactOperation(CollectionRuleMetadat
6163
}
6264
}
6365
}
66+
67+
internal sealed class CollectGCDumpActionDescriptor : ICollectionRuleActionDescriptor
68+
{
69+
public string ActionName => KnownCollectionRuleActions.CollectGCDump;
70+
public Type FactoryType => typeof(CollectGCDumpActionFactory);
71+
public Type OptionsType => typeof(CollectGCDumpOptions);
72+
73+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
74+
{
75+
CollectGCDumpOptions options = new();
76+
settingsSection.Bind(options);
77+
settings = options;
78+
}
79+
}
6480
}

0 commit comments

Comments
 (0)