Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MetricsAdvisor] Added AAD support #18036

Merged
merged 7 commits into from
Jan 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions sdk/metricsadvisor/Azure.AI.MetricsAdvisor/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

## 1.0.0-beta.3 (Unreleased)

### New Features
- Added support for AAD authentication in `MetricsAdvisorClient` and `MetricsAdvisorAdministrationClient`.

### Key Bug Fixes
- Fixed a bug in which setting `WebNotificationHook.CertificatePassword` would actually set the property `Username` instead.
- Fixed a bug in which an `ArgumentNullException` was thrown when getting a `DataFeed` from the service as a Viewer.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,8 @@ public partial class MetricsAdvisorClient
protected MetricsAdvisorClient() { }
public MetricsAdvisorClient(System.Uri endpoint, Azure.AI.MetricsAdvisor.MetricsAdvisorKeyCredential credential) { }
public MetricsAdvisorClient(System.Uri endpoint, Azure.AI.MetricsAdvisor.MetricsAdvisorKeyCredential credential, Azure.AI.MetricsAdvisor.MetricsAdvisorClientsOptions options) { }
public MetricsAdvisorClient(System.Uri endpoint, Azure.Core.TokenCredential credential) { }
public MetricsAdvisorClient(System.Uri endpoint, Azure.Core.TokenCredential credential, Azure.AI.MetricsAdvisor.MetricsAdvisorClientsOptions options) { }
public virtual Azure.Response<string> AddFeedback(Azure.AI.MetricsAdvisor.Models.MetricFeedback feedback, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual System.Threading.Tasks.Task<Azure.Response<string>> AddFeedbackAsync(Azure.AI.MetricsAdvisor.Models.MetricFeedback feedback, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual Azure.Pageable<Azure.AI.MetricsAdvisor.Models.AnomalyAlert> GetAlerts(string alertConfigurationId, Azure.AI.MetricsAdvisor.GetAlertsOptions options, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
Expand Down Expand Up @@ -225,6 +227,8 @@ public partial class MetricsAdvisorAdministrationClient
protected MetricsAdvisorAdministrationClient() { }
public MetricsAdvisorAdministrationClient(System.Uri endpoint, Azure.AI.MetricsAdvisor.MetricsAdvisorKeyCredential credential) { }
public MetricsAdvisorAdministrationClient(System.Uri endpoint, Azure.AI.MetricsAdvisor.MetricsAdvisorKeyCredential credential, Azure.AI.MetricsAdvisor.MetricsAdvisorClientsOptions options) { }
public MetricsAdvisorAdministrationClient(System.Uri endpoint, Azure.Core.TokenCredential credential) { }
public MetricsAdvisorAdministrationClient(System.Uri endpoint, Azure.Core.TokenCredential credential, Azure.AI.MetricsAdvisor.MetricsAdvisorClientsOptions options) { }
public virtual Azure.Response<string> CreateAlertConfiguration(Azure.AI.MetricsAdvisor.Models.AnomalyAlertConfiguration alertConfiguration, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual System.Threading.Tasks.Task<Azure.Response<string>> CreateAlertConfigurationAsync(Azure.AI.MetricsAdvisor.Models.AnomalyAlertConfiguration alertConfiguration, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual Azure.Response<string> CreateDataFeed(Azure.AI.MetricsAdvisor.Models.DataFeed dataFeed, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,37 @@ public MetricsAdvisorAdministrationClient(Uri endpoint, MetricsAdvisorKeyCredent
_serviceRestClient = new AzureCognitiveServiceMetricsAdvisorRestAPIOpenAPIV2RestClient(_clientDiagnostics, pipeline, endpoint.AbsoluteUri);
}

/// <summary>
/// Initializes a new instance of the <see cref="MetricsAdvisorClient"/> class.
/// </summary>
/// <param name="endpoint">The endpoint to use for connecting to the Form Recognizer Azure Cognitive Service.</param>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

to the Metrics Advisor ... service

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was pretty sure my copy-pasting wouldn't be exposed. I failed this time.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My next PR will update the README with AAD info, so I'll include these doc fixes there.

/// <param name="credential">A credential used to authenticate to the Azure Service.</param>
/// <exception cref="ArgumentNullException"><paramref name="endpoint"/> or <paramref name="credential"/> is null.</exception>
public MetricsAdvisorAdministrationClient(Uri endpoint, TokenCredential credential)
: this(endpoint, credential, null)
{
}

/// <summary>
/// Initializes a new instance of the <see cref="MetricsAdvisorClient"/> class.
/// </summary>
/// <param name="endpoint">The endpoint to use for connecting to the Form Recognizer Azure Cognitive Service.</param>
/// <param name="credential">A credential used to authenticate to the Azure Service.</param>
/// <param name="options">A set of options to apply when configuring the client.</param>
/// <exception cref="ArgumentNullException"><paramref name="endpoint"/> or <paramref name="credential"/> is null.</exception>
public MetricsAdvisorAdministrationClient(Uri endpoint, TokenCredential credential, MetricsAdvisorClientsOptions options)
{
Argument.AssertNotNull(endpoint, nameof(endpoint));
Argument.AssertNotNull(credential, nameof(credential));

options ??= new MetricsAdvisorClientsOptions();

_clientDiagnostics = new ClientDiagnostics(options);
HttpPipeline pipeline = HttpPipelineBuilder.Build(options, new BearerTokenAuthenticationPolicy(credential, Constants.DefaultCognitiveScope));

_serviceRestClient = new AzureCognitiveServiceMetricsAdvisorRestAPIOpenAPIV2RestClient(_clientDiagnostics, pipeline, endpoint.AbsoluteUri);
}

/// <summary>
/// Initializes a new instance of the <see cref="MetricsAdvisorAdministrationClient"/> class. This constructor
/// is intended to be used for mocking only.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,37 @@ public MetricsAdvisorClient(Uri endpoint, MetricsAdvisorKeyCredential credential
_serviceRestClient = new AzureCognitiveServiceMetricsAdvisorRestAPIOpenAPIV2RestClient(_clientDiagnostics, pipeline, endpoint.AbsoluteUri);
}

/// <summary>
/// Initializes a new instance of the <see cref="MetricsAdvisorClient"/> class.
/// </summary>
/// <param name="endpoint">The endpoint to use for connecting to the Form Recognizer Azure Cognitive Service.</param>
/// <param name="credential">A credential used to authenticate to the Azure Service.</param>
/// <exception cref="ArgumentNullException"><paramref name="endpoint"/> or <paramref name="credential"/> is null.</exception>
public MetricsAdvisorClient(Uri endpoint, TokenCredential credential)
: this(endpoint, credential, null)
{
}

/// <summary>
/// Initializes a new instance of the <see cref="MetricsAdvisorClient"/> class.
/// </summary>
/// <param name="endpoint">The endpoint to use for connecting to the Form Recognizer Azure Cognitive Service.</param>
/// <param name="credential">A credential used to authenticate to the Azure Service.</param>
/// <param name="options">A set of options to apply when configuring the client.</param>
/// <exception cref="ArgumentNullException"><paramref name="endpoint"/> or <paramref name="credential"/> is null.</exception>
public MetricsAdvisorClient(Uri endpoint, TokenCredential credential, MetricsAdvisorClientsOptions options)
{
Argument.AssertNotNull(endpoint, nameof(endpoint));
Argument.AssertNotNull(credential, nameof(credential));

options ??= new MetricsAdvisorClientsOptions();

_clientDiagnostics = new ClientDiagnostics(options);
HttpPipeline pipeline = HttpPipelineBuilder.Build(options, new BearerTokenAuthenticationPolicy(credential, Constants.DefaultCognitiveScope));

_serviceRestClient = new AzureCognitiveServiceMetricsAdvisorRestAPIOpenAPIV2RestClient(_clientDiagnostics, pipeline, endpoint.AbsoluteUri);
}

/// <summary>
/// Initializes a new instance of the <see cref="MetricsAdvisorClient"/> class. This constructor
/// is intended to be used for mocking only.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@ public AnomalyAlertConfigurationLiveTests(bool isAsync) : base(isAsync)
}

[RecordedTest]
public async Task CreateAndGetAlertConfigurationWithWholeSeriesScope()
[TestCase(true)]
[TestCase(false)]
public async Task CreateAndGetAlertConfigurationWithWholeSeriesScope(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

var scope = MetricAnomalyAlertScope.GetScopeForWholeSeries();
var metricAlertConfig = new MetricAnomalyAlertConfiguration(DetectionConfigurationId, scope);
Expand Down Expand Up @@ -331,9 +333,11 @@ public async Task CreateAndGetAlertConfigurationWithMultipleMetricConfigurations
}

[RecordedTest]
public async Task UpdateAlertConfigurationWithMinimumSetupAndGetInstance()
[TestCase(true)]
[TestCase(false)]
public async Task UpdateAlertConfigurationWithMinimumSetupAndGetInstance(bool useTokenCrendential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCrendential);

// Configure the Metric Anomaly Alert Configurations to be used.

Expand Down Expand Up @@ -831,9 +835,11 @@ public async Task UpdateAlertConfigurationWithEveryMemberAndNewInstance()
}

[RecordedTest]
public async Task GetAlertConfigurations()
[TestCase(true)]
[TestCase(false)]
public async Task GetAlertConfigurations(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

var configCount = 0;

Expand Down Expand Up @@ -881,9 +887,11 @@ public async Task GetAlertConfigurations()
}

[RecordedTest]
public async Task DeleteAlertConfiguration()
[TestCase(true)]
[TestCase(false)]
public async Task DeleteAlertConfiguration(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

string configName = Recording.GenerateAlphaNumericId("config");
var scope = MetricAnomalyAlertScope.GetScopeForWholeSeries();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,11 @@ public AnomalyDetectionConfigurationLiveTests(bool isAsync) : base(isAsync)
}

[RecordedTest]
public async Task CreateAndGetDetectionConfigurationWithHardCondition()
[TestCase(true)]
[TestCase(false)]
public async Task CreateAndGetDetectionConfigurationWithHardCondition(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

string configName = Recording.GenerateAlphaNumericId("config");
var description = "This hook was created to test the .NET client.";
Expand Down Expand Up @@ -317,11 +319,13 @@ public async Task CreateAndGetDetectionConfigurationWithSeriesConditions()
}

[RecordedTest]
public async Task UpdateDetectionConfigurationWithMinimumSetupAndGetInstance()
[TestCase(true)]
[TestCase(false)]
public async Task UpdateDetectionConfigurationWithMinimumSetupAndGetInstance(bool useTokenCredential)
{
// Set required parameters of the configuration to be created.

MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

string configName = Recording.GenerateAlphaNumericId("config");

Expand Down Expand Up @@ -844,9 +848,11 @@ public async Task UpdateDetectionConfigurationWithEveryMemberAndNewInstance()
}

[RecordedTest]
public async Task GetDetectonConfigurations()
[TestCase(true)]
[TestCase(false)]
public async Task GetDetectonConfigurations(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

var configCount = 0;

Expand Down Expand Up @@ -883,9 +889,11 @@ public async Task GetDetectonConfigurations()
}

[RecordedTest]
public async Task DeleteDetectionConfiguration()
[TestCase(true)]
[TestCase(false)]
public async Task DeleteDetectionConfiguration(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

string configName = Recording.GenerateAlphaNumericId("config");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,11 @@ public DataFeedIngestionLiveTests(bool isAsync) : base(isAsync)
}

[RecordedTest]
public async Task GetDataFeedIngestionProgress()
[TestCase(true)]
[TestCase(false)]
public async Task GetDataFeedIngestionProgress(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

DataFeedIngestionProgress progress = await adminClient.GetDataFeedIngestionProgressAsync(DataFeedId);

Expand All @@ -31,9 +33,11 @@ public async Task GetDataFeedIngestionProgress()
}

[RecordedTest]
public async Task RefreshDataIngestion()
[TestCase(true)]
[TestCase(false)]
public async Task RefreshDataIngestion(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

var startTime = DateTimeOffset.Parse("2020-09-01T00:00:00Z");
var endTime = DateTimeOffset.Parse("2020-09-02T00:00:00Z");
Expand All @@ -44,9 +48,11 @@ public async Task RefreshDataIngestion()
}

[RecordedTest]
public async Task GetDataFeedIngestionStatuses()
[TestCase(true)]
[TestCase(false)]
public async Task GetDataFeedIngestionStatuses(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

var options = new GetDataFeedIngestionStatusesOptions(SamplingStartTime, SamplingEndTime);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,11 @@ public DataFeedLiveTests(bool isAsync) : base(isAsync)
}

[RecordedTest]
public async Task CreateAndGetAzureApplicationInsightsDataFeedWithMinimumSetup()
[TestCase(true)]
[TestCase(false)]
public async Task CreateAndGetAzureApplicationInsightsDataFeedWithMinimumSetup(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

var dataFeedName = Recording.GenerateAlphaNumericId("dataFeed");
var dataSource = new AzureApplicationInsightsDataFeedSource(DataSourceAppId, DataSourceKey, DataSourceCloud, DataSourceQuery);
Expand Down Expand Up @@ -675,9 +677,11 @@ public async Task UpdateAzureApplicationInsightsDataFeedWithEveryMemberAndNewIns
}

[RecordedTest]
public async Task UpdateAzureBlobDataFeedWithMinimumSetupAndGetInstance()
[TestCase(true)]
[TestCase(false)]
public async Task UpdateAzureBlobDataFeedWithMinimumSetupAndGetInstance(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

var dataFeedName = Recording.GenerateAlphaNumericId("dataFeed");
var dataSource = new AzureBlobDataFeedSource(DataSourceConnectionString, DataSourceContainer, DataSourceTemplate);
Expand Down Expand Up @@ -1953,10 +1957,12 @@ public async Task UpdateSqlServerDataFeedWithEveryMemberAndNewInstance()
}

[RecordedTest]
[TestCase(true)]
[TestCase(false)]
[Ignore("https://github.com/Azure/azure-sdk-for-net/issues/18004")]
public async Task GetDataFeeds()
public async Task GetDataFeeds(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

var dataFeedCount = 0;

Expand Down Expand Up @@ -2044,9 +2050,11 @@ public async Task GetDataFeeds()
}

[RecordedTest]
public async Task DeleteDataFeed()
[TestCase(true)]
[TestCase(false)]
public async Task DeleteDataFeed(bool useTokenCredential)
{
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient();
MetricsAdvisorAdministrationClient adminClient = GetMetricsAdvisorAdministrationClient(useTokenCredential);

var dataFeedName = Recording.GenerateAlphaNumericId("dataFeed");
var dataSource = new SqlServerDataFeedSource("connectionStr", "query");
Expand Down
Loading