sdk/sqlmanagement/Azure.ResourceManager.Sql/src/Custom/RestOperations/MetricsRestOperations.cs (194 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#nullable disable
using System;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Azure.Core;
using Azure.Core.Pipeline;
using Azure.ResourceManager.Sql.Models;
namespace Azure.ResourceManager.Sql
{
internal partial class MetricsRestOperations
{
private readonly TelemetryDetails _userAgent;
private readonly HttpPipeline _pipeline;
private readonly Uri _endpoint;
private readonly string _apiVersion;
/// <summary> Initializes a new instance of MetricsRestOperations. </summary>
/// <param name="pipeline"> The HTTP pipeline for sending and receiving REST requests and responses. </param>
/// <param name="applicationId"> The application id to use for user agent. </param>
/// <param name="endpoint"> server parameter. </param>
/// <param name="apiVersion"> Api Version. </param>
/// <exception cref="ArgumentNullException"> <paramref name="pipeline"/> or <paramref name="apiVersion"/> is null. </exception>
public MetricsRestOperations(HttpPipeline pipeline, string applicationId, Uri endpoint = null, string apiVersion = default)
{
_pipeline = pipeline ?? throw new ArgumentNullException(nameof(pipeline));
_endpoint = endpoint ?? new Uri("https://management.azure.com");
_apiVersion = apiVersion ?? "2014-04-01";
_userAgent = new TelemetryDetails(GetType().Assembly, applicationId);
}
internal RequestUriBuilder CreateListDatabaseRequestUri(string subscriptionId, string resourceGroupName, string serverName, string databaseName, string filter)
{
var uri = new RawRequestUriBuilder();
uri.Reset(_endpoint);
uri.AppendPath("/subscriptions/", false);
uri.AppendPath(subscriptionId, true);
uri.AppendPath("/resourceGroups/", false);
uri.AppendPath(resourceGroupName, true);
uri.AppendPath("/providers/Microsoft.Sql/servers/", false);
uri.AppendPath(serverName, true);
uri.AppendPath("/databases/", false);
uri.AppendPath(databaseName, true);
uri.AppendPath("/metrics", false);
uri.AppendQuery("api-version", _apiVersion, true);
uri.AppendQuery("$filter", filter, true);
return uri;
}
internal HttpMessage CreateListDatabaseRequest(string subscriptionId, string resourceGroupName, string serverName, string databaseName, string filter)
{
var message = _pipeline.CreateMessage();
var request = message.Request;
request.Method = RequestMethod.Get;
var uri = new RawRequestUriBuilder();
uri.Reset(_endpoint);
uri.AppendPath("/subscriptions/", false);
uri.AppendPath(subscriptionId, true);
uri.AppendPath("/resourceGroups/", false);
uri.AppendPath(resourceGroupName, true);
uri.AppendPath("/providers/Microsoft.Sql/servers/", false);
uri.AppendPath(serverName, true);
uri.AppendPath("/databases/", false);
uri.AppendPath(databaseName, true);
uri.AppendPath("/metrics", false);
uri.AppendQuery("api-version", _apiVersion, true);
uri.AppendQuery("$filter", filter, true);
request.Uri = uri;
request.Headers.Add("Accept", "application/json");
_userAgent.Apply(message);
return message;
}
/// <summary> Returns database metrics. </summary>
/// <param name="subscriptionId"> The subscription ID that identifies an Azure subscription. </param>
/// <param name="resourceGroupName"> The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. </param>
/// <param name="serverName"> The name of the server. </param>
/// <param name="databaseName"> The name of the database. </param>
/// <param name="filter"> An OData filter expression that describes a subset of metrics to return. </param>
/// <param name="cancellationToken"> The cancellation token to use. </param>
/// <exception cref="ArgumentNullException"> <paramref name="subscriptionId"/>, <paramref name="resourceGroupName"/>, <paramref name="serverName"/>, <paramref name="databaseName"/> or <paramref name="filter"/> is null. </exception>
/// <exception cref="ArgumentException"> <paramref name="subscriptionId"/>, <paramref name="resourceGroupName"/>, <paramref name="serverName"/> or <paramref name="databaseName"/> is an empty string, and was expected to be non-empty. </exception>
public async Task<Response<SqlMetricListResult>> ListDatabaseAsync(string subscriptionId, string resourceGroupName, string serverName, string databaseName, string filter, CancellationToken cancellationToken = default)
{
Argument.AssertNotNullOrEmpty(subscriptionId, nameof(subscriptionId));
Argument.AssertNotNullOrEmpty(resourceGroupName, nameof(resourceGroupName));
Argument.AssertNotNullOrEmpty(serverName, nameof(serverName));
Argument.AssertNotNullOrEmpty(databaseName, nameof(databaseName));
Argument.AssertNotNull(filter, nameof(filter));
using var message = CreateListDatabaseRequest(subscriptionId, resourceGroupName, serverName, databaseName, filter);
await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
switch (message.Response.Status)
{
case 200:
{
SqlMetricListResult value = default;
using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, ModelSerializationExtensions.JsonDocumentOptions, cancellationToken).ConfigureAwait(false);
value = SqlMetricListResult.DeserializeSqlMetricListResult(document.RootElement);
return Response.FromValue(value, message.Response);
}
default:
throw new RequestFailedException(message.Response);
}
}
/// <summary> Returns database metrics. </summary>
/// <param name="subscriptionId"> The subscription ID that identifies an Azure subscription. </param>
/// <param name="resourceGroupName"> The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. </param>
/// <param name="serverName"> The name of the server. </param>
/// <param name="databaseName"> The name of the database. </param>
/// <param name="filter"> An OData filter expression that describes a subset of metrics to return. </param>
/// <param name="cancellationToken"> The cancellation token to use. </param>
/// <exception cref="ArgumentNullException"> <paramref name="subscriptionId"/>, <paramref name="resourceGroupName"/>, <paramref name="serverName"/>, <paramref name="databaseName"/> or <paramref name="filter"/> is null. </exception>
/// <exception cref="ArgumentException"> <paramref name="subscriptionId"/>, <paramref name="resourceGroupName"/>, <paramref name="serverName"/> or <paramref name="databaseName"/> is an empty string, and was expected to be non-empty. </exception>
public Response<SqlMetricListResult> ListDatabase(string subscriptionId, string resourceGroupName, string serverName, string databaseName, string filter, CancellationToken cancellationToken = default)
{
Argument.AssertNotNullOrEmpty(subscriptionId, nameof(subscriptionId));
Argument.AssertNotNullOrEmpty(resourceGroupName, nameof(resourceGroupName));
Argument.AssertNotNullOrEmpty(serverName, nameof(serverName));
Argument.AssertNotNullOrEmpty(databaseName, nameof(databaseName));
Argument.AssertNotNull(filter, nameof(filter));
using var message = CreateListDatabaseRequest(subscriptionId, resourceGroupName, serverName, databaseName, filter);
_pipeline.Send(message, cancellationToken);
switch (message.Response.Status)
{
case 200:
{
SqlMetricListResult value = default;
using var document = JsonDocument.Parse(message.Response.ContentStream, ModelSerializationExtensions.JsonDocumentOptions);
value = SqlMetricListResult.DeserializeSqlMetricListResult(document.RootElement);
return Response.FromValue(value, message.Response);
}
default:
throw new RequestFailedException(message.Response);
}
}
internal RequestUriBuilder CreateListElasticPoolRequestUri(string subscriptionId, string resourceGroupName, string serverName, string elasticPoolName, string filter)
{
var uri = new RawRequestUriBuilder();
uri.Reset(_endpoint);
uri.AppendPath("/subscriptions/", false);
uri.AppendPath(subscriptionId, true);
uri.AppendPath("/resourceGroups/", false);
uri.AppendPath(resourceGroupName, true);
uri.AppendPath("/providers/Microsoft.Sql/servers/", false);
uri.AppendPath(serverName, true);
uri.AppendPath("/elasticPools/", false);
uri.AppendPath(elasticPoolName, true);
uri.AppendPath("/metrics", false);
uri.AppendQuery("api-version", _apiVersion, true);
uri.AppendQuery("$filter", filter, true);
return uri;
}
internal HttpMessage CreateListElasticPoolRequest(string subscriptionId, string resourceGroupName, string serverName, string elasticPoolName, string filter)
{
var message = _pipeline.CreateMessage();
var request = message.Request;
request.Method = RequestMethod.Get;
var uri = new RawRequestUriBuilder();
uri.Reset(_endpoint);
uri.AppendPath("/subscriptions/", false);
uri.AppendPath(subscriptionId, true);
uri.AppendPath("/resourceGroups/", false);
uri.AppendPath(resourceGroupName, true);
uri.AppendPath("/providers/Microsoft.Sql/servers/", false);
uri.AppendPath(serverName, true);
uri.AppendPath("/elasticPools/", false);
uri.AppendPath(elasticPoolName, true);
uri.AppendPath("/metrics", false);
uri.AppendQuery("api-version", _apiVersion, true);
uri.AppendQuery("$filter", filter, true);
request.Uri = uri;
request.Headers.Add("Accept", "application/json");
_userAgent.Apply(message);
return message;
}
/// <summary> Returns elastic pool metrics. </summary>
/// <param name="subscriptionId"> The subscription ID that identifies an Azure subscription. </param>
/// <param name="resourceGroupName"> The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. </param>
/// <param name="serverName"> The name of the server. </param>
/// <param name="elasticPoolName"> The name of the elastic pool. </param>
/// <param name="filter"> An OData filter expression that describes a subset of metrics to return. </param>
/// <param name="cancellationToken"> The cancellation token to use. </param>
/// <exception cref="ArgumentNullException"> <paramref name="subscriptionId"/>, <paramref name="resourceGroupName"/>, <paramref name="serverName"/>, <paramref name="elasticPoolName"/> or <paramref name="filter"/> is null. </exception>
/// <exception cref="ArgumentException"> <paramref name="subscriptionId"/>, <paramref name="resourceGroupName"/>, <paramref name="serverName"/> or <paramref name="elasticPoolName"/> is an empty string, and was expected to be non-empty. </exception>
public async Task<Response<SqlMetricListResult>> ListElasticPoolAsync(string subscriptionId, string resourceGroupName, string serverName, string elasticPoolName, string filter, CancellationToken cancellationToken = default)
{
Argument.AssertNotNullOrEmpty(subscriptionId, nameof(subscriptionId));
Argument.AssertNotNullOrEmpty(resourceGroupName, nameof(resourceGroupName));
Argument.AssertNotNullOrEmpty(serverName, nameof(serverName));
Argument.AssertNotNullOrEmpty(elasticPoolName, nameof(elasticPoolName));
Argument.AssertNotNull(filter, nameof(filter));
using var message = CreateListElasticPoolRequest(subscriptionId, resourceGroupName, serverName, elasticPoolName, filter);
await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false);
switch (message.Response.Status)
{
case 200:
{
SqlMetricListResult value = default;
using var document = await JsonDocument.ParseAsync(message.Response.ContentStream, ModelSerializationExtensions.JsonDocumentOptions, cancellationToken).ConfigureAwait(false);
value = SqlMetricListResult.DeserializeSqlMetricListResult(document.RootElement);
return Response.FromValue(value, message.Response);
}
default:
throw new RequestFailedException(message.Response);
}
}
/// <summary> Returns elastic pool metrics. </summary>
/// <param name="subscriptionId"> The subscription ID that identifies an Azure subscription. </param>
/// <param name="resourceGroupName"> The name of the resource group that contains the resource. You can obtain this value from the Azure Resource Manager API or the portal. </param>
/// <param name="serverName"> The name of the server. </param>
/// <param name="elasticPoolName"> The name of the elastic pool. </param>
/// <param name="filter"> An OData filter expression that describes a subset of metrics to return. </param>
/// <param name="cancellationToken"> The cancellation token to use. </param>
/// <exception cref="ArgumentNullException"> <paramref name="subscriptionId"/>, <paramref name="resourceGroupName"/>, <paramref name="serverName"/>, <paramref name="elasticPoolName"/> or <paramref name="filter"/> is null. </exception>
/// <exception cref="ArgumentException"> <paramref name="subscriptionId"/>, <paramref name="resourceGroupName"/>, <paramref name="serverName"/> or <paramref name="elasticPoolName"/> is an empty string, and was expected to be non-empty. </exception>
public Response<SqlMetricListResult> ListElasticPool(string subscriptionId, string resourceGroupName, string serverName, string elasticPoolName, string filter, CancellationToken cancellationToken = default)
{
Argument.AssertNotNullOrEmpty(subscriptionId, nameof(subscriptionId));
Argument.AssertNotNullOrEmpty(resourceGroupName, nameof(resourceGroupName));
Argument.AssertNotNullOrEmpty(serverName, nameof(serverName));
Argument.AssertNotNullOrEmpty(elasticPoolName, nameof(elasticPoolName));
Argument.AssertNotNull(filter, nameof(filter));
using var message = CreateListElasticPoolRequest(subscriptionId, resourceGroupName, serverName, elasticPoolName, filter);
_pipeline.Send(message, cancellationToken);
switch (message.Response.Status)
{
case 200:
{
SqlMetricListResult value = default;
using var document = JsonDocument.Parse(message.Response.ContentStream, ModelSerializationExtensions.JsonDocumentOptions);
value = SqlMetricListResult.DeserializeSqlMetricListResult(document.RootElement);
return Response.FromValue(value, message.Response);
}
default:
throw new RequestFailedException(message.Response);
}
}
}
}