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
 | 
						|
}
 |