Implement processed requests count

This commit is contained in:
Andrea Cavalli 2022-01-12 23:45:06 +01:00
parent 134f32d03e
commit d24eecca2b
2 changed files with 55 additions and 12 deletions

View File

@ -1,14 +1,7 @@
package org.telegram.telegrambots.updatesreceivers;
import java.util.List;
import javax.ws.rs.core.Response.Status;
import lombok.extern.slf4j.Slf4j;
import org.telegram.telegrambots.Constants;
import org.telegram.telegrambots.meta.api.methods.BotApiMethod;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException;
import org.telegram.telegrambots.meta.generics.WebhookBot;
import java.util.concurrent.ConcurrentHashMap;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@ -17,7 +10,13 @@ import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.util.concurrent.ConcurrentHashMap;
import javax.ws.rs.core.Response.Status;
import lombok.extern.slf4j.Slf4j;
import org.telegram.telegrambots.Constants;
import org.telegram.telegrambots.meta.api.methods.BotApiMethod;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiValidationException;
import org.telegram.telegrambots.meta.generics.WebhookBot;
/**
* @author Ruben Bermudez
@ -51,7 +50,14 @@ public class RestApi {
}
return Response.ok(response).build();
} catch (TooManyRequestsException e) {
return Response.status(Status.TOO_MANY_REQUESTS).build();
if (e.getProcessedRequestsCount().isPresent()) {
return Response
.status(Status.TOO_MANY_REQUESTS)
.header("X-Processed-Requests", e.getProcessedRequestsCount().getAsInt())
.build();
} else {
return Response.status(Status.TOO_MANY_REQUESTS).build();
}
} catch (TelegramApiValidationException e) {
log.error(e.getLocalizedMessage(), e);
return Response.serverError().build();
@ -78,7 +84,14 @@ public class RestApi {
}
return Response.ok(responses).build();
} catch (TooManyRequestsException e) {
return Response.status(Status.TOO_MANY_REQUESTS).build();
if (e.getProcessedRequestsCount().isPresent()) {
return Response
.status(Status.TOO_MANY_REQUESTS)
.header("X-Processed-Requests", e.getProcessedRequestsCount().getAsInt())
.build();
} else {
return Response.status(Status.TOO_MANY_REQUESTS).build();
}
} catch (TelegramApiValidationException e) {
log.error(e.getLocalizedMessage(), e);
return Response.serverError().build();

View File

@ -1,3 +1,33 @@
package org.telegram.telegrambots.updatesreceivers;
public class TooManyRequestsException extends RuntimeException {}
import java.util.OptionalInt;
import java.util.StringJoiner;
public class TooManyRequestsException extends RuntimeException {
private final int processedRequestsCount;
public TooManyRequestsException(int processedRequestsCount) {
if (processedRequestsCount < 0) {
throw new ArrayIndexOutOfBoundsException(processedRequestsCount);
}
this.processedRequestsCount = processedRequestsCount;
}
public TooManyRequestsException() {
this.processedRequestsCount = -1;
}
public OptionalInt getProcessedRequestsCount() {
if (processedRequestsCount == -1) {
return OptionalInt.empty();
} else {
return OptionalInt.of(processedRequestsCount);
}
}
@Override
public String toString() {
return "Too many requests. " + processedRequestsCount + " requests have been processed.";
}
}