From f36546a4709db53a26ad668fcbfec6c9c7f06bd0 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Sun, 8 May 2022 18:10:41 -0400 Subject: [PATCH] Fallback to the previous poll interval duration if no poll interval is specified. --- src/githubctl/github_endpoint_watcher.rs | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/githubctl/github_endpoint_watcher.rs b/src/githubctl/github_endpoint_watcher.rs index f261674..23278d8 100644 --- a/src/githubctl/github_endpoint_watcher.rs +++ b/src/githubctl/github_endpoint_watcher.rs @@ -12,6 +12,7 @@ pub struct GithubEndpointWatcher { next_poll_allowed: u64, ratelimit_remaining: Option, ratelimit_reset: Option, + previous_poll_interval: Option, } impl GithubEndpointWatcher { @@ -31,6 +32,7 @@ impl GithubEndpointWatcher { next_poll_allowed: 0, ratelimit_remaining: None, ratelimit_reset: None, + previous_poll_interval: None, }) } @@ -65,6 +67,9 @@ impl GithubEndpointWatcher { let headers = response.headers(); let etag = headers.get(reqwest::header::ETAG).map(|x| x.to_owned()); let poll_interval = number_header(headers.get("x-poll-interval"))?; + if let Some(interval) = poll_interval { + self.previous_poll_interval = Some(interval); + } // let ratelimit_limit = headers.get("x-ratelimit-limit").map(|x| x.to_owned()); self.ratelimit_remaining = number_header(headers.get("x-ratelimit-remaining"))?; self.ratelimit_reset = number_header(headers.get("x-ratelimit-reset"))?; @@ -78,18 +83,27 @@ impl GithubEndpointWatcher { self.etag = etag; self.last_modified_at = last_modified_at; let poll_interval_parsed: u64 = poll_interval.unwrap_or_else(|| { - info!("No poll interval returned, defaulting to 5 minute polling."); - 300 + let fallback_interval = self.previous_poll_interval.unwrap_or(300); + info!( + "No poll interval returned, defaulting to {} second polling.", + fallback_interval + ); + fallback_interval }); self.next_poll_allowed = request_started_at + poll_interval_parsed; return Ok(None); } else { let body = response.json::().await?; + self.etag = etag; self.last_modified_at = last_modified_at; let poll_interval_parsed: u64 = poll_interval.unwrap_or_else(|| { - info!("No poll interval returned, defaulting to 5 minute polling."); - 300 + let fallback_interval = self.previous_poll_interval.unwrap_or(300); + info!( + "No poll interval returned, defaulting to {} second polling.", + fallback_interval + ); + fallback_interval }); self.next_poll_allowed = request_started_at + poll_interval_parsed;