1package apimanagement
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// ReportsClient is the apiManagement Client
19type ReportsClient struct {
20	BaseClient
21}
22
23// NewReportsClient creates an instance of the ReportsClient client.
24func NewReportsClient(subscriptionID string) ReportsClient {
25	return NewReportsClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewReportsClientWithBaseURI creates an instance of the ReportsClient client using a custom endpoint.  Use this when
29// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewReportsClientWithBaseURI(baseURI string, subscriptionID string) ReportsClient {
31	return ReportsClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// ListByAPI lists report records by API.
35// Parameters:
36// resourceGroupName - the name of the resource group.
37// serviceName - the name of the API Management service.
38// filter - the filter to apply on the operation.
39// top - number of records to return.
40// skip - number of records to skip.
41// orderby - oData order by query option.
42func (client ReportsClient) ListByAPI(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (result ReportCollectionPage, err error) {
43	if tracing.IsEnabled() {
44		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByAPI")
45		defer func() {
46			sc := -1
47			if result.rc.Response.Response != nil {
48				sc = result.rc.Response.Response.StatusCode
49			}
50			tracing.EndSpan(ctx, sc, err)
51		}()
52	}
53	if err := validation.Validate([]validation.Validation{
54		{TargetValue: serviceName,
55			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
56				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
57				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
58		{TargetValue: top,
59			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
60				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
61		{TargetValue: skip,
62			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
63				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
64		return result, validation.NewError("apimanagement.ReportsClient", "ListByAPI", err.Error())
65	}
66
67	result.fn = client.listByAPINextResults
68	req, err := client.ListByAPIPreparer(ctx, resourceGroupName, serviceName, filter, top, skip, orderby)
69	if err != nil {
70		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByAPI", nil, "Failure preparing request")
71		return
72	}
73
74	resp, err := client.ListByAPISender(req)
75	if err != nil {
76		result.rc.Response = autorest.Response{Response: resp}
77		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByAPI", resp, "Failure sending request")
78		return
79	}
80
81	result.rc, err = client.ListByAPIResponder(resp)
82	if err != nil {
83		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByAPI", resp, "Failure responding to request")
84		return
85	}
86	if result.rc.hasNextLink() && result.rc.IsEmpty() {
87		err = result.NextWithContext(ctx)
88		return
89	}
90
91	return
92}
93
94// ListByAPIPreparer prepares the ListByAPI request.
95func (client ReportsClient) ListByAPIPreparer(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (*http.Request, error) {
96	pathParameters := map[string]interface{}{
97		"resourceGroupName": autorest.Encode("path", resourceGroupName),
98		"serviceName":       autorest.Encode("path", serviceName),
99		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
100	}
101
102	const APIVersion = "2020-12-01"
103	queryParameters := map[string]interface{}{
104		"$filter":     autorest.Encode("query", filter),
105		"api-version": APIVersion,
106	}
107	if top != nil {
108		queryParameters["$top"] = autorest.Encode("query", *top)
109	}
110	if skip != nil {
111		queryParameters["$skip"] = autorest.Encode("query", *skip)
112	}
113	if len(orderby) > 0 {
114		queryParameters["$orderby"] = autorest.Encode("query", orderby)
115	}
116
117	preparer := autorest.CreatePreparer(
118		autorest.AsGet(),
119		autorest.WithBaseURL(client.BaseURI),
120		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/reports/byApi", pathParameters),
121		autorest.WithQueryParameters(queryParameters))
122	return preparer.Prepare((&http.Request{}).WithContext(ctx))
123}
124
125// ListByAPISender sends the ListByAPI request. The method will close the
126// http.Response Body if it receives an error.
127func (client ReportsClient) ListByAPISender(req *http.Request) (*http.Response, error) {
128	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
129}
130
131// ListByAPIResponder handles the response to the ListByAPI request. The method always
132// closes the http.Response Body.
133func (client ReportsClient) ListByAPIResponder(resp *http.Response) (result ReportCollection, err error) {
134	err = autorest.Respond(
135		resp,
136		azure.WithErrorUnlessStatusCode(http.StatusOK),
137		autorest.ByUnmarshallingJSON(&result),
138		autorest.ByClosing())
139	result.Response = autorest.Response{Response: resp}
140	return
141}
142
143// listByAPINextResults retrieves the next set of results, if any.
144func (client ReportsClient) listByAPINextResults(ctx context.Context, lastResults ReportCollection) (result ReportCollection, err error) {
145	req, err := lastResults.reportCollectionPreparer(ctx)
146	if err != nil {
147		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByAPINextResults", nil, "Failure preparing next results request")
148	}
149	if req == nil {
150		return
151	}
152	resp, err := client.ListByAPISender(req)
153	if err != nil {
154		result.Response = autorest.Response{Response: resp}
155		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByAPINextResults", resp, "Failure sending next results request")
156	}
157	result, err = client.ListByAPIResponder(resp)
158	if err != nil {
159		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByAPINextResults", resp, "Failure responding to next results request")
160	}
161	return
162}
163
164// ListByAPIComplete enumerates all values, automatically crossing page boundaries as required.
165func (client ReportsClient) ListByAPIComplete(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (result ReportCollectionIterator, err error) {
166	if tracing.IsEnabled() {
167		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByAPI")
168		defer func() {
169			sc := -1
170			if result.Response().Response.Response != nil {
171				sc = result.page.Response().Response.Response.StatusCode
172			}
173			tracing.EndSpan(ctx, sc, err)
174		}()
175	}
176	result.page, err = client.ListByAPI(ctx, resourceGroupName, serviceName, filter, top, skip, orderby)
177	return
178}
179
180// ListByGeo lists report records by geography.
181// Parameters:
182// resourceGroupName - the name of the resource group.
183// serviceName - the name of the API Management service.
184// filter - |   Field     |     Usage     |     Supported operators     |     Supported functions
185// |</br>|-------------|-------------|-------------|-------------|</br>| timestamp | filter | ge, le |     |
186// </br>| country | select |     |     | </br>| region | select |     |     | </br>| zip | select |     |     |
187// </br>| apiRegion | filter | eq |     | </br>| userId | filter | eq |     | </br>| productId | filter | eq |
188// | </br>| subscriptionId | filter | eq |     | </br>| apiId | filter | eq |     | </br>| operationId | filter
189// | eq |     | </br>| callCountSuccess | select |     |     | </br>| callCountBlocked | select |     |     |
190// </br>| callCountFailed | select |     |     | </br>| callCountOther | select |     |     | </br>| bandwidth
191// | select, orderBy |     |     | </br>| cacheHitsCount | select |     |     | </br>| cacheMissCount | select
192// |     |     | </br>| apiTimeAvg | select |     |     | </br>| apiTimeMin | select |     |     | </br>|
193// apiTimeMax | select |     |     | </br>| serviceTimeAvg | select |     |     | </br>| serviceTimeMin |
194// select |     |     | </br>| serviceTimeMax | select |     |     | </br>
195// top - number of records to return.
196// skip - number of records to skip.
197func (client ReportsClient) ListByGeo(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (result ReportCollectionPage, err error) {
198	if tracing.IsEnabled() {
199		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByGeo")
200		defer func() {
201			sc := -1
202			if result.rc.Response.Response != nil {
203				sc = result.rc.Response.Response.StatusCode
204			}
205			tracing.EndSpan(ctx, sc, err)
206		}()
207	}
208	if err := validation.Validate([]validation.Validation{
209		{TargetValue: serviceName,
210			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
211				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
212				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
213		{TargetValue: top,
214			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
215				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
216		{TargetValue: skip,
217			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
218				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
219		return result, validation.NewError("apimanagement.ReportsClient", "ListByGeo", err.Error())
220	}
221
222	result.fn = client.listByGeoNextResults
223	req, err := client.ListByGeoPreparer(ctx, resourceGroupName, serviceName, filter, top, skip)
224	if err != nil {
225		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByGeo", nil, "Failure preparing request")
226		return
227	}
228
229	resp, err := client.ListByGeoSender(req)
230	if err != nil {
231		result.rc.Response = autorest.Response{Response: resp}
232		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByGeo", resp, "Failure sending request")
233		return
234	}
235
236	result.rc, err = client.ListByGeoResponder(resp)
237	if err != nil {
238		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByGeo", resp, "Failure responding to request")
239		return
240	}
241	if result.rc.hasNextLink() && result.rc.IsEmpty() {
242		err = result.NextWithContext(ctx)
243		return
244	}
245
246	return
247}
248
249// ListByGeoPreparer prepares the ListByGeo request.
250func (client ReportsClient) ListByGeoPreparer(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (*http.Request, error) {
251	pathParameters := map[string]interface{}{
252		"resourceGroupName": autorest.Encode("path", resourceGroupName),
253		"serviceName":       autorest.Encode("path", serviceName),
254		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
255	}
256
257	const APIVersion = "2020-12-01"
258	queryParameters := map[string]interface{}{
259		"$filter":     autorest.Encode("query", filter),
260		"api-version": APIVersion,
261	}
262	if top != nil {
263		queryParameters["$top"] = autorest.Encode("query", *top)
264	}
265	if skip != nil {
266		queryParameters["$skip"] = autorest.Encode("query", *skip)
267	}
268
269	preparer := autorest.CreatePreparer(
270		autorest.AsGet(),
271		autorest.WithBaseURL(client.BaseURI),
272		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/reports/byGeo", pathParameters),
273		autorest.WithQueryParameters(queryParameters))
274	return preparer.Prepare((&http.Request{}).WithContext(ctx))
275}
276
277// ListByGeoSender sends the ListByGeo request. The method will close the
278// http.Response Body if it receives an error.
279func (client ReportsClient) ListByGeoSender(req *http.Request) (*http.Response, error) {
280	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
281}
282
283// ListByGeoResponder handles the response to the ListByGeo request. The method always
284// closes the http.Response Body.
285func (client ReportsClient) ListByGeoResponder(resp *http.Response) (result ReportCollection, err error) {
286	err = autorest.Respond(
287		resp,
288		azure.WithErrorUnlessStatusCode(http.StatusOK),
289		autorest.ByUnmarshallingJSON(&result),
290		autorest.ByClosing())
291	result.Response = autorest.Response{Response: resp}
292	return
293}
294
295// listByGeoNextResults retrieves the next set of results, if any.
296func (client ReportsClient) listByGeoNextResults(ctx context.Context, lastResults ReportCollection) (result ReportCollection, err error) {
297	req, err := lastResults.reportCollectionPreparer(ctx)
298	if err != nil {
299		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByGeoNextResults", nil, "Failure preparing next results request")
300	}
301	if req == nil {
302		return
303	}
304	resp, err := client.ListByGeoSender(req)
305	if err != nil {
306		result.Response = autorest.Response{Response: resp}
307		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByGeoNextResults", resp, "Failure sending next results request")
308	}
309	result, err = client.ListByGeoResponder(resp)
310	if err != nil {
311		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByGeoNextResults", resp, "Failure responding to next results request")
312	}
313	return
314}
315
316// ListByGeoComplete enumerates all values, automatically crossing page boundaries as required.
317func (client ReportsClient) ListByGeoComplete(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (result ReportCollectionIterator, err error) {
318	if tracing.IsEnabled() {
319		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByGeo")
320		defer func() {
321			sc := -1
322			if result.Response().Response.Response != nil {
323				sc = result.page.Response().Response.Response.StatusCode
324			}
325			tracing.EndSpan(ctx, sc, err)
326		}()
327	}
328	result.page, err = client.ListByGeo(ctx, resourceGroupName, serviceName, filter, top, skip)
329	return
330}
331
332// ListByOperation lists report records by API Operations.
333// Parameters:
334// resourceGroupName - the name of the resource group.
335// serviceName - the name of the API Management service.
336// filter - |   Field     |     Usage     |     Supported operators     |     Supported functions
337// |</br>|-------------|-------------|-------------|-------------|</br>| timestamp | filter | ge, le |     |
338// </br>| displayName | select, orderBy |     |     | </br>| apiRegion | filter | eq |     | </br>| userId |
339// filter | eq |     | </br>| productId | filter | eq |     | </br>| subscriptionId | filter | eq |     |
340// </br>| apiId | filter | eq |     | </br>| operationId | select, filter | eq |     | </br>| callCountSuccess
341// | select, orderBy |     |     | </br>| callCountBlocked | select, orderBy |     |     | </br>|
342// callCountFailed | select, orderBy |     |     | </br>| callCountOther | select, orderBy |     |     | </br>|
343// callCountTotal | select, orderBy |     |     | </br>| bandwidth | select, orderBy |     |     | </br>|
344// cacheHitsCount | select |     |     | </br>| cacheMissCount | select |     |     | </br>| apiTimeAvg |
345// select, orderBy |     |     | </br>| apiTimeMin | select |     |     | </br>| apiTimeMax | select |     |
346// | </br>| serviceTimeAvg | select |     |     | </br>| serviceTimeMin | select |     |     | </br>|
347// serviceTimeMax | select |     |     | </br>
348// top - number of records to return.
349// skip - number of records to skip.
350// orderby - oData order by query option.
351func (client ReportsClient) ListByOperation(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (result ReportCollectionPage, err error) {
352	if tracing.IsEnabled() {
353		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByOperation")
354		defer func() {
355			sc := -1
356			if result.rc.Response.Response != nil {
357				sc = result.rc.Response.Response.StatusCode
358			}
359			tracing.EndSpan(ctx, sc, err)
360		}()
361	}
362	if err := validation.Validate([]validation.Validation{
363		{TargetValue: serviceName,
364			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
365				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
366				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
367		{TargetValue: top,
368			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
369				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
370		{TargetValue: skip,
371			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
372				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
373		return result, validation.NewError("apimanagement.ReportsClient", "ListByOperation", err.Error())
374	}
375
376	result.fn = client.listByOperationNextResults
377	req, err := client.ListByOperationPreparer(ctx, resourceGroupName, serviceName, filter, top, skip, orderby)
378	if err != nil {
379		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByOperation", nil, "Failure preparing request")
380		return
381	}
382
383	resp, err := client.ListByOperationSender(req)
384	if err != nil {
385		result.rc.Response = autorest.Response{Response: resp}
386		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByOperation", resp, "Failure sending request")
387		return
388	}
389
390	result.rc, err = client.ListByOperationResponder(resp)
391	if err != nil {
392		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByOperation", resp, "Failure responding to request")
393		return
394	}
395	if result.rc.hasNextLink() && result.rc.IsEmpty() {
396		err = result.NextWithContext(ctx)
397		return
398	}
399
400	return
401}
402
403// ListByOperationPreparer prepares the ListByOperation request.
404func (client ReportsClient) ListByOperationPreparer(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (*http.Request, error) {
405	pathParameters := map[string]interface{}{
406		"resourceGroupName": autorest.Encode("path", resourceGroupName),
407		"serviceName":       autorest.Encode("path", serviceName),
408		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
409	}
410
411	const APIVersion = "2020-12-01"
412	queryParameters := map[string]interface{}{
413		"$filter":     autorest.Encode("query", filter),
414		"api-version": APIVersion,
415	}
416	if top != nil {
417		queryParameters["$top"] = autorest.Encode("query", *top)
418	}
419	if skip != nil {
420		queryParameters["$skip"] = autorest.Encode("query", *skip)
421	}
422	if len(orderby) > 0 {
423		queryParameters["$orderby"] = autorest.Encode("query", orderby)
424	}
425
426	preparer := autorest.CreatePreparer(
427		autorest.AsGet(),
428		autorest.WithBaseURL(client.BaseURI),
429		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/reports/byOperation", pathParameters),
430		autorest.WithQueryParameters(queryParameters))
431	return preparer.Prepare((&http.Request{}).WithContext(ctx))
432}
433
434// ListByOperationSender sends the ListByOperation request. The method will close the
435// http.Response Body if it receives an error.
436func (client ReportsClient) ListByOperationSender(req *http.Request) (*http.Response, error) {
437	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
438}
439
440// ListByOperationResponder handles the response to the ListByOperation request. The method always
441// closes the http.Response Body.
442func (client ReportsClient) ListByOperationResponder(resp *http.Response) (result ReportCollection, err error) {
443	err = autorest.Respond(
444		resp,
445		azure.WithErrorUnlessStatusCode(http.StatusOK),
446		autorest.ByUnmarshallingJSON(&result),
447		autorest.ByClosing())
448	result.Response = autorest.Response{Response: resp}
449	return
450}
451
452// listByOperationNextResults retrieves the next set of results, if any.
453func (client ReportsClient) listByOperationNextResults(ctx context.Context, lastResults ReportCollection) (result ReportCollection, err error) {
454	req, err := lastResults.reportCollectionPreparer(ctx)
455	if err != nil {
456		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByOperationNextResults", nil, "Failure preparing next results request")
457	}
458	if req == nil {
459		return
460	}
461	resp, err := client.ListByOperationSender(req)
462	if err != nil {
463		result.Response = autorest.Response{Response: resp}
464		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByOperationNextResults", resp, "Failure sending next results request")
465	}
466	result, err = client.ListByOperationResponder(resp)
467	if err != nil {
468		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByOperationNextResults", resp, "Failure responding to next results request")
469	}
470	return
471}
472
473// ListByOperationComplete enumerates all values, automatically crossing page boundaries as required.
474func (client ReportsClient) ListByOperationComplete(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (result ReportCollectionIterator, err error) {
475	if tracing.IsEnabled() {
476		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByOperation")
477		defer func() {
478			sc := -1
479			if result.Response().Response.Response != nil {
480				sc = result.page.Response().Response.Response.StatusCode
481			}
482			tracing.EndSpan(ctx, sc, err)
483		}()
484	}
485	result.page, err = client.ListByOperation(ctx, resourceGroupName, serviceName, filter, top, skip, orderby)
486	return
487}
488
489// ListByProduct lists report records by Product.
490// Parameters:
491// resourceGroupName - the name of the resource group.
492// serviceName - the name of the API Management service.
493// filter - |   Field     |     Usage     |     Supported operators     |     Supported functions
494// |</br>|-------------|-------------|-------------|-------------|</br>| timestamp | filter | ge, le |     |
495// </br>| displayName | select, orderBy |     |     | </br>| apiRegion | filter | eq |     | </br>| userId |
496// filter | eq |     | </br>| productId | select, filter | eq |     | </br>| subscriptionId | filter | eq |
497// | </br>| callCountSuccess | select, orderBy |     |     | </br>| callCountBlocked | select, orderBy |     |
498// | </br>| callCountFailed | select, orderBy |     |     | </br>| callCountOther | select, orderBy |     |
499// | </br>| callCountTotal | select, orderBy |     |     | </br>| bandwidth | select, orderBy |     |     |
500// </br>| cacheHitsCount | select |     |     | </br>| cacheMissCount | select |     |     | </br>| apiTimeAvg
501// | select, orderBy |     |     | </br>| apiTimeMin | select |     |     | </br>| apiTimeMax | select |     |
502// | </br>| serviceTimeAvg | select |     |     | </br>| serviceTimeMin | select |     |     | </br>|
503// serviceTimeMax | select |     |     | </br>
504// top - number of records to return.
505// skip - number of records to skip.
506// orderby - oData order by query option.
507func (client ReportsClient) ListByProduct(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (result ReportCollectionPage, err error) {
508	if tracing.IsEnabled() {
509		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByProduct")
510		defer func() {
511			sc := -1
512			if result.rc.Response.Response != nil {
513				sc = result.rc.Response.Response.StatusCode
514			}
515			tracing.EndSpan(ctx, sc, err)
516		}()
517	}
518	if err := validation.Validate([]validation.Validation{
519		{TargetValue: serviceName,
520			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
521				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
522				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
523		{TargetValue: top,
524			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
525				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
526		{TargetValue: skip,
527			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
528				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
529		return result, validation.NewError("apimanagement.ReportsClient", "ListByProduct", err.Error())
530	}
531
532	result.fn = client.listByProductNextResults
533	req, err := client.ListByProductPreparer(ctx, resourceGroupName, serviceName, filter, top, skip, orderby)
534	if err != nil {
535		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByProduct", nil, "Failure preparing request")
536		return
537	}
538
539	resp, err := client.ListByProductSender(req)
540	if err != nil {
541		result.rc.Response = autorest.Response{Response: resp}
542		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByProduct", resp, "Failure sending request")
543		return
544	}
545
546	result.rc, err = client.ListByProductResponder(resp)
547	if err != nil {
548		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByProduct", resp, "Failure responding to request")
549		return
550	}
551	if result.rc.hasNextLink() && result.rc.IsEmpty() {
552		err = result.NextWithContext(ctx)
553		return
554	}
555
556	return
557}
558
559// ListByProductPreparer prepares the ListByProduct request.
560func (client ReportsClient) ListByProductPreparer(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (*http.Request, error) {
561	pathParameters := map[string]interface{}{
562		"resourceGroupName": autorest.Encode("path", resourceGroupName),
563		"serviceName":       autorest.Encode("path", serviceName),
564		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
565	}
566
567	const APIVersion = "2020-12-01"
568	queryParameters := map[string]interface{}{
569		"$filter":     autorest.Encode("query", filter),
570		"api-version": APIVersion,
571	}
572	if top != nil {
573		queryParameters["$top"] = autorest.Encode("query", *top)
574	}
575	if skip != nil {
576		queryParameters["$skip"] = autorest.Encode("query", *skip)
577	}
578	if len(orderby) > 0 {
579		queryParameters["$orderby"] = autorest.Encode("query", orderby)
580	}
581
582	preparer := autorest.CreatePreparer(
583		autorest.AsGet(),
584		autorest.WithBaseURL(client.BaseURI),
585		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/reports/byProduct", pathParameters),
586		autorest.WithQueryParameters(queryParameters))
587	return preparer.Prepare((&http.Request{}).WithContext(ctx))
588}
589
590// ListByProductSender sends the ListByProduct request. The method will close the
591// http.Response Body if it receives an error.
592func (client ReportsClient) ListByProductSender(req *http.Request) (*http.Response, error) {
593	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
594}
595
596// ListByProductResponder handles the response to the ListByProduct request. The method always
597// closes the http.Response Body.
598func (client ReportsClient) ListByProductResponder(resp *http.Response) (result ReportCollection, err error) {
599	err = autorest.Respond(
600		resp,
601		azure.WithErrorUnlessStatusCode(http.StatusOK),
602		autorest.ByUnmarshallingJSON(&result),
603		autorest.ByClosing())
604	result.Response = autorest.Response{Response: resp}
605	return
606}
607
608// listByProductNextResults retrieves the next set of results, if any.
609func (client ReportsClient) listByProductNextResults(ctx context.Context, lastResults ReportCollection) (result ReportCollection, err error) {
610	req, err := lastResults.reportCollectionPreparer(ctx)
611	if err != nil {
612		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByProductNextResults", nil, "Failure preparing next results request")
613	}
614	if req == nil {
615		return
616	}
617	resp, err := client.ListByProductSender(req)
618	if err != nil {
619		result.Response = autorest.Response{Response: resp}
620		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByProductNextResults", resp, "Failure sending next results request")
621	}
622	result, err = client.ListByProductResponder(resp)
623	if err != nil {
624		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByProductNextResults", resp, "Failure responding to next results request")
625	}
626	return
627}
628
629// ListByProductComplete enumerates all values, automatically crossing page boundaries as required.
630func (client ReportsClient) ListByProductComplete(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (result ReportCollectionIterator, err error) {
631	if tracing.IsEnabled() {
632		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByProduct")
633		defer func() {
634			sc := -1
635			if result.Response().Response.Response != nil {
636				sc = result.page.Response().Response.Response.StatusCode
637			}
638			tracing.EndSpan(ctx, sc, err)
639		}()
640	}
641	result.page, err = client.ListByProduct(ctx, resourceGroupName, serviceName, filter, top, skip, orderby)
642	return
643}
644
645// ListByRequest lists report records by Request.
646// Parameters:
647// resourceGroupName - the name of the resource group.
648// serviceName - the name of the API Management service.
649// filter - |   Field     |     Usage     |     Supported operators     |     Supported functions
650// |</br>|-------------|-------------|-------------|-------------|</br>| timestamp | filter | ge, le |     |
651// </br>| apiId | filter | eq |     | </br>| operationId | filter | eq |     | </br>| productId | filter | eq |
652// | </br>| userId | filter | eq |     | </br>| apiRegion | filter | eq |     | </br>| subscriptionId | filter
653// | eq |     | </br>
654// top - number of records to return.
655// skip - number of records to skip.
656func (client ReportsClient) ListByRequest(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (result RequestReportCollection, err error) {
657	if tracing.IsEnabled() {
658		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByRequest")
659		defer func() {
660			sc := -1
661			if result.Response.Response != nil {
662				sc = result.Response.Response.StatusCode
663			}
664			tracing.EndSpan(ctx, sc, err)
665		}()
666	}
667	if err := validation.Validate([]validation.Validation{
668		{TargetValue: serviceName,
669			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
670				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
671				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
672		{TargetValue: top,
673			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
674				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
675		{TargetValue: skip,
676			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
677				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
678		return result, validation.NewError("apimanagement.ReportsClient", "ListByRequest", err.Error())
679	}
680
681	req, err := client.ListByRequestPreparer(ctx, resourceGroupName, serviceName, filter, top, skip)
682	if err != nil {
683		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByRequest", nil, "Failure preparing request")
684		return
685	}
686
687	resp, err := client.ListByRequestSender(req)
688	if err != nil {
689		result.Response = autorest.Response{Response: resp}
690		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByRequest", resp, "Failure sending request")
691		return
692	}
693
694	result, err = client.ListByRequestResponder(resp)
695	if err != nil {
696		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByRequest", resp, "Failure responding to request")
697		return
698	}
699
700	return
701}
702
703// ListByRequestPreparer prepares the ListByRequest request.
704func (client ReportsClient) ListByRequestPreparer(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32) (*http.Request, error) {
705	pathParameters := map[string]interface{}{
706		"resourceGroupName": autorest.Encode("path", resourceGroupName),
707		"serviceName":       autorest.Encode("path", serviceName),
708		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
709	}
710
711	const APIVersion = "2020-12-01"
712	queryParameters := map[string]interface{}{
713		"$filter":     autorest.Encode("query", filter),
714		"api-version": APIVersion,
715	}
716	if top != nil {
717		queryParameters["$top"] = autorest.Encode("query", *top)
718	}
719	if skip != nil {
720		queryParameters["$skip"] = autorest.Encode("query", *skip)
721	}
722
723	preparer := autorest.CreatePreparer(
724		autorest.AsGet(),
725		autorest.WithBaseURL(client.BaseURI),
726		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/reports/byRequest", pathParameters),
727		autorest.WithQueryParameters(queryParameters))
728	return preparer.Prepare((&http.Request{}).WithContext(ctx))
729}
730
731// ListByRequestSender sends the ListByRequest request. The method will close the
732// http.Response Body if it receives an error.
733func (client ReportsClient) ListByRequestSender(req *http.Request) (*http.Response, error) {
734	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
735}
736
737// ListByRequestResponder handles the response to the ListByRequest request. The method always
738// closes the http.Response Body.
739func (client ReportsClient) ListByRequestResponder(resp *http.Response) (result RequestReportCollection, err error) {
740	err = autorest.Respond(
741		resp,
742		azure.WithErrorUnlessStatusCode(http.StatusOK),
743		autorest.ByUnmarshallingJSON(&result),
744		autorest.ByClosing())
745	result.Response = autorest.Response{Response: resp}
746	return
747}
748
749// ListBySubscription lists report records by subscription.
750// Parameters:
751// resourceGroupName - the name of the resource group.
752// serviceName - the name of the API Management service.
753// filter - |   Field     |     Usage     |     Supported operators     |     Supported functions
754// |</br>|-------------|-------------|-------------|-------------|</br>| timestamp | filter | ge, le |     |
755// </br>| displayName | select, orderBy |     |     | </br>| apiRegion | filter | eq |     | </br>| userId |
756// select, filter | eq |     | </br>| productId | select, filter | eq |     | </br>| subscriptionId | select,
757// filter | eq |     | </br>| callCountSuccess | select, orderBy |     |     | </br>| callCountBlocked |
758// select, orderBy |     |     | </br>| callCountFailed | select, orderBy |     |     | </br>| callCountOther |
759// select, orderBy |     |     | </br>| callCountTotal | select, orderBy |     |     | </br>| bandwidth |
760// select, orderBy |     |     | </br>| cacheHitsCount | select |     |     | </br>| cacheMissCount | select |
761// |     | </br>| apiTimeAvg | select, orderBy |     |     | </br>| apiTimeMin | select |     |     | </br>|
762// apiTimeMax | select |     |     | </br>| serviceTimeAvg | select |     |     | </br>| serviceTimeMin |
763// select |     |     | </br>| serviceTimeMax | select |     |     | </br>
764// top - number of records to return.
765// skip - number of records to skip.
766// orderby - oData order by query option.
767func (client ReportsClient) ListBySubscription(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (result ReportCollectionPage, err error) {
768	if tracing.IsEnabled() {
769		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListBySubscription")
770		defer func() {
771			sc := -1
772			if result.rc.Response.Response != nil {
773				sc = result.rc.Response.Response.StatusCode
774			}
775			tracing.EndSpan(ctx, sc, err)
776		}()
777	}
778	if err := validation.Validate([]validation.Validation{
779		{TargetValue: serviceName,
780			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
781				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
782				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
783		{TargetValue: top,
784			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
785				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
786		{TargetValue: skip,
787			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
788				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
789		return result, validation.NewError("apimanagement.ReportsClient", "ListBySubscription", err.Error())
790	}
791
792	result.fn = client.listBySubscriptionNextResults
793	req, err := client.ListBySubscriptionPreparer(ctx, resourceGroupName, serviceName, filter, top, skip, orderby)
794	if err != nil {
795		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListBySubscription", nil, "Failure preparing request")
796		return
797	}
798
799	resp, err := client.ListBySubscriptionSender(req)
800	if err != nil {
801		result.rc.Response = autorest.Response{Response: resp}
802		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListBySubscription", resp, "Failure sending request")
803		return
804	}
805
806	result.rc, err = client.ListBySubscriptionResponder(resp)
807	if err != nil {
808		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListBySubscription", resp, "Failure responding to request")
809		return
810	}
811	if result.rc.hasNextLink() && result.rc.IsEmpty() {
812		err = result.NextWithContext(ctx)
813		return
814	}
815
816	return
817}
818
819// ListBySubscriptionPreparer prepares the ListBySubscription request.
820func (client ReportsClient) ListBySubscriptionPreparer(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (*http.Request, error) {
821	pathParameters := map[string]interface{}{
822		"resourceGroupName": autorest.Encode("path", resourceGroupName),
823		"serviceName":       autorest.Encode("path", serviceName),
824		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
825	}
826
827	const APIVersion = "2020-12-01"
828	queryParameters := map[string]interface{}{
829		"$filter":     autorest.Encode("query", filter),
830		"api-version": APIVersion,
831	}
832	if top != nil {
833		queryParameters["$top"] = autorest.Encode("query", *top)
834	}
835	if skip != nil {
836		queryParameters["$skip"] = autorest.Encode("query", *skip)
837	}
838	if len(orderby) > 0 {
839		queryParameters["$orderby"] = autorest.Encode("query", orderby)
840	}
841
842	preparer := autorest.CreatePreparer(
843		autorest.AsGet(),
844		autorest.WithBaseURL(client.BaseURI),
845		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/reports/bySubscription", pathParameters),
846		autorest.WithQueryParameters(queryParameters))
847	return preparer.Prepare((&http.Request{}).WithContext(ctx))
848}
849
850// ListBySubscriptionSender sends the ListBySubscription request. The method will close the
851// http.Response Body if it receives an error.
852func (client ReportsClient) ListBySubscriptionSender(req *http.Request) (*http.Response, error) {
853	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
854}
855
856// ListBySubscriptionResponder handles the response to the ListBySubscription request. The method always
857// closes the http.Response Body.
858func (client ReportsClient) ListBySubscriptionResponder(resp *http.Response) (result ReportCollection, err error) {
859	err = autorest.Respond(
860		resp,
861		azure.WithErrorUnlessStatusCode(http.StatusOK),
862		autorest.ByUnmarshallingJSON(&result),
863		autorest.ByClosing())
864	result.Response = autorest.Response{Response: resp}
865	return
866}
867
868// listBySubscriptionNextResults retrieves the next set of results, if any.
869func (client ReportsClient) listBySubscriptionNextResults(ctx context.Context, lastResults ReportCollection) (result ReportCollection, err error) {
870	req, err := lastResults.reportCollectionPreparer(ctx)
871	if err != nil {
872		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listBySubscriptionNextResults", nil, "Failure preparing next results request")
873	}
874	if req == nil {
875		return
876	}
877	resp, err := client.ListBySubscriptionSender(req)
878	if err != nil {
879		result.Response = autorest.Response{Response: resp}
880		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listBySubscriptionNextResults", resp, "Failure sending next results request")
881	}
882	result, err = client.ListBySubscriptionResponder(resp)
883	if err != nil {
884		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listBySubscriptionNextResults", resp, "Failure responding to next results request")
885	}
886	return
887}
888
889// ListBySubscriptionComplete enumerates all values, automatically crossing page boundaries as required.
890func (client ReportsClient) ListBySubscriptionComplete(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (result ReportCollectionIterator, err error) {
891	if tracing.IsEnabled() {
892		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListBySubscription")
893		defer func() {
894			sc := -1
895			if result.Response().Response.Response != nil {
896				sc = result.page.Response().Response.Response.StatusCode
897			}
898			tracing.EndSpan(ctx, sc, err)
899		}()
900	}
901	result.page, err = client.ListBySubscription(ctx, resourceGroupName, serviceName, filter, top, skip, orderby)
902	return
903}
904
905// ListByTime lists report records by Time.
906// Parameters:
907// resourceGroupName - the name of the resource group.
908// serviceName - the name of the API Management service.
909// filter - |   Field     |     Usage     |     Supported operators     |     Supported functions
910// |</br>|-------------|-------------|-------------|-------------|</br>| timestamp | filter, select | ge, le |
911// | </br>| interval | select |     |     | </br>| apiRegion | filter | eq |     | </br>| userId | filter | eq
912// |     | </br>| productId | filter | eq |     | </br>| subscriptionId | filter | eq |     | </br>| apiId |
913// filter | eq |     | </br>| operationId | filter | eq |     | </br>| callCountSuccess | select |     |     |
914// </br>| callCountBlocked | select |     |     | </br>| callCountFailed | select |     |     | </br>|
915// callCountOther | select |     |     | </br>| bandwidth | select, orderBy |     |     | </br>| cacheHitsCount
916// | select |     |     | </br>| cacheMissCount | select |     |     | </br>| apiTimeAvg | select |     |     |
917// </br>| apiTimeMin | select |     |     | </br>| apiTimeMax | select |     |     | </br>| serviceTimeAvg |
918// select |     |     | </br>| serviceTimeMin | select |     |     | </br>| serviceTimeMax | select |     |
919// | </br>
920// interval - by time interval. Interval must be multiple of 15 minutes and may not be zero. The value should
921// be in ISO  8601 format (http://en.wikipedia.org/wiki/ISO_8601#Durations).This code can be used to convert
922// TimeSpan to a valid interval string: XmlConvert.ToString(new TimeSpan(hours, minutes, seconds)).
923// top - number of records to return.
924// skip - number of records to skip.
925// orderby - oData order by query option.
926func (client ReportsClient) ListByTime(ctx context.Context, resourceGroupName string, serviceName string, filter string, interval string, top *int32, skip *int32, orderby string) (result ReportCollectionPage, err error) {
927	if tracing.IsEnabled() {
928		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByTime")
929		defer func() {
930			sc := -1
931			if result.rc.Response.Response != nil {
932				sc = result.rc.Response.Response.StatusCode
933			}
934			tracing.EndSpan(ctx, sc, err)
935		}()
936	}
937	if err := validation.Validate([]validation.Validation{
938		{TargetValue: serviceName,
939			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
940				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
941				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
942		{TargetValue: top,
943			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
944				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
945		{TargetValue: skip,
946			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
947				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
948		return result, validation.NewError("apimanagement.ReportsClient", "ListByTime", err.Error())
949	}
950
951	result.fn = client.listByTimeNextResults
952	req, err := client.ListByTimePreparer(ctx, resourceGroupName, serviceName, filter, interval, top, skip, orderby)
953	if err != nil {
954		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByTime", nil, "Failure preparing request")
955		return
956	}
957
958	resp, err := client.ListByTimeSender(req)
959	if err != nil {
960		result.rc.Response = autorest.Response{Response: resp}
961		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByTime", resp, "Failure sending request")
962		return
963	}
964
965	result.rc, err = client.ListByTimeResponder(resp)
966	if err != nil {
967		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByTime", resp, "Failure responding to request")
968		return
969	}
970	if result.rc.hasNextLink() && result.rc.IsEmpty() {
971		err = result.NextWithContext(ctx)
972		return
973	}
974
975	return
976}
977
978// ListByTimePreparer prepares the ListByTime request.
979func (client ReportsClient) ListByTimePreparer(ctx context.Context, resourceGroupName string, serviceName string, filter string, interval string, top *int32, skip *int32, orderby string) (*http.Request, error) {
980	pathParameters := map[string]interface{}{
981		"resourceGroupName": autorest.Encode("path", resourceGroupName),
982		"serviceName":       autorest.Encode("path", serviceName),
983		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
984	}
985
986	const APIVersion = "2020-12-01"
987	queryParameters := map[string]interface{}{
988		"$filter":     autorest.Encode("query", filter),
989		"api-version": APIVersion,
990		"interval":    autorest.Encode("query", interval),
991	}
992	if top != nil {
993		queryParameters["$top"] = autorest.Encode("query", *top)
994	}
995	if skip != nil {
996		queryParameters["$skip"] = autorest.Encode("query", *skip)
997	}
998	if len(orderby) > 0 {
999		queryParameters["$orderby"] = autorest.Encode("query", orderby)
1000	}
1001
1002	preparer := autorest.CreatePreparer(
1003		autorest.AsGet(),
1004		autorest.WithBaseURL(client.BaseURI),
1005		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/reports/byTime", pathParameters),
1006		autorest.WithQueryParameters(queryParameters))
1007	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1008}
1009
1010// ListByTimeSender sends the ListByTime request. The method will close the
1011// http.Response Body if it receives an error.
1012func (client ReportsClient) ListByTimeSender(req *http.Request) (*http.Response, error) {
1013	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
1014}
1015
1016// ListByTimeResponder handles the response to the ListByTime request. The method always
1017// closes the http.Response Body.
1018func (client ReportsClient) ListByTimeResponder(resp *http.Response) (result ReportCollection, err error) {
1019	err = autorest.Respond(
1020		resp,
1021		azure.WithErrorUnlessStatusCode(http.StatusOK),
1022		autorest.ByUnmarshallingJSON(&result),
1023		autorest.ByClosing())
1024	result.Response = autorest.Response{Response: resp}
1025	return
1026}
1027
1028// listByTimeNextResults retrieves the next set of results, if any.
1029func (client ReportsClient) listByTimeNextResults(ctx context.Context, lastResults ReportCollection) (result ReportCollection, err error) {
1030	req, err := lastResults.reportCollectionPreparer(ctx)
1031	if err != nil {
1032		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByTimeNextResults", nil, "Failure preparing next results request")
1033	}
1034	if req == nil {
1035		return
1036	}
1037	resp, err := client.ListByTimeSender(req)
1038	if err != nil {
1039		result.Response = autorest.Response{Response: resp}
1040		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByTimeNextResults", resp, "Failure sending next results request")
1041	}
1042	result, err = client.ListByTimeResponder(resp)
1043	if err != nil {
1044		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByTimeNextResults", resp, "Failure responding to next results request")
1045	}
1046	return
1047}
1048
1049// ListByTimeComplete enumerates all values, automatically crossing page boundaries as required.
1050func (client ReportsClient) ListByTimeComplete(ctx context.Context, resourceGroupName string, serviceName string, filter string, interval string, top *int32, skip *int32, orderby string) (result ReportCollectionIterator, err error) {
1051	if tracing.IsEnabled() {
1052		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByTime")
1053		defer func() {
1054			sc := -1
1055			if result.Response().Response.Response != nil {
1056				sc = result.page.Response().Response.Response.StatusCode
1057			}
1058			tracing.EndSpan(ctx, sc, err)
1059		}()
1060	}
1061	result.page, err = client.ListByTime(ctx, resourceGroupName, serviceName, filter, interval, top, skip, orderby)
1062	return
1063}
1064
1065// ListByUser lists report records by User.
1066// Parameters:
1067// resourceGroupName - the name of the resource group.
1068// serviceName - the name of the API Management service.
1069// filter - |   Field     |     Usage     |     Supported operators     |     Supported functions
1070// |</br>|-------------|-------------|-------------|-------------|</br>| timestamp | filter | ge, le |     |
1071// </br>| displayName | select, orderBy |     |     | </br>| userId | select, filter | eq |     | </br>|
1072// apiRegion | filter | eq |     | </br>| productId | filter | eq |     | </br>| subscriptionId | filter | eq |
1073// | </br>| apiId | filter | eq |     | </br>| operationId | filter | eq |     | </br>| callCountSuccess |
1074// select, orderBy |     |     | </br>| callCountBlocked | select, orderBy |     |     | </br>| callCountFailed
1075// | select, orderBy |     |     | </br>| callCountOther | select, orderBy |     |     | </br>| callCountTotal
1076// | select, orderBy |     |     | </br>| bandwidth | select, orderBy |     |     | </br>| cacheHitsCount |
1077// select |     |     | </br>| cacheMissCount | select |     |     | </br>| apiTimeAvg | select, orderBy |
1078// |     | </br>| apiTimeMin | select |     |     | </br>| apiTimeMax | select |     |     | </br>|
1079// serviceTimeAvg | select |     |     | </br>| serviceTimeMin | select |     |     | </br>| serviceTimeMax |
1080// select |     |     | </br>
1081// top - number of records to return.
1082// skip - number of records to skip.
1083// orderby - oData order by query option.
1084func (client ReportsClient) ListByUser(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (result ReportCollectionPage, err error) {
1085	if tracing.IsEnabled() {
1086		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByUser")
1087		defer func() {
1088			sc := -1
1089			if result.rc.Response.Response != nil {
1090				sc = result.rc.Response.Response.StatusCode
1091			}
1092			tracing.EndSpan(ctx, sc, err)
1093		}()
1094	}
1095	if err := validation.Validate([]validation.Validation{
1096		{TargetValue: serviceName,
1097			Constraints: []validation.Constraint{{Target: "serviceName", Name: validation.MaxLength, Rule: 50, Chain: nil},
1098				{Target: "serviceName", Name: validation.MinLength, Rule: 1, Chain: nil},
1099				{Target: "serviceName", Name: validation.Pattern, Rule: `^[a-zA-Z](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$`, Chain: nil}}},
1100		{TargetValue: top,
1101			Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false,
1102				Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMinimum, Rule: int64(1), Chain: nil}}}}},
1103		{TargetValue: skip,
1104			Constraints: []validation.Constraint{{Target: "skip", Name: validation.Null, Rule: false,
1105				Chain: []validation.Constraint{{Target: "skip", Name: validation.InclusiveMinimum, Rule: int64(0), Chain: nil}}}}}}); err != nil {
1106		return result, validation.NewError("apimanagement.ReportsClient", "ListByUser", err.Error())
1107	}
1108
1109	result.fn = client.listByUserNextResults
1110	req, err := client.ListByUserPreparer(ctx, resourceGroupName, serviceName, filter, top, skip, orderby)
1111	if err != nil {
1112		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByUser", nil, "Failure preparing request")
1113		return
1114	}
1115
1116	resp, err := client.ListByUserSender(req)
1117	if err != nil {
1118		result.rc.Response = autorest.Response{Response: resp}
1119		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByUser", resp, "Failure sending request")
1120		return
1121	}
1122
1123	result.rc, err = client.ListByUserResponder(resp)
1124	if err != nil {
1125		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "ListByUser", resp, "Failure responding to request")
1126		return
1127	}
1128	if result.rc.hasNextLink() && result.rc.IsEmpty() {
1129		err = result.NextWithContext(ctx)
1130		return
1131	}
1132
1133	return
1134}
1135
1136// ListByUserPreparer prepares the ListByUser request.
1137func (client ReportsClient) ListByUserPreparer(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (*http.Request, error) {
1138	pathParameters := map[string]interface{}{
1139		"resourceGroupName": autorest.Encode("path", resourceGroupName),
1140		"serviceName":       autorest.Encode("path", serviceName),
1141		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
1142	}
1143
1144	const APIVersion = "2020-12-01"
1145	queryParameters := map[string]interface{}{
1146		"$filter":     autorest.Encode("query", filter),
1147		"api-version": APIVersion,
1148	}
1149	if top != nil {
1150		queryParameters["$top"] = autorest.Encode("query", *top)
1151	}
1152	if skip != nil {
1153		queryParameters["$skip"] = autorest.Encode("query", *skip)
1154	}
1155	if len(orderby) > 0 {
1156		queryParameters["$orderby"] = autorest.Encode("query", orderby)
1157	}
1158
1159	preparer := autorest.CreatePreparer(
1160		autorest.AsGet(),
1161		autorest.WithBaseURL(client.BaseURI),
1162		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/reports/byUser", pathParameters),
1163		autorest.WithQueryParameters(queryParameters))
1164	return preparer.Prepare((&http.Request{}).WithContext(ctx))
1165}
1166
1167// ListByUserSender sends the ListByUser request. The method will close the
1168// http.Response Body if it receives an error.
1169func (client ReportsClient) ListByUserSender(req *http.Request) (*http.Response, error) {
1170	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
1171}
1172
1173// ListByUserResponder handles the response to the ListByUser request. The method always
1174// closes the http.Response Body.
1175func (client ReportsClient) ListByUserResponder(resp *http.Response) (result ReportCollection, err error) {
1176	err = autorest.Respond(
1177		resp,
1178		azure.WithErrorUnlessStatusCode(http.StatusOK),
1179		autorest.ByUnmarshallingJSON(&result),
1180		autorest.ByClosing())
1181	result.Response = autorest.Response{Response: resp}
1182	return
1183}
1184
1185// listByUserNextResults retrieves the next set of results, if any.
1186func (client ReportsClient) listByUserNextResults(ctx context.Context, lastResults ReportCollection) (result ReportCollection, err error) {
1187	req, err := lastResults.reportCollectionPreparer(ctx)
1188	if err != nil {
1189		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByUserNextResults", nil, "Failure preparing next results request")
1190	}
1191	if req == nil {
1192		return
1193	}
1194	resp, err := client.ListByUserSender(req)
1195	if err != nil {
1196		result.Response = autorest.Response{Response: resp}
1197		return result, autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByUserNextResults", resp, "Failure sending next results request")
1198	}
1199	result, err = client.ListByUserResponder(resp)
1200	if err != nil {
1201		err = autorest.NewErrorWithError(err, "apimanagement.ReportsClient", "listByUserNextResults", resp, "Failure responding to next results request")
1202	}
1203	return
1204}
1205
1206// ListByUserComplete enumerates all values, automatically crossing page boundaries as required.
1207func (client ReportsClient) ListByUserComplete(ctx context.Context, resourceGroupName string, serviceName string, filter string, top *int32, skip *int32, orderby string) (result ReportCollectionIterator, err error) {
1208	if tracing.IsEnabled() {
1209		ctx = tracing.StartSpan(ctx, fqdn+"/ReportsClient.ListByUser")
1210		defer func() {
1211			sc := -1
1212			if result.Response().Response.Response != nil {
1213				sc = result.page.Response().Response.Response.StatusCode
1214			}
1215			tracing.EndSpan(ctx, sc, err)
1216		}()
1217	}
1218	result.page, err = client.ListByUser(ctx, resourceGroupName, serviceName, filter, top, skip, orderby)
1219	return
1220}
1221