1// +build go1.13
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// Code generated by Microsoft (R) AutoRest Code Generator.
6// Changes may cause incorrect behavior and will be lost if the code is regenerated.
7
8package armcompute
9
10import (
11	"context"
12	"errors"
13	"github.com/Azure/azure-sdk-for-go/sdk/armcore"
14	"github.com/Azure/azure-sdk-for-go/sdk/azcore"
15	"net/http"
16	"net/url"
17	"strings"
18	"time"
19)
20
21// LogAnalyticsClient contains the methods for the LogAnalytics group.
22// Don't use this type directly, use NewLogAnalyticsClient() instead.
23type LogAnalyticsClient struct {
24	con            *armcore.Connection
25	subscriptionID string
26}
27
28// NewLogAnalyticsClient creates a new instance of LogAnalyticsClient with the specified values.
29func NewLogAnalyticsClient(con *armcore.Connection, subscriptionID string) *LogAnalyticsClient {
30	return &LogAnalyticsClient{con: con, subscriptionID: subscriptionID}
31}
32
33// BeginExportRequestRateByInterval - Export logs that show Api requests made by this subscription in the given time window to show throttling activities.
34// If the operation fails it returns a generic error.
35func (client *LogAnalyticsClient) BeginExportRequestRateByInterval(ctx context.Context, location string, parameters RequestRateByIntervalInput, options *LogAnalyticsBeginExportRequestRateByIntervalOptions) (LogAnalyticsOperationResultPollerResponse, error) {
36	resp, err := client.exportRequestRateByInterval(ctx, location, parameters, options)
37	if err != nil {
38		return LogAnalyticsOperationResultPollerResponse{}, err
39	}
40	result := LogAnalyticsOperationResultPollerResponse{
41		RawResponse: resp.Response,
42	}
43	pt, err := armcore.NewLROPoller("LogAnalyticsClient.ExportRequestRateByInterval", "azure-async-operation", resp, client.con.Pipeline(), client.exportRequestRateByIntervalHandleError)
44	if err != nil {
45		return LogAnalyticsOperationResultPollerResponse{}, err
46	}
47	poller := &logAnalyticsOperationResultPoller{
48		pt: pt,
49	}
50	result.Poller = poller
51	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (LogAnalyticsOperationResultResponse, error) {
52		return poller.pollUntilDone(ctx, frequency)
53	}
54	return result, nil
55}
56
57// ResumeExportRequestRateByInterval creates a new LogAnalyticsOperationResultPoller from the specified resume token.
58// token - The value must come from a previous call to LogAnalyticsOperationResultPoller.ResumeToken().
59func (client *LogAnalyticsClient) ResumeExportRequestRateByInterval(ctx context.Context, token string) (LogAnalyticsOperationResultPollerResponse, error) {
60	pt, err := armcore.NewLROPollerFromResumeToken("LogAnalyticsClient.ExportRequestRateByInterval", token, client.con.Pipeline(), client.exportRequestRateByIntervalHandleError)
61	if err != nil {
62		return LogAnalyticsOperationResultPollerResponse{}, err
63	}
64	poller := &logAnalyticsOperationResultPoller{
65		pt: pt,
66	}
67	resp, err := poller.Poll(ctx)
68	if err != nil {
69		return LogAnalyticsOperationResultPollerResponse{}, err
70	}
71	result := LogAnalyticsOperationResultPollerResponse{
72		RawResponse: resp,
73	}
74	result.Poller = poller
75	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (LogAnalyticsOperationResultResponse, error) {
76		return poller.pollUntilDone(ctx, frequency)
77	}
78	return result, nil
79}
80
81// ExportRequestRateByInterval - Export logs that show Api requests made by this subscription in the given time window to show throttling activities.
82// If the operation fails it returns a generic error.
83func (client *LogAnalyticsClient) exportRequestRateByInterval(ctx context.Context, location string, parameters RequestRateByIntervalInput, options *LogAnalyticsBeginExportRequestRateByIntervalOptions) (*azcore.Response, error) {
84	req, err := client.exportRequestRateByIntervalCreateRequest(ctx, location, parameters, options)
85	if err != nil {
86		return nil, err
87	}
88	resp, err := client.con.Pipeline().Do(req)
89	if err != nil {
90		return nil, err
91	}
92	if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) {
93		return nil, client.exportRequestRateByIntervalHandleError(resp)
94	}
95	return resp, nil
96}
97
98// exportRequestRateByIntervalCreateRequest creates the ExportRequestRateByInterval request.
99func (client *LogAnalyticsClient) exportRequestRateByIntervalCreateRequest(ctx context.Context, location string, parameters RequestRateByIntervalInput, options *LogAnalyticsBeginExportRequestRateByIntervalOptions) (*azcore.Request, error) {
100	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval"
101	if location == "" {
102		return nil, errors.New("parameter location cannot be empty")
103	}
104	urlPath = strings.ReplaceAll(urlPath, "{location}", url.PathEscape(location))
105	if client.subscriptionID == "" {
106		return nil, errors.New("parameter client.subscriptionID cannot be empty")
107	}
108	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
109	req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath))
110	if err != nil {
111		return nil, err
112	}
113	req.Telemetry(telemetryInfo)
114	reqQP := req.URL.Query()
115	reqQP.Set("api-version", "2021-03-01")
116	req.URL.RawQuery = reqQP.Encode()
117	req.Header.Set("Accept", "application/json")
118	return req, req.MarshalAsJSON(parameters)
119}
120
121// exportRequestRateByIntervalHandleError handles the ExportRequestRateByInterval error response.
122func (client *LogAnalyticsClient) exportRequestRateByIntervalHandleError(resp *azcore.Response) error {
123	body, err := resp.Payload()
124	if err != nil {
125		return azcore.NewResponseError(err, resp.Response)
126	}
127	if len(body) == 0 {
128		return azcore.NewResponseError(errors.New(resp.Status), resp.Response)
129	}
130	return azcore.NewResponseError(errors.New(string(body)), resp.Response)
131}
132
133// BeginExportThrottledRequests - Export logs that show total throttled Api requests for this subscription in the given time window.
134// If the operation fails it returns a generic error.
135func (client *LogAnalyticsClient) BeginExportThrottledRequests(ctx context.Context, location string, parameters ThrottledRequestsInput, options *LogAnalyticsBeginExportThrottledRequestsOptions) (LogAnalyticsOperationResultPollerResponse, error) {
136	resp, err := client.exportThrottledRequests(ctx, location, parameters, options)
137	if err != nil {
138		return LogAnalyticsOperationResultPollerResponse{}, err
139	}
140	result := LogAnalyticsOperationResultPollerResponse{
141		RawResponse: resp.Response,
142	}
143	pt, err := armcore.NewLROPoller("LogAnalyticsClient.ExportThrottledRequests", "azure-async-operation", resp, client.con.Pipeline(), client.exportThrottledRequestsHandleError)
144	if err != nil {
145		return LogAnalyticsOperationResultPollerResponse{}, err
146	}
147	poller := &logAnalyticsOperationResultPoller{
148		pt: pt,
149	}
150	result.Poller = poller
151	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (LogAnalyticsOperationResultResponse, error) {
152		return poller.pollUntilDone(ctx, frequency)
153	}
154	return result, nil
155}
156
157// ResumeExportThrottledRequests creates a new LogAnalyticsOperationResultPoller from the specified resume token.
158// token - The value must come from a previous call to LogAnalyticsOperationResultPoller.ResumeToken().
159func (client *LogAnalyticsClient) ResumeExportThrottledRequests(ctx context.Context, token string) (LogAnalyticsOperationResultPollerResponse, error) {
160	pt, err := armcore.NewLROPollerFromResumeToken("LogAnalyticsClient.ExportThrottledRequests", token, client.con.Pipeline(), client.exportThrottledRequestsHandleError)
161	if err != nil {
162		return LogAnalyticsOperationResultPollerResponse{}, err
163	}
164	poller := &logAnalyticsOperationResultPoller{
165		pt: pt,
166	}
167	resp, err := poller.Poll(ctx)
168	if err != nil {
169		return LogAnalyticsOperationResultPollerResponse{}, err
170	}
171	result := LogAnalyticsOperationResultPollerResponse{
172		RawResponse: resp,
173	}
174	result.Poller = poller
175	result.PollUntilDone = func(ctx context.Context, frequency time.Duration) (LogAnalyticsOperationResultResponse, error) {
176		return poller.pollUntilDone(ctx, frequency)
177	}
178	return result, nil
179}
180
181// ExportThrottledRequests - Export logs that show total throttled Api requests for this subscription in the given time window.
182// If the operation fails it returns a generic error.
183func (client *LogAnalyticsClient) exportThrottledRequests(ctx context.Context, location string, parameters ThrottledRequestsInput, options *LogAnalyticsBeginExportThrottledRequestsOptions) (*azcore.Response, error) {
184	req, err := client.exportThrottledRequestsCreateRequest(ctx, location, parameters, options)
185	if err != nil {
186		return nil, err
187	}
188	resp, err := client.con.Pipeline().Do(req)
189	if err != nil {
190		return nil, err
191	}
192	if !resp.HasStatusCode(http.StatusOK, http.StatusAccepted) {
193		return nil, client.exportThrottledRequestsHandleError(resp)
194	}
195	return resp, nil
196}
197
198// exportThrottledRequestsCreateRequest creates the ExportThrottledRequests request.
199func (client *LogAnalyticsClient) exportThrottledRequestsCreateRequest(ctx context.Context, location string, parameters ThrottledRequestsInput, options *LogAnalyticsBeginExportThrottledRequestsOptions) (*azcore.Request, error) {
200	urlPath := "/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests"
201	if location == "" {
202		return nil, errors.New("parameter location cannot be empty")
203	}
204	urlPath = strings.ReplaceAll(urlPath, "{location}", url.PathEscape(location))
205	if client.subscriptionID == "" {
206		return nil, errors.New("parameter client.subscriptionID cannot be empty")
207	}
208	urlPath = strings.ReplaceAll(urlPath, "{subscriptionId}", url.PathEscape(client.subscriptionID))
209	req, err := azcore.NewRequest(ctx, http.MethodPost, azcore.JoinPaths(client.con.Endpoint(), urlPath))
210	if err != nil {
211		return nil, err
212	}
213	req.Telemetry(telemetryInfo)
214	reqQP := req.URL.Query()
215	reqQP.Set("api-version", "2021-03-01")
216	req.URL.RawQuery = reqQP.Encode()
217	req.Header.Set("Accept", "application/json")
218	return req, req.MarshalAsJSON(parameters)
219}
220
221// exportThrottledRequestsHandleError handles the ExportThrottledRequests error response.
222func (client *LogAnalyticsClient) exportThrottledRequestsHandleError(resp *azcore.Response) error {
223	body, err := resp.Payload()
224	if err != nil {
225		return azcore.NewResponseError(err, resp.Response)
226	}
227	if len(body) == 0 {
228		return azcore.NewResponseError(errors.New(resp.Status), resp.Response)
229	}
230	return azcore.NewResponseError(errors.New(string(body)), resp.Response)
231}
232