-
Notifications
You must be signed in to change notification settings - Fork 0
/
fleet.go
102 lines (87 loc) · 3.14 KB
/
fleet.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
package client
import (
"context"
"net/http"
"net/url"
"strconv"
"github.com/calyptia/api/types"
fluentbitconfig "github.com/calyptia/go-fluentbit-config/v2"
)
func (c *Client) CreateFleet(ctx context.Context, in types.CreateFleet) (types.Created, error) {
var out types.Created
return out, c.do(ctx, http.MethodPost, "/v1/projects/"+url.PathEscape(in.ProjectID)+"/fleets", in, &out)
}
func (c *Client) Fleets(ctx context.Context, params types.FleetsParams) (types.Fleets, error) {
q := url.Values{}
if params.Name != nil {
q.Set("name", *params.Name)
}
if params.TagsQuery != nil {
q.Set("tags_query", *params.TagsQuery)
}
if params.Last != nil {
q.Set("last", strconv.FormatUint(uint64(*params.Last), uintBase))
}
if params.Before != nil {
q.Set("before", *params.Before)
}
if params.ConfigFormat != nil {
q.Set("config_format", string(*params.ConfigFormat))
}
var out types.Fleets
path := "/v1/projects/" + url.PathEscape(params.ProjectID) + "/fleets?" + q.Encode()
return out, c.do(ctx, http.MethodGet, path, nil, &out.Items, withCursor(&out.EndCursor))
}
func (c *Client) FleetsStatus(ctx context.Context, params types.FleetsStatusParams) (types.FleetsStatus, error) {
var out types.FleetsStatus
path := "/v1/projects/" + url.PathEscape(params.ProjectID) + "/fleets/status"
return out, c.do(ctx, http.MethodGet, path, nil, &out)
}
func (c *Client) Fleet(ctx context.Context, in types.FleetParams) (types.Fleet, error) {
var out types.Fleet
q := url.Values{}
if in.ConfigFormat != nil {
q.Set("config_format", string(*in.ConfigFormat))
}
path := "/v1/fleets/" + url.PathEscape(in.FleetID) + "?" + q.Encode()
return out, c.do(ctx, http.MethodGet, path, nil, &out)
}
func (c *Client) FleetStatus(ctx context.Context, params types.FleetStatusParams) (types.FleetsStatus, error) {
var out types.FleetsStatus
path := "/v1/fleets/" + url.PathEscape(params.FleetID) + "/status"
return out, c.do(ctx, http.MethodGet, path, nil, &out)
}
func (c *Client) FleetConfig(ctx context.Context, fleetID string, params types.FleetConfigParams) (*fluentbitconfig.Config, error) {
q := url.Values{}
if params.ConfigFormat != nil {
q.Set("config_format", string(*params.ConfigFormat))
}
path := "/v1/fleets/" + url.PathEscape(fleetID) + "/config?" + q.Encode()
switch *params.ConfigFormat {
case types.ConfigFormatINI:
var out string
err := c.do(ctx, http.MethodGet, path, nil, &out)
if err != nil {
return nil, err
}
cfg, err := fluentbitconfig.ParseAs(out, fluentbitconfig.FormatClassic)
if err != nil {
return nil, err
}
return &cfg, nil
case types.ConfigFormatYAML:
fallthrough
case types.ConfigFormatJSON:
var out fluentbitconfig.Config
return &out, c.do(ctx, http.MethodGet, path, nil, &out)
}
return nil, nil
}
func (c *Client) UpdateFleet(ctx context.Context, in types.UpdateFleet) (types.Updated, error) {
var out types.Updated
return out, c.do(ctx, http.MethodPatch, "/v1/fleets/"+url.PathEscape(in.ID), in, &out)
}
func (c *Client) DeleteFleet(ctx context.Context, fleetID string) (types.Deleted, error) {
var out types.Deleted
return out, c.do(ctx, http.MethodDelete, "/v1/fleets/"+url.PathEscape(fleetID), nil, &out)
}