Skip to content

Commit 9120678

Browse files
committed
Move binding to trigger descriptors
1 parent 0792faf commit 9120678

13 files changed

+75
-14
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.Diagnostics.Monitoring.WebApi;
55
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
66
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Triggers;
7+
using Microsoft.Extensions.Configuration;
78
using System;
89
using System.Threading;
910
using System.Threading.Tasks;
@@ -65,6 +66,12 @@ internal sealed class ManualTriggerDescriptor : ICollectionRuleTriggerDescriptor
6566
public string TriggerName => ManualTrigger.TriggerName;
6667
public Type FactoryType => typeof(ManualTriggerFactory);
6768
public Type OptionsType => null;
69+
70+
public bool TryBindOptions(IConfigurationSection settingsSection, out object settings)
71+
{
72+
settings = null;
73+
return false;
74+
}
6875
}
6976

7077
internal sealed class ManualTriggerService

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ bool TryCreateFactory(
2323
out ICollectionRuleActionFactoryProxy action);
2424

2525
/// <summary>
26-
/// Attempts to create an options instance of the options type
26+
/// Attempts to bind an options instance of the options type
2727
/// associated with the registered action name.
2828
/// </summary>
2929
bool TryBindOptions(

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,8 @@ public static void BindActionSettings(IConfigurationSection actionSection, Colle
2222
public static void BindTriggerSettings(IConfigurationSection triggerSection, CollectionRuleTriggerOptions triggerOptions, ICollectionRuleTriggerOperations triggerOperations)
2323
{
2424
if (null != triggerOptions &&
25-
triggerOperations.TryCreateOptions(triggerOptions.Type, out object triggerSettings))
25+
triggerOperations.TryBindOptions(triggerOptions.Type, triggerSection, out object triggerSettings))
2626
{
27-
IConfigurationSection settingsSection = triggerSection.GetSection(nameof(CollectionRuleTriggerOptions.Settings));
28-
29-
settingsSection.Bind(triggerSettings);
30-
3127
triggerOptions.Settings = triggerSettings;
3228
}
3329
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4-
using System;
54
using Microsoft.Extensions.Configuration;
5+
using System;
66

77
namespace Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration
88
{

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Licensed to the .NET Foundation under one or more agreements.
22
// The .NET Foundation licenses this file to you under the MIT license.
33

4+
using Microsoft.Extensions.Configuration;
45
using System;
56

67
namespace Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration
@@ -12,5 +13,7 @@ interface ICollectionRuleTriggerDescriptor
1213
Type? OptionsType { get; }
1314

1415
string TriggerName { get; }
16+
17+
bool TryBindOptions(IConfigurationSection settingsSection, out object? settings);
1518
}
1619
}

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

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

@@ -51,5 +52,13 @@ internal sealed class AspNetRequestCountTriggerDescriptor : ICollectionRuleTrigg
5152
public Type FactoryType => typeof(AspNetRequestCountTriggerFactory);
5253
public Type? OptionsType => typeof(AspNetRequestCountOptions);
5354
public string TriggerName => KnownCollectionRuleTriggers.AspNetRequestCount;
55+
56+
public bool TryBindOptions(IConfigurationSection settingsSection, out object? settings)
57+
{
58+
var options = new AspNetRequestCountOptions();
59+
settingsSection.Bind(options);
60+
settings = options;
61+
return true;
62+
}
5463
}
5564
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Triggers;
99
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
1010
using Microsoft.Extensions.Options;
11+
using Microsoft.Extensions.Configuration;
1112
using System;
1213
using System.Globalization;
1314

@@ -57,5 +58,13 @@ internal sealed class AspNetRequestDurationTriggerDescriptor : ICollectionRuleTr
5758
public Type FactoryType => typeof(AspNetRequestDurationTriggerFactory);
5859
public Type? OptionsType => typeof(AspNetRequestDurationOptions);
5960
public string TriggerName => KnownCollectionRuleTriggers.AspNetRequestDuration;
61+
62+
public bool TryBindOptions(IConfigurationSection settingsSection, out object? settings)
63+
{
64+
var options = new AspNetRequestDurationOptions();
65+
settingsSection.Bind(options);
66+
settings = options;
67+
return true;
68+
}
6069
}
6170
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Microsoft.Diagnostics.Monitoring.WebApi;
88
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Triggers;
99
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
10+
using Microsoft.Extensions.Configuration;
1011
using System;
1112
using System.Globalization;
1213
using System.Linq;
@@ -66,5 +67,13 @@ internal sealed class AspNetResponseStatusTriggerDescriptor : ICollectionRuleTri
6667
public Type FactoryType => typeof(AspNetResponseStatusTriggerFactory);
6768
public Type? OptionsType => typeof(AspNetResponseStatusOptions);
6869
public string TriggerName => KnownCollectionRuleTriggers.AspNetResponseStatus;
70+
71+
public bool TryBindOptions(IConfigurationSection settingsSection, out object? settings)
72+
{
73+
var options = new AspNetResponseStatusOptions();
74+
settingsSection.Bind(options);
75+
settings = options;
76+
return true;
77+
}
6978
}
7079
}

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

Lines changed: 6 additions & 5 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;
@@ -71,16 +72,16 @@ public bool TryCreateFactory(
7172
}
7273

7374
/// <inheritdoc/>
74-
public bool TryCreateOptions(
75+
public bool TryBindOptions(
7576
string triggerName,
77+
IConfigurationSection triggerSection,
7678
out object options)
7779
{
7880
// Check that the trigger is registered and has options
79-
if (_map.TryGetValue(triggerName, out ICollectionRuleTriggerDescriptor descriptor) &&
80-
null != descriptor.OptionsType)
81+
if (_map.TryGetValue(triggerName, out ICollectionRuleTriggerDescriptor descriptor))
8182
{
82-
options = Activator.CreateInstance(descriptor.OptionsType);
83-
return true;
83+
IConfigurationSection settingsSection = triggerSection.GetSection(nameof(CollectionRuleTriggerOptions.Settings));
84+
return descriptor.TryBindOptions(settingsSection, out options);
8485
}
8586

8687
options = null;

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Options.Triggers.EventCounterShortcuts;
99
using Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Configuration;
1010
using Microsoft.Extensions.Options;
11+
using Microsoft.Extensions.Configuration;
1112
using System;
1213

1314
namespace Microsoft.Diagnostics.Tools.Monitor.CollectionRules.Triggers
@@ -116,5 +117,13 @@ internal sealed class EventCounterTriggerDescriptor : ICollectionRuleTriggerDesc
116117
public Type FactoryType => typeof(EventCounterTriggerFactory);
117118
public Type? OptionsType => typeof(EventCounterOptions);
118119
public string TriggerName => KnownCollectionRuleTriggers.EventCounter;
120+
121+
public bool TryBindOptions(IConfigurationSection settingsSection, out object? settings)
122+
{
123+
var options = new EventCounterOptions();
124+
settingsSection.Bind(options);
125+
settings = options;
126+
return true;
127+
}
119128
}
120129
}

0 commit comments

Comments
 (0)