Skip to content

Commit 89bb8e3

Browse files
committed
Add increases command to CLI
Signed-off-by: Alex Ellis (OpenFaaS Ltd) <[email protected]>
1 parent 8f7ef1b commit 89bb8e3

File tree

3 files changed

+144
-0
lines changed

3 files changed

+144
-0
lines changed

cmd/increases.go

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package cmd
2+
3+
import (
4+
"bytes"
5+
"encoding/json"
6+
"fmt"
7+
"net/http"
8+
"os"
9+
"strings"
10+
"time"
11+
12+
"github.com/self-actuated/actuated-cli/pkg"
13+
"github.com/spf13/cobra"
14+
)
15+
16+
func makeIncreases() *cobra.Command {
17+
cmd := &cobra.Command{
18+
Use: "increases",
19+
Short: "Get job increases for an organisation",
20+
}
21+
22+
cmd.RunE = runIncreasesE
23+
24+
cmd.Flags().Bool("json", false, "Request output in JSON format")
25+
cmd.Flags().Bool("staff", false, "Request staff increases")
26+
cmd.Flags().Int("days", 30, "The number of days to look back for increases")
27+
28+
return cmd
29+
}
30+
31+
func runIncreasesE(cmd *cobra.Command, args []string) error {
32+
33+
var owner string
34+
if len(args) == 1 {
35+
owner = strings.TrimSpace(args[0])
36+
}
37+
38+
pat, err := getPat(cmd)
39+
if err != nil {
40+
return err
41+
}
42+
43+
staff, err := cmd.Flags().GetBool("staff")
44+
if err != nil {
45+
return err
46+
}
47+
48+
requestJson, err := cmd.Flags().GetBool("json")
49+
if err != nil {
50+
return err
51+
}
52+
53+
if len(pat) == 0 {
54+
return fmt.Errorf("pat is required")
55+
}
56+
57+
c := pkg.NewClient(http.DefaultClient, os.Getenv("ACTUATED_URL"))
58+
days, err := cmd.Flags().GetInt("days")
59+
if err != nil {
60+
return err
61+
}
62+
63+
startDate := time.Now().Add(-1 * time.Duration(days) * 24 * time.Hour)
64+
65+
res, status, err := c.GetBuildIncreases(pat, owner, startDate, staff, requestJson)
66+
if err != nil {
67+
return err
68+
}
69+
70+
if status != http.StatusOK {
71+
return fmt.Errorf("unexpected status code: %d, message: %s", status, string(res))
72+
}
73+
74+
if requestJson {
75+
76+
var prettyJSON bytes.Buffer
77+
err := json.Indent(&prettyJSON, []byte(res), "", " ")
78+
if err != nil {
79+
return err
80+
}
81+
res = prettyJSON.String()
82+
}
83+
84+
fmt.Println(res)
85+
86+
return nil
87+
88+
}

cmd/root.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ https://github.com/self-actuated/actuated-cli
4747
root.AddCommand(makeAgentLogs())
4848
root.AddCommand(makeLogs())
4949
root.AddCommand(makeUpgrade())
50+
root.AddCommand(makeIncreases())
5051

5152
root.AddCommand(makeSSH())
5253

pkg/client.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,61 @@ func (c *Client) ListJobs(patStr string, owner string, staff bool, json bool) (s
7676
return string(body), res.StatusCode, nil
7777
}
7878

79+
func (c *Client) GetBuildIncreases(patStr string, owner string, startDate time.Time, staff bool, json bool) (string, int, error) {
80+
81+
u, _ := url.Parse(c.baseURL)
82+
u.Path = "/api/v1/job-increases"
83+
q := u.Query()
84+
85+
if staff {
86+
q.Set("staff", "1")
87+
}
88+
89+
if len(owner) > 0 {
90+
q.Set("owner", owner)
91+
}
92+
q.Add("startDate", startDate.Format("2006-01-02"))
93+
log.Printf("Date: %s", startDate.Format("2006-01-02"))
94+
u.RawQuery = q.Encode()
95+
96+
req, err := http.NewRequest(http.MethodGet, u.String(), nil)
97+
if err != nil {
98+
return "", http.StatusBadRequest, err
99+
}
100+
101+
if json {
102+
req.Header.Set("Accept", "application/json")
103+
}
104+
105+
req.Header.Set("Authorization", "Bearer "+patStr)
106+
107+
if os.Getenv("DEBUG") == "1" {
108+
sanitised := http.Header{}
109+
for k, v := range req.Header {
110+
111+
if k == "Authorization" {
112+
v = []string{"redacted"}
113+
}
114+
sanitised[k] = v
115+
}
116+
117+
fmt.Printf("URL %s\nHeaders: %v\n", u.String(), sanitised)
118+
}
119+
120+
res, err := c.httpClient.Do(req)
121+
if err != nil {
122+
return "", http.StatusServiceUnavailable, err
123+
}
124+
125+
var body []byte
126+
if res.Body != nil {
127+
defer res.Body.Close()
128+
body, _ = io.ReadAll(res.Body)
129+
}
130+
131+
return string(body), res.StatusCode, nil
132+
}
133+
79134
func (c *Client) ListRunners(patStr string, owner string, staff, images, json bool) (string, int, error) {
80135

81136
u, _ := url.Parse(c.baseURL)

0 commit comments

Comments
 (0)