internal/client/client.go (45 lines of code) (raw):

// Copyright (c) HashiCorp, Inc. package client import ( "errors" "fmt" "io" "net/http" "time" ) // HostURL - Default Devlake URL. const HostURL string = "http://localhost:8080" // Client - Holds backend data. type Client struct { HostURL string HTTPClient *http.Client Token string } // NewClient - Create new client. func NewClient(host, token *string) (*Client, error) { // If token not provided, return error if token == nil { return nil, errors.New("no api token provided") } c := Client{ HTTPClient: &http.Client{Timeout: 10 * time.Second}, // Default Devlake URL HostURL: HostURL, Token: *token, } if host != nil { c.HostURL = *host } return &c, nil } // doRequest - Query the devlake backend. func (c *Client) doRequest(req *http.Request) ([]byte, error) { req.Header.Set("Authorization", c.Token) req.Header.Set("Accept", "application/json") res, err := c.HTTPClient.Do(req) if err != nil { return nil, err } defer res.Body.Close() body, err := io.ReadAll(res.Body) if err != nil { return nil, err } if res.StatusCode < http.StatusOK || res.StatusCode > http.StatusIMUsed { return nil, fmt.Errorf("status: %d, body: %s", res.StatusCode, body) } return body, err }