aboutsummaryrefslogtreecommitdiffstats
path: root/syz-cluster/pkg/api
diff options
context:
space:
mode:
authorAleksandr Nogikh <nogikh@google.com>2025-02-04 18:28:05 +0100
committerAleksandr Nogikh <nogikh@google.com>2025-02-04 19:04:45 +0000
commit02af57a28186dadf4e0faf263aa63d5ceafccbd6 (patch)
treee444f220af591dde32fb5b89d2901a2ca8afb626 /syz-cluster/pkg/api
parentf1930ee4ea9bed443a9fd13a790b9f9014d318b4 (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.
Diffstat (limited to 'syz-cluster/pkg/api')
-rw-r--r--syz-cluster/pkg/api/client.go37
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
}