1package documentdb
2
3// Copyright (c) Microsoft Corporation. All rights reserved.
4// Licensed under the MIT License. See License.txt in the project root for license information.
5//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"context"
11	"github.com/Azure/go-autorest/autorest"
12	"github.com/Azure/go-autorest/autorest/azure"
13	"github.com/Azure/go-autorest/autorest/validation"
14	"github.com/Azure/go-autorest/tracing"
15	"net/http"
16)
17
18// CollectionPartitionClient is the azure Cosmos DB Database Service Resource Provider REST API
19type CollectionPartitionClient struct {
20	BaseClient
21}
22
23// NewCollectionPartitionClient creates an instance of the CollectionPartitionClient client.
24func NewCollectionPartitionClient(subscriptionID string) CollectionPartitionClient {
25	return NewCollectionPartitionClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewCollectionPartitionClientWithBaseURI creates an instance of the CollectionPartitionClient client using a custom
29// endpoint.  Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure
30// stack).
31func NewCollectionPartitionClientWithBaseURI(baseURI string, subscriptionID string) CollectionPartitionClient {
32	return CollectionPartitionClient{NewWithBaseURI(baseURI, subscriptionID)}
33}
34
35// ListMetrics retrieves the metrics determined by the given filter for the given collection, split by partition.
36// Parameters:
37// resourceGroupName - name of an Azure resource group.
38// accountName - cosmos DB database account name.
39// databaseRid - cosmos DB database rid.
40// collectionRid - cosmos DB collection rid.
41// filter - an OData filter expression that describes a subset of metrics to return. The parameters that can be
42// filtered are name.value (name of the metric, can have an or of multiple names), startTime, endTime, and
43// timeGrain. The supported operator is eq.
44func (client CollectionPartitionClient) ListMetrics(ctx context.Context, resourceGroupName string, accountName string, databaseRid string, collectionRid string, filter string) (result PartitionMetricListResult, err error) {
45	if tracing.IsEnabled() {
46		ctx = tracing.StartSpan(ctx, fqdn+"/CollectionPartitionClient.ListMetrics")
47		defer func() {
48			sc := -1
49			if result.Response.Response != nil {
50				sc = result.Response.Response.StatusCode
51			}
52			tracing.EndSpan(ctx, sc, err)
53		}()
54	}
55	if err := validation.Validate([]validation.Validation{
56		{TargetValue: resourceGroupName,
57			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
58				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
59				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
60		{TargetValue: accountName,
61			Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 50, Chain: nil},
62				{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil},
63				{Target: "accountName", Name: validation.Pattern, Rule: `^[a-z0-9]+(-[a-z0-9]+)*`, Chain: nil}}}}); err != nil {
64		return result, validation.NewError("documentdb.CollectionPartitionClient", "ListMetrics", err.Error())
65	}
66
67	req, err := client.ListMetricsPreparer(ctx, resourceGroupName, accountName, databaseRid, collectionRid, filter)
68	if err != nil {
69		err = autorest.NewErrorWithError(err, "documentdb.CollectionPartitionClient", "ListMetrics", nil, "Failure preparing request")
70		return
71	}
72
73	resp, err := client.ListMetricsSender(req)
74	if err != nil {
75		result.Response = autorest.Response{Response: resp}
76		err = autorest.NewErrorWithError(err, "documentdb.CollectionPartitionClient", "ListMetrics", resp, "Failure sending request")
77		return
78	}
79
80	result, err = client.ListMetricsResponder(resp)
81	if err != nil {
82		err = autorest.NewErrorWithError(err, "documentdb.CollectionPartitionClient", "ListMetrics", resp, "Failure responding to request")
83		return
84	}
85
86	return
87}
88
89// ListMetricsPreparer prepares the ListMetrics request.
90func (client CollectionPartitionClient) ListMetricsPreparer(ctx context.Context, resourceGroupName string, accountName string, databaseRid string, collectionRid string, filter string) (*http.Request, error) {
91	pathParameters := map[string]interface{}{
92		"accountName":       autorest.Encode("path", accountName),
93		"collectionRid":     autorest.Encode("path", collectionRid),
94		"databaseRid":       autorest.Encode("path", databaseRid),
95		"resourceGroupName": autorest.Encode("path", resourceGroupName),
96		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
97	}
98
99	const APIVersion = "2015-04-08"
100	queryParameters := map[string]interface{}{
101		"$filter":     autorest.Encode("query", filter),
102		"api-version": APIVersion,
103	}
104
105	preparer := autorest.CreatePreparer(
106		autorest.AsGet(),
107		autorest.WithBaseURL(client.BaseURI),
108		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/{accountName}/databases/{databaseRid}/collections/{collectionRid}/partitions/metrics", pathParameters),
109		autorest.WithQueryParameters(queryParameters))
110	return preparer.Prepare((&http.Request{}).WithContext(ctx))
111}
112
113// ListMetricsSender sends the ListMetrics request. The method will close the
114// http.Response Body if it receives an error.
115func (client CollectionPartitionClient) ListMetricsSender(req *http.Request) (*http.Response, error) {
116	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
117}
118
119// ListMetricsResponder handles the response to the ListMetrics request. The method always
120// closes the http.Response Body.
121func (client CollectionPartitionClient) ListMetricsResponder(resp *http.Response) (result PartitionMetricListResult, err error) {
122	err = autorest.Respond(
123		resp,
124		azure.WithErrorUnlessStatusCode(http.StatusOK),
125		autorest.ByUnmarshallingJSON(&result),
126		autorest.ByClosing())
127	result.Response = autorest.Response{Response: resp}
128	return
129}
130
131// ListUsages retrieves the usages (most recent storage data) for the given collection, split by partition.
132// Parameters:
133// resourceGroupName - name of an Azure resource group.
134// accountName - cosmos DB database account name.
135// databaseRid - cosmos DB database rid.
136// collectionRid - cosmos DB collection rid.
137// filter - an OData filter expression that describes a subset of usages to return. The supported parameter is
138// name.value (name of the metric, can have an or of multiple names).
139func (client CollectionPartitionClient) ListUsages(ctx context.Context, resourceGroupName string, accountName string, databaseRid string, collectionRid string, filter string) (result PartitionUsagesResult, err error) {
140	if tracing.IsEnabled() {
141		ctx = tracing.StartSpan(ctx, fqdn+"/CollectionPartitionClient.ListUsages")
142		defer func() {
143			sc := -1
144			if result.Response.Response != nil {
145				sc = result.Response.Response.StatusCode
146			}
147			tracing.EndSpan(ctx, sc, err)
148		}()
149	}
150	if err := validation.Validate([]validation.Validation{
151		{TargetValue: resourceGroupName,
152			Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
153				{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
154				{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
155		{TargetValue: accountName,
156			Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 50, Chain: nil},
157				{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil},
158				{Target: "accountName", Name: validation.Pattern, Rule: `^[a-z0-9]+(-[a-z0-9]+)*`, Chain: nil}}}}); err != nil {
159		return result, validation.NewError("documentdb.CollectionPartitionClient", "ListUsages", err.Error())
160	}
161
162	req, err := client.ListUsagesPreparer(ctx, resourceGroupName, accountName, databaseRid, collectionRid, filter)
163	if err != nil {
164		err = autorest.NewErrorWithError(err, "documentdb.CollectionPartitionClient", "ListUsages", nil, "Failure preparing request")
165		return
166	}
167
168	resp, err := client.ListUsagesSender(req)
169	if err != nil {
170		result.Response = autorest.Response{Response: resp}
171		err = autorest.NewErrorWithError(err, "documentdb.CollectionPartitionClient", "ListUsages", resp, "Failure sending request")
172		return
173	}
174
175	result, err = client.ListUsagesResponder(resp)
176	if err != nil {
177		err = autorest.NewErrorWithError(err, "documentdb.CollectionPartitionClient", "ListUsages", resp, "Failure responding to request")
178		return
179	}
180
181	return
182}
183
184// ListUsagesPreparer prepares the ListUsages request.
185func (client CollectionPartitionClient) ListUsagesPreparer(ctx context.Context, resourceGroupName string, accountName string, databaseRid string, collectionRid string, filter string) (*http.Request, error) {
186	pathParameters := map[string]interface{}{
187		"accountName":       autorest.Encode("path", accountName),
188		"collectionRid":     autorest.Encode("path", collectionRid),
189		"databaseRid":       autorest.Encode("path", databaseRid),
190		"resourceGroupName": autorest.Encode("path", resourceGroupName),
191		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
192	}
193
194	const APIVersion = "2015-04-08"
195	queryParameters := map[string]interface{}{
196		"api-version": APIVersion,
197	}
198	if len(filter) > 0 {
199		queryParameters["$filter"] = autorest.Encode("query", filter)
200	}
201
202	preparer := autorest.CreatePreparer(
203		autorest.AsGet(),
204		autorest.WithBaseURL(client.BaseURI),
205		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/{accountName}/databases/{databaseRid}/collections/{collectionRid}/partitions/usages", pathParameters),
206		autorest.WithQueryParameters(queryParameters))
207	return preparer.Prepare((&http.Request{}).WithContext(ctx))
208}
209
210// ListUsagesSender sends the ListUsages request. The method will close the
211// http.Response Body if it receives an error.
212func (client CollectionPartitionClient) ListUsagesSender(req *http.Request) (*http.Response, error) {
213	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
214}
215
216// ListUsagesResponder handles the response to the ListUsages request. The method always
217// closes the http.Response Body.
218func (client CollectionPartitionClient) ListUsagesResponder(resp *http.Response) (result PartitionUsagesResult, err error) {
219	err = autorest.Respond(
220		resp,
221		azure.WithErrorUnlessStatusCode(http.StatusOK),
222		autorest.ByUnmarshallingJSON(&result),
223		autorest.ByClosing())
224	result.Response = autorest.Response{Response: resp}
225	return
226}
227