mirror of
https://github.com/taigrr/wtf
synced 2025-01-18 04:03:14 -08:00
Issue #600 points out Jenkins module panics occasionally I noticed that a number of places panic because of JSON parsing Centralize JSON parsing, have it return an error, and have widgets report the error
70 lines
1.3 KiB
Go
70 lines
1.3 KiB
Go
package circleci
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/url"
|
|
|
|
"github.com/wtfutil/wtf/utils"
|
|
)
|
|
|
|
type Client struct {
|
|
apiKey string
|
|
}
|
|
|
|
func NewClient(apiKey string) *Client {
|
|
client := Client{
|
|
apiKey: apiKey,
|
|
}
|
|
|
|
return &client
|
|
}
|
|
|
|
func (client *Client) BuildsFor() ([]*Build, error) {
|
|
builds := []*Build{}
|
|
|
|
resp, err := client.circleRequest("recent-builds")
|
|
if err != nil {
|
|
return builds, err
|
|
}
|
|
|
|
err = utils.ParseJson(&builds, resp.Body)
|
|
if err != nil {
|
|
return builds, err
|
|
}
|
|
|
|
return builds, nil
|
|
}
|
|
|
|
/* -------------------- Unexported Functions -------------------- */
|
|
|
|
var (
|
|
circleAPIURL = &url.URL{Scheme: "https", Host: "circleci.com", Path: "/api/v1/"}
|
|
)
|
|
|
|
func (client *Client) circleRequest(path string) (*http.Response, error) {
|
|
params := url.Values{}
|
|
params.Add("circle-token", client.apiKey)
|
|
|
|
url := circleAPIURL.ResolveReference(&url.URL{Path: path, RawQuery: params.Encode()})
|
|
|
|
req, err := http.NewRequest("GET", url.String(), nil)
|
|
req.Header.Add("Accept", "application/json")
|
|
req.Header.Add("Content-Type", "application/json")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
httpClient := &http.Client{}
|
|
resp, err := httpClient.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if resp.StatusCode < 200 || resp.StatusCode > 299 {
|
|
return nil, fmt.Errorf(resp.Status)
|
|
}
|
|
|
|
return resp, nil
|
|
}
|