From becb178bf9e37a8585e75aeb9517fe7731772c20 Mon Sep 17 00:00:00 2001 From: PetrFOX Date: Mon, 17 Aug 2015 16:40:58 +0200 Subject: [PATCH 1/3] implemented a way how to watch the current api usage (rate limits) --- src/main/java/com/podio/RateLimitFilter.java | 17 ++++++++++++++ src/main/java/com/podio/RateLimits.java | 24 ++++++++++++++++++++ src/main/java/com/podio/ResourceFactory.java | 1 + 3 files changed, 42 insertions(+) create mode 100644 src/main/java/com/podio/RateLimitFilter.java create mode 100644 src/main/java/com/podio/RateLimits.java diff --git a/src/main/java/com/podio/RateLimitFilter.java b/src/main/java/com/podio/RateLimitFilter.java new file mode 100644 index 0000000..fe36188 --- /dev/null +++ b/src/main/java/com/podio/RateLimitFilter.java @@ -0,0 +1,17 @@ +package com.podio; + +import com.sun.jersey.api.client.ClientRequest; +import com.sun.jersey.api.client.ClientResponse; +import com.sun.jersey.api.client.filter.ClientFilter; + +public class RateLimitFilter extends ClientFilter { + + @SuppressWarnings("unchecked") + @Override + public ClientResponse handle(ClientRequest cr) { + ClientResponse response = getNext().handle(cr); + RateLimits.setLimit(Integer.parseInt(response.getHeaders().get("X-Rate-Limit-Limit").get(0))); + RateLimits.setRemaining(Integer.parseInt(response.getHeaders().get("X-Rate-Limit-Remaining").get(0))); + return response; + } +} diff --git a/src/main/java/com/podio/RateLimits.java b/src/main/java/com/podio/RateLimits.java new file mode 100644 index 0000000..6855b2f --- /dev/null +++ b/src/main/java/com/podio/RateLimits.java @@ -0,0 +1,24 @@ +package com.podio; + +public class RateLimits { + + private static int limit; + private static int remaining; + + public static int getLimit() { + return limit; + } + + public static void setLimit(int limit) { + RateLimits.limit = limit; + } + + public static int getRemaining() { + return remaining; + } + + public static void setRemaining(int remaining) { + RateLimits.remaining = remaining; + } + +} diff --git a/src/main/java/com/podio/ResourceFactory.java b/src/main/java/com/podio/ResourceFactory.java index 29271f8..ddc7f0f 100644 --- a/src/main/java/com/podio/ResourceFactory.java +++ b/src/main/java/com/podio/ResourceFactory.java @@ -62,6 +62,7 @@ public ResourceFactory(String apiHostname, String fileHostname, int port, Client client = Client.create(config); client.addFilter(new GZIPContentEncodingFilter(false)); client.addFilter(new ExceptionFilter()); + client.addFilter(new RateLimitFilter()); if (dryRun) { client.addFilter(new DryRunFilter()); } From 612df4094c76878794dacbedc0f3d57c72620925 Mon Sep 17 00:00:00 2001 From: PetrFOX Date: Mon, 5 Oct 2015 22:04:00 +0200 Subject: [PATCH 2/3] case without set headers fixed, comments added, formatting changed --- src/main/java/com/podio/RateLimitFilter.java | 42 ++++++++++++++++---- src/main/java/com/podio/RateLimits.java | 29 ++++++++++---- 2 files changed, 55 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/podio/RateLimitFilter.java b/src/main/java/com/podio/RateLimitFilter.java index fe36188..341a01c 100644 --- a/src/main/java/com/podio/RateLimitFilter.java +++ b/src/main/java/com/podio/RateLimitFilter.java @@ -3,15 +3,41 @@ import com.sun.jersey.api.client.ClientRequest; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.filter.ClientFilter; +import java.util.List; +import javax.ws.rs.core.MultivaluedMap; public class RateLimitFilter extends ClientFilter { - @SuppressWarnings("unchecked") - @Override - public ClientResponse handle(ClientRequest cr) { - ClientResponse response = getNext().handle(cr); - RateLimits.setLimit(Integer.parseInt(response.getHeaders().get("X-Rate-Limit-Limit").get(0))); - RateLimits.setRemaining(Integer.parseInt(response.getHeaders().get("X-Rate-Limit-Remaining").get(0))); - return response; - } + @SuppressWarnings("unchecked") + @Override + public ClientResponse handle(ClientRequest cr) { + ClientResponse response = getNext().handle(cr); + MultivaluedMap headers = response.getHeaders(); + if (headers != null) { + List limitHeader = headers.get("X-Rate-Limit-Limit"); + if (limitHeader != null && limitHeader.size() == 1) { + try { + RateLimits.setLimit(Integer.parseInt(limitHeader.get(0))); + } catch (NumberFormatException nfe) { + RateLimits.setLimit(null); + } + } else { + RateLimits.setLimit(null); + } + List remainingHeader = response.getHeaders().get("X-Rate-Limit-Remaining"); + if (remainingHeader != null && remainingHeader.size() == 1) { + try { + RateLimits.setRemaining(Integer.parseInt(remainingHeader.get(0))); + } catch (NumberFormatException nfe) { + RateLimits.setRemaining(null); + } + } else { + RateLimits.setRemaining(null); + } + } else { + RateLimits.setLimit(null); + RateLimits.setRemaining(null); + } + return response; + } } diff --git a/src/main/java/com/podio/RateLimits.java b/src/main/java/com/podio/RateLimits.java index 6855b2f..b17cd92 100644 --- a/src/main/java/com/podio/RateLimits.java +++ b/src/main/java/com/podio/RateLimits.java @@ -1,24 +1,37 @@ package com.podio; public class RateLimits { - - private static int limit; - private static int remaining; - public static int getLimit() { + private static Integer limit; + private static Integer remaining; + + /** + * Returns the ceiling for the request you just made. May be null if + * there is no limit. + * + * @return the ceiling for the request you just made + */ + public static Integer getLimit() { return limit; } - public static void setLimit(int limit) { + public static void setLimit(Integer limit) { RateLimits.limit = limit; } - public static int getRemaining() { + /** + * Returns the number of requests you have left for the current 1 hour + * window. May be null if there is no limit. + * + * @return the number of requests you have left for the current 1 hour + * window + */ + public static Integer getRemaining() { return remaining; } - public static void setRemaining(int remaining) { + public static void setRemaining(Integer remaining) { RateLimits.remaining = remaining; } - + } From 9c28226936d9d012c436758756b42def549bc6ff Mon Sep 17 00:00:00 2001 From: PetrFOX Date: Mon, 5 Oct 2015 22:06:44 +0200 Subject: [PATCH 3/3] formatting changed --- src/main/java/com/podio/RateLimitFilter.java | 64 ++++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/podio/RateLimitFilter.java b/src/main/java/com/podio/RateLimitFilter.java index 341a01c..23b6005 100644 --- a/src/main/java/com/podio/RateLimitFilter.java +++ b/src/main/java/com/podio/RateLimitFilter.java @@ -8,36 +8,36 @@ public class RateLimitFilter extends ClientFilter { - @SuppressWarnings("unchecked") - @Override - public ClientResponse handle(ClientRequest cr) { - ClientResponse response = getNext().handle(cr); - MultivaluedMap headers = response.getHeaders(); - if (headers != null) { - List limitHeader = headers.get("X-Rate-Limit-Limit"); - if (limitHeader != null && limitHeader.size() == 1) { - try { - RateLimits.setLimit(Integer.parseInt(limitHeader.get(0))); - } catch (NumberFormatException nfe) { - RateLimits.setLimit(null); - } - } else { - RateLimits.setLimit(null); - } - List remainingHeader = response.getHeaders().get("X-Rate-Limit-Remaining"); - if (remainingHeader != null && remainingHeader.size() == 1) { - try { - RateLimits.setRemaining(Integer.parseInt(remainingHeader.get(0))); - } catch (NumberFormatException nfe) { - RateLimits.setRemaining(null); - } - } else { - RateLimits.setRemaining(null); - } - } else { - RateLimits.setLimit(null); - RateLimits.setRemaining(null); - } - return response; - } + @SuppressWarnings("unchecked") + @Override + public ClientResponse handle(ClientRequest cr) { + ClientResponse response = getNext().handle(cr); + MultivaluedMap headers = response.getHeaders(); + if (headers != null) { + List limitHeader = headers.get("X-Rate-Limit-Limit"); + if (limitHeader != null && limitHeader.size() == 1) { + try { + RateLimits.setLimit(Integer.parseInt(limitHeader.get(0))); + } catch (NumberFormatException nfe) { + RateLimits.setLimit(null); + } + } else { + RateLimits.setLimit(null); + } + List remainingHeader = response.getHeaders().get("X-Rate-Limit-Remaining"); + if (remainingHeader != null && remainingHeader.size() == 1) { + try { + RateLimits.setRemaining(Integer.parseInt(remainingHeader.get(0))); + } catch (NumberFormatException nfe) { + RateLimits.setRemaining(null); + } + } else { + RateLimits.setRemaining(null); + } + } else { + RateLimits.setLimit(null); + RateLimits.setRemaining(null); + } + return response; + } }