diff --git a/changes/timeout-in-request-analytics b/changes/timeout-in-request-analytics new file mode 100644 index 0000000000..92999783fa --- /dev/null +++ b/changes/timeout-in-request-analytics @@ -0,0 +1 @@ +* When posting usage analytics, timeout after 30secs. diff --git a/cmd/fleet/serve.go b/cmd/fleet/serve.go index e0e0e03ea0..27e9914f11 100644 --- a/cmd/fleet/serve.go +++ b/cmd/fleet/serve.go @@ -426,12 +426,18 @@ func trySendStatistics(ds fleet.Datastore, frequency time.Duration, url string) if err != nil { return err } - req, err := http.Post(url, "application/json", bytes.NewBuffer(statsBytes)) + client := &http.Client{Timeout: 30 * time.Second} + req, err := http.NewRequest("POST", url, bytes.NewBuffer(statsBytes)) if err != nil { return err } - if req.StatusCode != http.StatusOK { - return errors.Errorf("Error posting to %s: %d", url, req.StatusCode) + req.Header.Set("Content-Type", "application/json") + resp, err := client.Do(req) + if err != nil { + return err + } + if resp.StatusCode != http.StatusOK { + return errors.Errorf("Error posting to %s: %d", url, resp.StatusCode) } return ds.RecordStatisticsSent() }