sdk/monitor/azquery/metrics_client.go (179 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// Code generated by Microsoft (R) AutoRest Code Generator. DO NOT EDIT.
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
package azquery
import (
"context"
"net/http"
"strconv"
"strings"
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
)
// MetricsClient contains the methods for the Metrics group.
// Don't use this type directly, use a constructor function instead.
type MetricsClient struct {
host string
internal *azcore.Client
}
// NewListDefinitionsPager - Lists the metric definitions for the resource.
//
// Generated from API version 2024-02-01
// - resourceURI - The identifier of the resource.
// - options - MetricsClientListDefinitionsOptions contains the optional parameters for the MetricsClient.NewListDefinitionsPager
// method.
func (client *MetricsClient) NewListDefinitionsPager(resourceURI string, options *MetricsClientListDefinitionsOptions) *runtime.Pager[MetricsClientListDefinitionsResponse] {
return runtime.NewPager(runtime.PagingHandler[MetricsClientListDefinitionsResponse]{
More: func(page MetricsClientListDefinitionsResponse) bool {
return false
},
Fetcher: func(ctx context.Context, page *MetricsClientListDefinitionsResponse) (MetricsClientListDefinitionsResponse, error) {
req, err := client.listDefinitionsCreateRequest(ctx, resourceURI, options)
if err != nil {
return MetricsClientListDefinitionsResponse{}, err
}
resp, err := client.internal.Pipeline().Do(req)
if err != nil {
return MetricsClientListDefinitionsResponse{}, err
}
if !runtime.HasStatusCode(resp, http.StatusOK) {
return MetricsClientListDefinitionsResponse{}, runtime.NewResponseError(resp)
}
return client.listDefinitionsHandleResponse(resp)
},
Tracer: client.internal.Tracer(),
})
}
// listDefinitionsCreateRequest creates the ListDefinitions request.
func (client *MetricsClient) listDefinitionsCreateRequest(ctx context.Context, resourceURI string, options *MetricsClientListDefinitionsOptions) (*policy.Request, error) {
urlPath := "/{resourceUri}/providers/Microsoft.Insights/metricDefinitions"
urlPath = strings.ReplaceAll(urlPath, "{resourceUri}", resourceURI)
req, err := runtime.NewRequest(ctx, http.MethodGet, runtime.JoinPaths(client.host, urlPath))
if err != nil {
return nil, err
}
reqQP := req.Raw().URL.Query()
reqQP.Set("api-version", "2024-02-01")
if options != nil && options.MetricNamespace != nil {
reqQP.Set("metricnamespace", *options.MetricNamespace)
}
req.Raw().URL.RawQuery = reqQP.Encode()
req.Raw().Header["Accept"] = []string{"application/json"}
return req, nil
}
// listDefinitionsHandleResponse handles the ListDefinitions response.
func (client *MetricsClient) listDefinitionsHandleResponse(resp *http.Response) (MetricsClientListDefinitionsResponse, error) {
result := MetricsClientListDefinitionsResponse{}
if err := runtime.UnmarshalAsJSON(resp, &result.MetricDefinitionCollection); err != nil {
return MetricsClientListDefinitionsResponse{}, err
}
return result, nil
}
// NewListNamespacesPager - Lists the metric namespaces for the resource.
//
// Generated from API version 2024-02-01
// - resourceURI - The identifier of the resource.
// - options - MetricsClientListNamespacesOptions contains the optional parameters for the MetricsClient.NewListNamespacesPager
// method.
func (client *MetricsClient) NewListNamespacesPager(resourceURI string, options *MetricsClientListNamespacesOptions) *runtime.Pager[MetricsClientListNamespacesResponse] {
return runtime.NewPager(runtime.PagingHandler[MetricsClientListNamespacesResponse]{
More: func(page MetricsClientListNamespacesResponse) bool {
return false
},
Fetcher: func(ctx context.Context, page *MetricsClientListNamespacesResponse) (MetricsClientListNamespacesResponse, error) {
req, err := client.listNamespacesCreateRequest(ctx, resourceURI, options)
if err != nil {
return MetricsClientListNamespacesResponse{}, err
}
resp, err := client.internal.Pipeline().Do(req)
if err != nil {
return MetricsClientListNamespacesResponse{}, err
}
if !runtime.HasStatusCode(resp, http.StatusOK) {
return MetricsClientListNamespacesResponse{}, runtime.NewResponseError(resp)
}
return client.listNamespacesHandleResponse(resp)
},
Tracer: client.internal.Tracer(),
})
}
// listNamespacesCreateRequest creates the ListNamespaces request.
func (client *MetricsClient) listNamespacesCreateRequest(ctx context.Context, resourceURI string, options *MetricsClientListNamespacesOptions) (*policy.Request, error) {
urlPath := "/{resourceUri}/providers/microsoft.insights/metricNamespaces"
urlPath = strings.ReplaceAll(urlPath, "{resourceUri}", resourceURI)
req, err := runtime.NewRequest(ctx, http.MethodGet, runtime.JoinPaths(client.host, urlPath))
if err != nil {
return nil, err
}
reqQP := req.Raw().URL.Query()
reqQP.Set("api-version", "2024-02-01")
if options != nil && options.StartTime != nil {
reqQP.Set("startTime", *options.StartTime)
}
req.Raw().URL.RawQuery = reqQP.Encode()
req.Raw().Header["Accept"] = []string{"application/json"}
return req, nil
}
// listNamespacesHandleResponse handles the ListNamespaces response.
func (client *MetricsClient) listNamespacesHandleResponse(resp *http.Response) (MetricsClientListNamespacesResponse, error) {
result := MetricsClientListNamespacesResponse{}
if err := runtime.UnmarshalAsJSON(resp, &result.MetricNamespaceCollection); err != nil {
return MetricsClientListNamespacesResponse{}, err
}
return result, nil
}
// QueryResource - Lists the metric values for a resource.
// If the operation fails it returns an *azcore.ResponseError type.
//
// Generated from API version 2024-02-01
// - resourceURI - The identifier of the resource.
// - options - MetricsClientQueryResourceOptions contains the optional parameters for the MetricsClient.QueryResource method.
func (client *MetricsClient) QueryResource(ctx context.Context, resourceURI string, options *MetricsClientQueryResourceOptions) (MetricsClientQueryResourceResponse, error) {
var err error
ctx, endSpan := runtime.StartSpan(ctx, "MetricsClient.QueryResource", client.internal.Tracer(), nil)
defer func() { endSpan(err) }()
req, err := client.queryResourceCreateRequest(ctx, resourceURI, options)
if err != nil {
return MetricsClientQueryResourceResponse{}, err
}
httpResp, err := client.internal.Pipeline().Do(req)
if err != nil {
return MetricsClientQueryResourceResponse{}, err
}
if !runtime.HasStatusCode(httpResp, http.StatusOK) {
err = runtime.NewResponseError(httpResp)
return MetricsClientQueryResourceResponse{}, err
}
resp, err := client.queryResourceHandleResponse(httpResp)
return resp, err
}
// queryResourceCreateRequest creates the QueryResource request.
func (client *MetricsClient) queryResourceCreateRequest(ctx context.Context, resourceURI string, options *MetricsClientQueryResourceOptions) (*policy.Request, error) {
urlPath := "/{resourceUri}/providers/Microsoft.Insights/metrics"
urlPath = strings.ReplaceAll(urlPath, "{resourceUri}", resourceURI)
req, err := runtime.NewRequest(ctx, http.MethodGet, runtime.JoinPaths(client.host, urlPath))
if err != nil {
return nil, err
}
reqQP := req.Raw().URL.Query()
if options != nil && options.Filter != nil {
reqQP.Set("$filter", *options.Filter)
}
if options != nil && options.AutoAdjustTimegrain != nil {
reqQP.Set("AutoAdjustTimegrain", strconv.FormatBool(*options.AutoAdjustTimegrain))
}
if options != nil && options.ValidateDimensions != nil {
reqQP.Set("ValidateDimensions", strconv.FormatBool(*options.ValidateDimensions))
}
if options != nil && options.Aggregation != nil {
reqQP.Set("aggregation", aggregationTypeToString(options.Aggregation))
}
reqQP.Set("api-version", "2024-02-01")
if options != nil && options.Interval != nil {
reqQP.Set("interval", *options.Interval)
}
if options != nil && options.MetricNames != nil {
reqQP.Set("metricnames", *options.MetricNames)
}
if options != nil && options.MetricNamespace != nil {
reqQP.Set("metricnamespace", *options.MetricNamespace)
}
if options != nil && options.OrderBy != nil {
reqQP.Set("orderby", *options.OrderBy)
}
if options != nil && options.ResultType != nil {
reqQP.Set("resultType", string(*options.ResultType))
}
if options != nil && options.RollUpBy != nil {
reqQP.Set("rollupby", *options.RollUpBy)
}
if options != nil && options.Timespan != nil {
reqQP.Set("timespan", string(*options.Timespan))
}
if options != nil && options.Top != nil {
reqQP.Set("top", strconv.FormatInt(int64(*options.Top), 10))
}
req.Raw().URL.RawQuery = reqQP.Encode()
req.Raw().Header["Accept"] = []string{"application/json"}
return req, nil
}
// queryResourceHandleResponse handles the QueryResource response.
func (client *MetricsClient) queryResourceHandleResponse(resp *http.Response) (MetricsClientQueryResourceResponse, error) {
result := MetricsClientQueryResourceResponse{}
if err := runtime.UnmarshalAsJSON(resp, &result.Response); err != nil {
return MetricsClientQueryResourceResponse{}, err
}
return result, nil
}