Skip to content

Commit

Permalink
Added check for ratelimit headers for GitHub Enterprise compatib… (#985)
Browse files Browse the repository at this point in the history
Added check for ratelimit headers for GitHub Enterprise compatibility
  • Loading branch information
betatim authored Oct 23, 2019
2 parents 9302684 + 0e5af81 commit 9fb6d3f
Showing 1 changed file with 25 additions and 22 deletions.
47 changes: 25 additions & 22 deletions binderhub/repoproviders.py
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,7 @@ def github_api_request(self, api_url, etag=None):
elif (
e.code == 403
and e.response
and 'x-ratelimit-remaining' in e.response.headers
and e.response.headers.get('x-ratelimit-remaining') == '0'
):
rate_limit = e.response.headers['x-ratelimit-limit']
Expand All @@ -617,28 +618,30 @@ def github_api_request(self, api_url, etag=None):
else:
raise

# record and log github rate limit
remaining = int(resp.headers['x-ratelimit-remaining'])
rate_limit = int(resp.headers['x-ratelimit-limit'])
reset_timestamp = int(resp.headers['x-ratelimit-reset'])

# record with prometheus
GITHUB_RATE_LIMIT.set(remaining)

# log at different levels, depending on remaining fraction
fraction = remaining / rate_limit
if fraction < 0.2:
log = self.log.warning
elif fraction < 0.5:
log = self.log.info
else:
log = self.log.debug

# str(timedelta) looks like '00:32'
delta = timedelta(seconds=int(reset_timestamp - time.time()))
log("GitHub rate limit remaining {remaining}/{limit}. Reset in {delta}.".format(
remaining=remaining, limit=rate_limit, delta=delta,
))
if 'x-ratelimit-remaining' in resp.headers:
# record and log github rate limit
remaining = int(resp.headers['x-ratelimit-remaining'])
rate_limit = int(resp.headers['x-ratelimit-limit'])
reset_timestamp = int(resp.headers['x-ratelimit-reset'])

# record with prometheus
GITHUB_RATE_LIMIT.set(remaining)

# log at different levels, depending on remaining fraction
fraction = remaining / rate_limit
if fraction < 0.2:
log = self.log.warning
elif fraction < 0.5:
log = self.log.info
else:
log = self.log.debug

# str(timedelta) looks like '00:32'
delta = timedelta(seconds=int(reset_timestamp - time.time()))
log("GitHub rate limit remaining {remaining}/{limit}. Reset in {delta}.".format(
remaining=remaining, limit=rate_limit, delta=delta,
))

return resp

@gen.coroutine
Expand Down

0 comments on commit 9fb6d3f

Please sign in to comment.