From b9cfb78d9fa67879c2f179ff1bdcbc2c0ba44ac9 Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Wed, 22 May 2024 19:58:17 +0100 Subject: [PATCH 1/2] Added some logging and slight refactoring to the request builder and sender --- .../internal/api/DiscordRequestBuilder.java | 38 +++++++++++++++++++ .../api/DiscordRequestDispatcher.java | 26 ++++++------- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java b/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java index b17f82cd..355da6a1 100644 --- a/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java @@ -5,6 +5,7 @@ import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -130,4 +131,41 @@ protected void setSuccessResult(DiscordResponse result) { protected void setFailureError(Throwable ex) { future.setException(ex); } + + @Override + public String toString() { + String headersString = + headers.entrySet().stream() + .map(entry -> entry.getKey() + "=" + entry.getValue()) + .collect(Collectors.joining(", ")); + + String queryParamsString = + queryParameters.entrySet().stream() + .map(entry -> entry.getKey() + "=" + entry.getValue()) + .collect(Collectors.joining(", ")); + + String bodyString; + try { + bodyString = OBJECT_MAPPER.writeValueAsString(body); + } catch (Exception e) { + bodyString = "Error converting body to string: " + e.getMessage(); + } + + return this.getClass().getName() + + "{" + + "method=" + + method + + ", path='" + + path + + '\'' + + ", headers={" + + headersString + + '}' + + ", queryParameters={" + + queryParamsString + + '}' + + ", body=" + + bodyString + + '}'; + } } diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestDispatcher.java b/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestDispatcher.java index 32dbe0ef..86bd3370 100644 --- a/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestDispatcher.java +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestDispatcher.java @@ -1,5 +1,6 @@ package com.javadiscord.jdi.internal.api; +import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; @@ -23,7 +24,7 @@ public class DiscordRequestDispatcher implements Runnable { private final HttpClient httpClient; private final BlockingQueue queue; private final String botToken; - private AtomicBoolean running = new AtomicBoolean(false); + private final AtomicBoolean running = new AtomicBoolean(false); private int numberOfRequestsSent; private long timeSinceLastRequest; @@ -48,20 +49,14 @@ public void run() { while (running.get()) { long currentTime = System.currentTimeMillis(); long elapsed = currentTime - timeSinceLastRequest; - - if (elapsed < 1000 && numberOfRequestsSent >= 50) { - try { - Thread.sleep(1000 - elapsed); - } catch (InterruptedException e) { - /* Ignore */ - } - numberOfRequestsSent = 0; - } - try { + if (elapsed < 1000 && numberOfRequestsSent >= 50) { + Thread.sleep(1000L - elapsed); + numberOfRequestsSent = 0; + } sendRequest(queue.take()); } catch (InterruptedException e) { - /* Ignore */ + Thread.currentThread().interrupt(); } } } @@ -71,6 +66,7 @@ public void stop() { } private void sendRequest(DiscordRequestBuilder discordRequestBuilder) { + LOGGER.debug("Sending request {}", discordRequestBuilder); try { HttpRequest.Builder requestBuilder = HttpRequest.newBuilder() @@ -126,7 +122,11 @@ private void sendRequest(DiscordRequestBuilder discordRequestBuilder) { ) ); - } catch (Exception e) { + } catch (InterruptedException e) { + LOGGER.error("Thread was interrupted", e); + discordRequestBuilder.setFailureError(e); + Thread.currentThread().interrupt(); + } catch (IOException e) { LOGGER.error( "Failed to send request to {}{}", BASE_URL, discordRequestBuilder.getPath(), e ); From 354d38a7212a1e6cc265ba501b7802b28c425834 Mon Sep 17 00:00:00 2001 From: Suraj Kumar Date: Thu, 23 May 2024 21:27:02 +0100 Subject: [PATCH 2/2] Change generic Exception to explicit JsonProcessingException --- .../com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java b/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java index 355da6a1..6b391ec8 100644 --- a/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java +++ b/api/src/main/java/com/javadiscord/jdi/internal/api/DiscordRequestBuilder.java @@ -147,7 +147,7 @@ public String toString() { String bodyString; try { bodyString = OBJECT_MAPPER.writeValueAsString(body); - } catch (Exception e) { + } catch (JsonProcessingException e) { bodyString = "Error converting body to string: " + e.getMessage(); }