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); } } } }