forked from louisfelix/azure-health-exporter
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathresource_health.go
72 lines (58 loc) · 2.51 KB
/
resource_health.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package main
import (
"context"
"github.com/Azure/azure-sdk-for-go/services/resourcehealth/mgmt/2017-07-01/resourcehealth"
)
// AvailabilityStatusIDSuffix is the common suffix of all the AvailabilityStatus IDs
const AvailabilityStatusIDSuffix = "/providers/Microsoft.ResourceHealth/availabilityStatuses/current"
// ResourceHealthClient is the client implementation to ResourceHealth API
type ResourceHealthClient struct {
Session *AzureSession
Client *resourcehealth.AvailabilityStatusesClient
LastRatelimitRemaining string
}
// ResourceHealth client interface
type ResourceHealth interface {
GetAvailabilityStatus(resourceURI string) (*resourcehealth.AvailabilityStatus, error)
GetAllAvailabilityStatuses() (*[]resourcehealth.AvailabilityStatus, error)
GetSubscriptionID() string
GetLastRatelimitRemaining() string
}
// NewResourceHealth returns a new ResourceHealth client
func NewResourceHealth(session *AzureSession) ResourceHealth {
client := resourcehealth.NewAvailabilityStatusesClient(session.SubscriptionID)
client.Authorizer = session.Authorizer
return &ResourceHealthClient{
Session: session,
Client: &client,
}
}
// GetSubscriptionID return the client's Subscription ID
func (rc *ResourceHealthClient) GetSubscriptionID() string {
return rc.Session.SubscriptionID
}
// GetLastRatelimitRemaining return last ratelimit remaining value
func (rc *ResourceHealthClient) GetLastRatelimitRemaining() string {
return rc.LastRatelimitRemaining
}
// GetAllAvailabilityStatuses fetch all Resources Health availability statuses of the subscription
func (rc *ResourceHealthClient) GetAllAvailabilityStatuses() (*[]resourcehealth.AvailabilityStatus, error) {
var asList []resourcehealth.AvailabilityStatus
for it, err := rc.Client.ListBySubscriptionIDComplete(context.Background(), "", ""); it.NotDone(); err = it.Next() {
if err != nil {
return nil, err
}
asList = append(asList, it.Value())
rc.LastRatelimitRemaining = it.Response().Header.Get("X-Ms-Ratelimit-Remaining-Subscription-Resource-Requests")
}
return &asList, nil
}
// GetAvailabilityStatus fetch all Resources Health availability statuses of the subscription
func (rc *ResourceHealthClient) GetAvailabilityStatus(resourceURI string) (*resourcehealth.AvailabilityStatus, error) {
as, err := rc.Client.GetByResource(context.Background(), resourceURI, "", "")
if err != nil {
return nil, err
}
rc.LastRatelimitRemaining = as.Response.Header.Get("X-Ms-Ratelimit-Remaining-Subscription-Resource-Requests")
return &as, nil
}