Skip to content

Commit 2652018

Browse files
authored
Merge pull request #72 from GetStream/feature/ratelimitinfo
Add ratelimit methods to StreamFeedException
2 parents fc16876 + 5e7e5da commit 2652018

5 files changed

Lines changed: 69 additions & 5 deletions

File tree

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,23 @@ $token = $userFeed->getToken();
174174
$readonlyToken = $userFeed->getReadonlyToken();
175175
```
176176

177+
RateLimits:
178+
179+
If your app hits a ratelimit, a StreamFeedException is thrown. You can
180+
get additional info by catching the exception and calling the
181+
following methods:
182+
183+
```php
184+
185+
try {
186+
$client->updateActivity($activity);
187+
}catch(StreamFeedException $e){
188+
$limit = $e->getRateLimitLimit();
189+
$remaining = $e->getRateLimitRemaining();
190+
$reset = $e->getRateLimitReset(); // a unix timestamp
191+
}
192+
```
193+
177194
Again, our full documentation with all options and methods, is available at [https://getstream.io/docs/php/](https://getstream.io/docs/php/).
178195

179196
### Framework integration

lib/GetStream/Stream/Collections.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,11 @@ public function select($collectionName, array $ids)
6969
try {
7070
$response = $this->client->request('GET', 'meta/?'.http_build_query($queryParams));
7171
} catch (ClientException $e) {
72-
throw new StreamFeedException($e->getResponse()->getBody());
72+
$response = $e->getResponse();
73+
$msg = $response->getBody();
74+
$code = $response->getStatusCode();
75+
$previous = $e;
76+
throw new StreamFeedException($msg, $code, $previous);
7377
}
7478

7579
$body = $response->getBody()->getContents();
@@ -90,7 +94,11 @@ public function upsert($collectionName, array $data)
9094
try {
9195
$response = $this->client->request('POST', 'meta/', $options);
9296
} catch (ClientException $e) {
93-
throw new StreamFeedException($e->getResponse()->getBody());
97+
$response = $e->getResponse();
98+
$msg = $response->getBody();
99+
$code = $response->getStatusCode();
100+
$previous = $e;
101+
throw new StreamFeedException($msg, $code, $previous);
94102
}
95103

96104
$body = $response->getBody()->getContents();
@@ -112,7 +120,11 @@ public function delete($collectionName, array $ids)
112120
try {
113121
$response = $this->client->request('DELETE', 'meta/?'.http_build_query($queryParams));
114122
} catch (ClientException $e) {
115-
throw new StreamFeedException($e->getResponse()->getBody());
123+
$response = $e->getResponse();
124+
$msg = $response->getBody();
125+
$code = $response->getStatusCode();
126+
$previous = $e;
127+
throw new StreamFeedException($msg, $code, $previous);
116128
}
117129

118130
$body = $response->getBody()->getContents();

lib/GetStream/Stream/Feed.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,11 @@ public function makeHttpRequest($uri, $method, $data = [], $query_params = [], $
9797
try {
9898
$response = $client->request($method, $uri, $options);
9999
} catch (ClientException $e) {
100-
throw new StreamFeedException($e->getResponse()->getBody());
100+
$response = $e->getResponse();
101+
$msg = $response->getBody();
102+
$code = $response->getStatusCode();
103+
$previous = $e;
104+
throw new StreamFeedException($msg, $code, $previous);
101105
}
102106

103107
$body = $response->getBody()->getContents();

lib/GetStream/Stream/Personalization.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,11 @@ private function request($method, $resource, array $params)
9494
try {
9595
$response = $this->client->request($method, $uri);
9696
} catch (ClientException $e) {
97-
throw new StreamFeedException($e->getResponse()->getBody());
97+
$response = $e->getResponse();
98+
$msg = $response->getBody();
99+
$code = $response->getStatusCode();
100+
$previous = $e;
101+
throw new StreamFeedException($msg, $code, $previous);
98102
}
99103

100104
$body = $response->getBody()->getContents();

lib/GetStream/Stream/StreamFeedException.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,31 @@
33

44
class StreamFeedException extends \Exception
55
{
6+
7+
private function getRateLimitValue($headerName){
8+
/* Sample headers
9+
10+
x-ratelimit-limit: 2000
11+
x-ratelimit-remaining: 1998
12+
x-ratelimit-reset: 1543604520
13+
14+
*/
15+
$e = $this->getPrevious();
16+
if($e){
17+
return (string)$e->getResponse()->getHeader("x-ratelimit-" . $headerName)[0];
18+
}
19+
}
20+
21+
public function getRateLimitLimit(){
22+
return $this->getRateLimitValue("limit");
23+
}
24+
25+
public function getRateLimitRemaining(){
26+
return $this->getRateLimitValue("remaining");
27+
}
28+
29+
public function getRateLimitReset(){
30+
return $this->getRateLimitValue("reset");
31+
}
32+
633
}

0 commit comments

Comments
 (0)