-
Notifications
You must be signed in to change notification settings - Fork 0
/
client.go
123 lines (95 loc) · 2.59 KB
/
client.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
package spinsights
import (
"net/url"
"encoding/json"
"github.com/parnurzeal/gorequest"
"fmt"
"github.com/gizak/termui/debug"
"bytes"
)
var DefalutClient = NewClient(nil)
func (c *Client) GetExecutionById(id string) (*Execution, error) {
rel, err := url.Parse("/pipelines/" + id)
if err != nil {
return &Execution{}, err
}
url := c.BaseUrl.ResolveReference(rel)
_, body, _:= gorequest.New().Get(url.String()).End()
var execution *Execution
json.Unmarshal([]byte(body), &execution)
return execution, nil
}
func (c *Client) GetInstanceDetails(instance Instance) (*InstanceDetail, error) {
urlString := fmt.Sprintf("/instances/%s/%s/%s", instance.Account, instance.Region, instance.InstanceId)
rel, err := url.Parse(urlString)
if err != nil {
return &InstanceDetail{}, err
}
url := c.BaseUrl.ResolveReference(rel)
_, body, _ := gorequest.New().Get(url.String()).End()
var instanceDetail *InstanceDetail
json.Unmarshal([]byte(body), &instanceDetail)
return instanceDetail, nil
}
func (c *Client) InstanceSearch(instanceId string) ([]SearchResult, error) {
rel, err := url.Parse("/search")
if err != nil {
return []SearchResult{}, err
}
q := rel.Query()
q.Set("q", instanceId)
q.Set("type", "instances")
rel.RawQuery = q.Encode()
url := c.BaseUrl.ResolveReference(rel)
debug.Log(url.String())
_, body, _ := gorequest.New().Get(url.String()).End()
prettyPrintJson(body)
var results []SearchResult
json.Unmarshal([]byte(body), &results)
return results, nil
}
func (c *Client) GetAutoScalingActivity(urls []string, ch chan<- []AutoScalingActivity) {
// ch := make(chan []AutoScalingActivity, len(urls))
// responses := []AutoScalingActivity{}
for _, url := range urls {
go func(url string) {
_, body, _ := gorequest.New().Get(url).End()
var results []AutoScalingActivity
json.Unmarshal([]byte(body), &results)
ch <- results
}(url)
}
// for {
// select {
// case r := <-ch:
// responses = append(responses, r...)
// return responses
// }
// }
// return responses
}
func unmarshallExecutionJSON(jsonString string) *Execution {
var parsed Execution
json.Unmarshal([]byte(jsonString), &parsed)
return &parsed
}
func prettyPrintJson(jsonString string) {
var prettyJson bytes.Buffer
json.Indent(&prettyJson, []byte(jsonString), "", " ")
debug.Log(string(prettyJson.Bytes()))
}
func NewClient(agent *gorequest.SuperAgent) *Client {
if agent == nil {
cloned := *gorequest.New()
agent = &cloned
}
c := &Client{
BaseUrl: &url.URL{
Scheme:"https",
Host:"spinnaker-api.prod.netflix.net",
},
UserAgent:"spinsights.go",
agent: agent,
}
return c
}