Skip to content

Commit f79fb97

Browse files
authored
Merge pull request KnpLabs#441 from mdkholy/improve-ratelimit-error
Improve rate limit exceeded exception
2 parents d03d708 + 12a614c commit f79fb97

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

lib/Github/Exception/ApiLimitExceedException.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,24 @@
99
*/
1010
class ApiLimitExceedException extends RuntimeException
1111
{
12-
public function __construct($limit = 5000, $code = 0, $previous = null)
12+
private $limit;
13+
private $reset;
14+
15+
public function __construct($limit = 5000, $reset = 1800, $code = 0, $previous = null)
16+
{
17+
$this->limit = (int) $limit;
18+
$this->reset = (int) $reset;
19+
20+
parent::__construct(sprintf('You have reached GitHub hourly limit! Actual limit is: %d', $limit), $code, $previous);
21+
}
22+
23+
public function getLimit()
24+
{
25+
return $this->limit;
26+
}
27+
28+
public function getResetTime()
1329
{
14-
parent::__construct('You have reached GitHub hour limit! Actual limit is: '. $limit, $code, $previous);
30+
return $this->reset;
1531
}
1632
}

lib/Github/HttpClient/Plugin/GithubExceptionThrower.php

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@ public function handleRequest(RequestInterface $request, callable $next, callabl
3030

3131
// If error:
3232
$remaining = ResponseMediator::getHeader($response, 'X-RateLimit-Remaining');
33-
$limit = ResponseMediator::getHeader($response, 'X-RateLimit-Limit');
34-
3533
if (null != $remaining && 1 > $remaining && 'rate_limit' !== substr($request->getRequestTarget(), 1, 10)) {
36-
throw new ApiLimitExceedException($limit);
34+
$limit = ResponseMediator::getHeader($response, 'X-RateLimit-Limit');
35+
$reset = ResponseMediator::getHeader($response, 'X-RateLimit-Reset');
36+
37+
throw new ApiLimitExceedException($limit, $reset);
3738
}
3839

3940
if (401 === $response->getStatusCode()) {

0 commit comments

Comments
 (0)