diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2025-02-04 18:28:05 +0100 |
|---|---|---|
| committer | Aleksandr Nogikh <nogikh@google.com> | 2025-02-04 19:04:45 +0000 |
| commit | 02af57a28186dadf4e0faf263aa63d5ceafccbd6 (patch) | |
| tree | e444f220af591dde32fb5b89d2901a2ca8afb626 | |
| parent | f1930ee4ea9bed443a9fd13a790b9f9014d318b4 (diff) | |
syz-cluster/pkg/api: set deadlines for requests
Refactor the helper methods to reduce code duplication.
Add context argument support for GET methods.
Add a one minute deadline on top of the deadline imposed by the context.
| -rw-r--r-- | syz-cluster/pkg/api/client.go | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/syz-cluster/pkg/api/client.go b/syz-cluster/pkg/api/client.go index 9cb52634b..4a1de2d87 100644 --- a/syz-cluster/pkg/api/client.go +++ b/syz-cluster/pkg/api/client.go @@ -11,6 +11,7 @@ import ( "io" "net/http" "strings" + "time" ) type Client struct { @@ -21,14 +22,12 @@ func NewClient(url string) *Client { return &Client{baseURL: strings.TrimRight(url, "/")} } -func (client Client) GetSessionSeries(_ context.Context, sessionID string) (*Series, error) { - // TODO: add support for the context. - return getJSON[Series](client.baseURL + "/sessions/" + sessionID + "/series") +func (client Client) GetSessionSeries(ctx context.Context, sessionID string) (*Series, error) { + return getJSON[Series](ctx, client.baseURL+"/sessions/"+sessionID+"/series") } -func (client Client) GetSeries(_ context.Context, seriesID string) (*Series, error) { - // TODO: add support for the context. - return getJSON[Series](client.baseURL + "/series/" + seriesID) +func (client Client) GetSeries(ctx context.Context, seriesID string) (*Series, error) { + return getJSON[Series](ctx, client.baseURL+"/series/"+seriesID) } func (client Client) SkipSession(ctx context.Context, sessionID string, req *SkipRequest) error { @@ -74,21 +73,12 @@ func (client Client) UploadFinding(ctx context.Context, req *Finding) error { return err } -func getJSON[Resp any](url string) (*Resp, error) { - resp, err := http.Get(url) +func getJSON[Resp any](ctx context.Context, url string) (*Resp, error) { + httpReq, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { return nil, err } - defer resp.Body.Close() - if err := ensure200(resp); err != nil { - return nil, err - } - var data Resp - err = json.NewDecoder(resp.Body).Decode(&data) - if err != nil { - return nil, err - } - return &data, nil + return finishRequest[Resp](httpReq) } func postJSON[Req any, Resp any](ctx context.Context, url string, req *Req) (*Resp, error) { @@ -101,7 +91,16 @@ func postJSON[Req any, Resp any](ctx context.Context, url string, req *Req) (*Re return nil, err } httpReq.Header.Set("Content-Type", "application/json") - resp, err := http.DefaultClient.Do(httpReq) + return finishRequest[Resp](httpReq) +} + +const requestTimeout = time.Minute + +func finishRequest[Resp any](httpReq *http.Request) (*Resp, error) { + client := &http.Client{ + Timeout: requestTimeout, + } + resp, err := client.Do(httpReq) if err != nil { return nil, err } |
