예제 #1
0
 def check_rate_limit(self):
     rate = self.item("/rate_limit")["resources"]
     if rate["core"]["remaining"] < RATE_LIMIT_THRESHOLD:
         reset = datetime.utcfromtimestamp(rate["core"]["reset"])
         now = datetime.utcnow()
         delta = reset - now
         statsd.increment("http.client.rate_limited",
                          tags=[f"hostname:{self.base_url.host}"])
         raise exceptions.RateLimited(delta.total_seconds(), rate)
예제 #2
0
def get_client(*args, **kwargs):
    client = GithubInstallationClient(*args, **kwargs)
    rate = client.item("/rate_limit")["resources"]
    if rate["core"]["remaining"] < RATE_LIMIT_THRESHOLD:
        reset = datetime.utcfromtimestamp(rate["core"]["reset"])
        now = datetime.utcnow()
        delta = reset - now
        statsd.increment("engine.rate_limited")
        raise exceptions.RateLimited(delta.total_seconds(), rate)
    return client
예제 #3
0
def _check_rate_limit(response: httpx.Response) -> None:
    remaining = response.headers.get("X-RateLimit-Remaining")

    if remaining is None:
        return

    remaining = int(remaining)

    if remaining < RATE_LIMIT_THRESHOLD:
        reset = response.headers.get("X-RateLimit-Reset")
        if reset is None:
            delta = datetime.timedelta(minutes=5)
        else:
            delta = (datetime.datetime.utcfromtimestamp(int(reset)) -
                     datetime.datetime.utcnow())
        if response.url is not None:
            statsd.increment(
                "http.client.rate_limited",
                tags=[f"hostname:{response.url.host}"],
            )
        raise exceptions.RateLimited(delta, remaining)