@Override protected Optional<Long> millisToNextAvailableRequest(HttpCommand command, HttpResponse response) { // The header is the Unix epoch time when the next request can be done String epochForNextAvailableRequest = response.getFirstHeaderOrNull("RateLimit-Reset"); if (epochForNextAvailableRequest == null) { return Optional.absent(); } return Optional.of(millisUntilNextAvailableRequest(Long.parseLong(epochForNextAvailableRequest))); }
@Override protected Optional<Long> millisToNextAvailableRequest(HttpCommand command, HttpResponse response) { // The header is the Unix epoch time when the next request can be done String epochForNextAvailableRequest = response.getFirstHeaderOrNull("RateLimit-Reset"); if (epochForNextAvailableRequest == null) { return Optional.absent(); } return Optional.of(millisUntilNextAvailableRequest(Long.parseLong(epochForNextAvailableRequest))); }
@Override protected Optional<Long> millisToNextAvailableRequest(HttpCommand command, HttpResponse response) { // The header is the Unix epoch time when the next request can be done String epochForNextAvailableRequest = response.getFirstHeaderOrNull("RateLimit-Reset"); if (epochForNextAvailableRequest == null) { return Optional.absent(); } return Optional.of(millisUntilNextAvailableRequest(Long.parseLong(epochForNextAvailableRequest))); }
private void parseRateLimitInfo(HttpResponse response) { String limit = response.getFirstHeaderOrNull("RateLimit-Limit"); String remaining = response.getFirstHeaderOrNull("RateLimit-Remaining"); String reset = response.getFirstHeaderOrNull("RateLimit-Reset"); totalRequestsPerHour = limit == null ? null : Integer.valueOf(limit); remainingRequests = remaining == null ? null : Integer.valueOf(remaining); timeToNextAvailableRequest = reset == null ? null : millisUntilNextAvailableRequest(Long.parseLong(reset)); }
private void parseRateLimitInfo(HttpResponse response) { String limit = response.getFirstHeaderOrNull("RateLimit-Limit"); String remaining = response.getFirstHeaderOrNull("RateLimit-Remaining"); String reset = response.getFirstHeaderOrNull("RateLimit-Reset"); totalRequestsPerHour = limit == null ? null : Integer.valueOf(limit); remainingRequests = remaining == null ? null : Integer.valueOf(remaining); timeToNextAvailableRequest = reset == null ? null : millisUntilNextAvailableRequest(Long.parseLong(reset)); }
private void parseRateLimitInfo(HttpResponse response) { String limit = response.getFirstHeaderOrNull("RateLimit-Limit"); String remaining = response.getFirstHeaderOrNull("RateLimit-Remaining"); String reset = response.getFirstHeaderOrNull("RateLimit-Reset"); totalRequestsPerHour = limit == null ? null : Integer.valueOf(limit); remainingRequests = remaining == null ? null : Integer.valueOf(remaining); timeToNextAvailableRequest = reset == null ? null : millisUntilNextAvailableRequest(Long.parseLong(reset)); }
public void testRateLimitExceptionIsThrown() throws InterruptedException { long reset = (System.currentTimeMillis() / 1000) + 3600; // Epoch for one // hour from now long millisToReset = millisUntilNextAvailableRequest(reset); server.enqueue(new MockResponse().setResponseCode(429).addHeader("RateLimit-Limit", "5000") .addHeader("RateLimit-Remaining", "1235").addHeader("RateLimit-Reset", String.valueOf(reset))); try { api.keyApi().list(); fail("Expected a DigitalOcean2RateLimitExceededException to be thrown"); } catch (DigitalOcean2RateLimitExceededException ex) { assertEquals(ex.totalRequestsPerHour().intValue(), 5000); assertEquals(ex.remainingRequests().intValue(), 1235); // Can't verify with millisecond precision. Use an interval to have a // consistent test. assertTrue(ex.timeToNextAvailableRequest() < millisToReset && ex.timeToNextAvailableRequest() > millisToReset - 1800000); } }