Skip to content

Commit 65f601a

Browse files
committed
Move BindOptions to action descriptors
1 parent 04aed2f commit 65f601a

17 files changed

+123
-8
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Actions;
66
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
77
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
8+
using Microsoft.Extensions.Configuration;
89
using System;
910
using System.Collections.Generic;
1011
using System.Threading;
@@ -79,6 +80,13 @@ internal sealed class CallbackActionDescriptor : ICollectionRuleActionDescriptor
7980
public string ActionName => CallbackAction.ActionName;
8081
public Type OptionsType => typeof(BaseRecordOptions);
8182
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+
}
8290
}
8391

8492
internal sealed class DelayedCallbackAction : ICollectionRuleAction
@@ -124,6 +132,13 @@ internal sealed class DelayedCallbackActionDescriptor : ICollectionRuleActionDes
124132
public string ActionName => DelayedCallbackAction.ActionName;
125133
public Type OptionsType => typeof(BaseRecordOptions);
126134
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+
}
127142
}
128143

129144
internal sealed class CallbackActionService

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Actions;
66
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
77
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
8+
using Microsoft.Extensions.Configuration;
89
using System;
910
using System.Collections.Generic;
1011
using System.Threading;
@@ -60,6 +61,13 @@ internal sealed class PassThroughActionDescriptor : ICollectionRuleActionDescrip
6061
public string ActionName => nameof(PassThroughAction);
6162
public Type OptionsType => typeof(PassThroughOptions);
6263
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+
}
6371
}
6472

6573
internal sealed record class PassThroughOptions : BaseRecordOptions

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.Diagnostics.Monitoring.WebApi.Models;
66
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
77
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
8+
using Microsoft.Extensions.Configuration;
89
using Microsoft.Extensions.DependencyInjection;
910
using System;
1011
using System.ComponentModel.DataAnnotations;
@@ -73,5 +74,12 @@ internal sealed class CollectDumpActionDescriptor : ICollectionRuleActionDescrip
7374
public string ActionName => KnownCollectionRuleActions.CollectDump;
7475
public Type FactoryType => typeof(CollectDumpActionFactory);
7576
public Type OptionsType => typeof(CollectDumpOptions);
77+
78+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
79+
{
80+
CollectDumpOptions options = new();
81+
settingsSection.Bind(options);
82+
settings = options;
83+
}
7684
}
7785
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
66
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
77
using Microsoft.Extensions.DependencyInjection;
8+
using Microsoft.Extensions.Configuration;
89
using System;
910
using System.ComponentModel.DataAnnotations;
1011
using Utils = Microsoft.Diagnostics.Monitoring.WebApi.Utilities;
@@ -62,5 +63,12 @@ internal sealed class CollectExceptionsActionDescriptor : ICollectionRuleActionD
6263
public string ActionName => KnownCollectionRuleActions.CollectExceptions;
6364
public Type FactoryType => typeof(CollectExceptionsActionFactory);
6465
public Type OptionsType => typeof(CollectExceptionsOptions);
66+
67+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
68+
{
69+
CollectExceptionsOptions options = new();
70+
settingsSection.Bind(options);
71+
settings = options;
72+
}
6573
}
6674
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
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 System;
89
using System.ComponentModel.DataAnnotations;
@@ -66,5 +67,12 @@ internal sealed class CollectGCDumpActionDescriptor : ICollectionRuleActionDescr
6667
public string ActionName => KnownCollectionRuleActions.CollectGCDump;
6768
public Type FactoryType => typeof(CollectGCDumpActionFactory);
6869
public Type OptionsType => typeof(CollectGCDumpOptions);
70+
71+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
72+
{
73+
CollectGCDumpOptions options = new();
74+
settingsSection.Bind(options);
75+
settings = options;
76+
}
6977
}
7078
}

src/Tools/dotnet-monitor/CollectionRules/Actions/CollectLiveMetricsAction.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.Models;
77
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
88
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
9+
using Microsoft.Extensions.Configuration;
910
using Microsoft.Extensions.DependencyInjection;
1011
using Microsoft.Extensions.Options;
1112
using System;
@@ -102,5 +103,12 @@ internal sealed class CollectLiveMetricsActionDescriptor : ICollectionRuleAction
102103
public string ActionName => KnownCollectionRuleActions.CollectLiveMetrics;
103104
public Type FactoryType => typeof(CollectLiveMetricsActionFactory);
104105
public Type OptionsType => typeof(CollectLiveMetricsOptions);
106+
107+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
108+
{
109+
CollectLiveMetricsOptions options = new();
110+
settingsSection.Bind(options);
111+
settings = options;
112+
}
105113
}
106114
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
99
using Microsoft.Extensions.DependencyInjection;
1010
using Microsoft.Extensions.Logging;
11+
using Microsoft.Extensions.Configuration;
1112
using System;
1213
using System.Collections.Generic;
1314
using System.ComponentModel.DataAnnotations;
@@ -90,5 +91,12 @@ internal sealed class CollectLogsActionDescriptor : ICollectionRuleActionDescrip
9091
public string ActionName => KnownCollectionRuleActions.CollectLogs;
9192
public Type FactoryType => typeof(CollectLogsActionFactory);
9293
public Type OptionsType => typeof(CollectLogsOptions);
94+
95+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
96+
{
97+
CollectLogsOptions options = new();
98+
settingsSection.Bind(options);
99+
settings = options;
100+
}
93101
}
94102
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Actions;
66
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
77
using Microsoft.Extensions.DependencyInjection;
8+
using Microsoft.Extensions.Configuration;
89
using System;
910
using System.ComponentModel.DataAnnotations;
1011
using Utils = Microsoft.Diagnostics.Monitoring.WebApi.Utilities;
@@ -78,5 +79,12 @@ internal sealed class CollectStacksActionDescriptor : ICollectionRuleActionDescr
7879
public string ActionName => KnownCollectionRuleActions.CollectStacks;
7980
public Type FactoryType => typeof(CollectStacksActionFactory);
8081
public Type OptionsType => typeof(CollectStacksOptions);
82+
83+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
84+
{
85+
CollectStacksOptions options = new();
86+
settingsSection.Bind(options);
87+
settings = options;
88+
}
8189
}
8290
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
99
using Microsoft.Extensions.DependencyInjection;
1010
using Microsoft.Extensions.Options;
11+
using Microsoft.Extensions.Configuration;
1112
using System;
1213
using System.ComponentModel.DataAnnotations;
1314
using Utils = Microsoft.Diagnostics.Monitoring.WebApi.Utilities;
@@ -114,5 +115,12 @@ internal sealed class CollectTraceActionDescriptor : ICollectionRuleActionDescri
114115
public string ActionName => KnownCollectionRuleActions.CollectTrace;
115116
public Type FactoryType => typeof(CollectTraceActionFactory);
116117
public Type OptionsType => typeof(CollectTraceOptions);
118+
119+
public void BindOptions(IConfigurationSection settingsSection, out object settings)
120+
{
121+
CollectTraceOptions options = new();
122+
settingsSection.Bind(options);
123+
settings = options;
124+
}
117125
}
118126
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
77
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options;
8+
using Microsoft.Extensions.Configuration;
89
using Microsoft.Extensions.Logging;
910
using System;
1011
using System.Collections.Generic;
@@ -59,13 +60,15 @@ public bool TryCreateFactory(
5960
}
6061

6162
/// <inheritdoc/>
62-
public bool TryCreateOptions(
63+
public bool TryBindOptions(
6364
string actionName,
65+
IConfigurationSection actionSection,
6466
out object options)
6567
{
6668
if (_map.TryGetValue(actionName, out ICollectionRuleActionDescriptor descriptor))
6769
{
68-
options = Activator.CreateInstance(descriptor.OptionsType);
70+
IConfigurationSection settingsSection = actionSection.GetSection(nameof(CollectionRuleActionOptions.Settings));
71+
descriptor.BindOptions(settingsSection, out options);
6972
return true;
7073
}
7174

0 commit comments

Comments
 (0)