-
Notifications
You must be signed in to change notification settings - Fork 81
/
longview.go
144 lines (119 loc) · 3.9 KB
/
longview.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package linodego
import (
"context"
"encoding/json"
"time"
"github.com/linode/linodego/internal/parseabletime"
)
// LongviewClient represents a LongviewClient object
type LongviewClient struct {
ID int `json:"id"`
APIKey string `json:"api_key"`
Created *time.Time `json:"-"`
InstallCode string `json:"install_code"`
Label string `json:"label"`
Updated *time.Time `json:"-"`
Apps struct {
Apache any `json:"apache"`
MySQL any `json:"mysql"`
NginX any `json:"nginx"`
} `json:"apps"`
}
// LongviewClientCreateOptions is an options struct used when Creating a Longview Client
type LongviewClientCreateOptions struct {
Label string `json:"label"`
}
// LongviewClientCreateOptions is an options struct used when Updating a Longview Client
type LongviewClientUpdateOptions struct {
Label string `json:"label"`
}
// LongviewPlan represents a Longview Plan object
type LongviewPlan struct {
ID string `json:"id"`
Label string `json:"label"`
ClientsIncluded int `json:"clients_included"`
Price struct {
Hourly float64 `json:"hourly"`
Monthly float64 `json:"monthly"`
} `json:"price"`
}
// LongviewPlanUpdateOptions is an options struct used when Updating a Longview Plan
type LongviewPlanUpdateOptions struct {
LongviewSubscription string `json:"longview_subscription"`
}
// ListLongviewClients lists LongviewClients
func (c *Client) ListLongviewClients(ctx context.Context, opts *ListOptions) ([]LongviewClient, error) {
response, err := getPaginatedResults[LongviewClient](ctx, c, "longview/clients", opts)
if err != nil {
return nil, err
}
return response, nil
}
// GetLongviewClient gets the template with the provided ID
func (c *Client) GetLongviewClient(ctx context.Context, clientID int) (*LongviewClient, error) {
e := formatAPIPath("longview/clients/%d", clientID)
response, err := doGETRequest[LongviewClient](ctx, c, e)
if err != nil {
return nil, err
}
return response, nil
}
// CreateLongviewClient creates a Longview Client
func (c *Client) CreateLongviewClient(ctx context.Context, opts LongviewClientCreateOptions) (*LongviewClient, error) {
e := "longview/clients"
response, err := doPOSTRequest[LongviewClient](ctx, c, e, opts)
if err != nil {
return nil, err
}
return response, nil
}
// DeleteLongviewClient deletes a Longview Client
func (c *Client) DeleteLongviewClient(ctx context.Context, clientID int) error {
e := formatAPIPath("longview/clients/%d", clientID)
err := doDELETERequest(ctx, c, e)
return err
}
// UpdateLongviewClient updates a Longview Client
func (c *Client) UpdateLongviewClient(ctx context.Context, clientID int, opts LongviewClientUpdateOptions) (*LongviewClient, error) {
e := formatAPIPath("longview/clients/%d", clientID)
response, err := doPUTRequest[LongviewClient](ctx, c, e, opts)
if err != nil {
return nil, err
}
return response, nil
}
// GetLongviewPlan gets the template with the provided ID
func (c *Client) GetLongviewPlan(ctx context.Context) (*LongviewPlan, error) {
e := "longview/plan"
response, err := doGETRequest[LongviewPlan](ctx, c, e)
if err != nil {
return nil, err
}
return response, nil
}
// UpdateLongviewPlan updates a Longview Plan
func (c *Client) UpdateLongviewPlan(ctx context.Context, opts LongviewPlanUpdateOptions) (*LongviewPlan, error) {
e := "longview/plan"
response, err := doPUTRequest[LongviewPlan](ctx, c, e, opts)
if err != nil {
return nil, err
}
return response, nil
}
// UnmarshalJSON implements the json.Unmarshaler interface
func (i *LongviewClient) UnmarshalJSON(b []byte) error {
type Mask LongviewClient
p := struct {
*Mask
Created *parseabletime.ParseableTime `json:"created"`
Updated *parseabletime.ParseableTime `json:"updated"`
}{
Mask: (*Mask)(i),
}
if err := json.Unmarshal(b, &p); err != nil {
return err
}
i.Created = (*time.Time)(p.Created)
i.Updated = (*time.Time)(p.Updated)
return nil
}