Update rate limit exceeded counter

This commit is contained in:
Chris Eager 2022-02-15 15:41:25 -08:00 committed by Chris Eager
parent 288cbf4a80
commit d259ef0348
1 changed files with 11 additions and 7 deletions

View File

@ -222,7 +222,7 @@ public class MessageController {
assert (destination.isPresent()); assert (destination.isPresent());
if (source.isPresent() && !isSyncMessage) { if (source.isPresent() && !isSyncMessage) {
checkRateLimit(source.get(), destination.get()); checkRateLimit(source.get(), destination.get(), userAgent);
} }
validateCompleteDeviceList(destination.get(), messages.getMessages(), validateCompleteDeviceList(destination.get(), messages.getMessages(),
@ -315,7 +315,7 @@ public class MessageController {
assert (destination.isPresent()); assert (destination.isPresent());
if (source.isPresent() && !isSyncMessage) { if (source.isPresent() && !isSyncMessage) {
checkRateLimit(source.get(), destination.get()); checkRateLimit(source.get(), destination.get(), userAgent);
} }
final List<IncomingDeviceMessage> messagesAsList = Arrays.asList(messages); final List<IncomingDeviceMessage> messagesAsList = Arrays.asList(messages);
@ -335,7 +335,7 @@ public class MessageController {
if (destinationDevice.isPresent()) { if (destinationDevice.isPresent()) {
Metrics.counter(SENT_MESSAGE_COUNTER_NAME, tags).increment(); Metrics.counter(SENT_MESSAGE_COUNTER_NAME, tags).increment();
sendMessage(source, destination.get(), destinationDevice.get(), destinationUuid, timestamp, online, message, userAgent); sendMessage(source, destination.get(), destinationDevice.get(), destinationUuid, timestamp, online, message);
} }
} }
@ -633,7 +633,8 @@ public class MessageController {
} }
} }
private void sendMessage(Optional<AuthenticatedAccount> source, Account destinationAccount, Device destinationDevice, UUID destinationUuid, long timestamp, boolean online, IncomingDeviceMessage message, String userAgentString) throws NoSuchUserException { private void sendMessage(Optional<AuthenticatedAccount> source, Account destinationAccount, Device destinationDevice,
UUID destinationUuid, long timestamp, boolean online, IncomingDeviceMessage message) throws NoSuchUserException {
try { try {
Envelope.Builder messageBuilder = Envelope.newBuilder(); Envelope.Builder messageBuilder = Envelope.newBuilder();
long serverTimestamp = System.currentTimeMillis(); long serverTimestamp = System.currentTimeMillis();
@ -693,15 +694,18 @@ public class MessageController {
} }
} }
private void checkRateLimit(AuthenticatedAccount source, Account destination) throws RateLimitExceededException { private void checkRateLimit(AuthenticatedAccount source, Account destination, String userAgent)
throws RateLimitExceededException {
final String senderCountryCode = Util.getCountryCode(source.getAccount().getNumber()); final String senderCountryCode = Util.getCountryCode(source.getAccount().getNumber());
try { try {
rateLimiters.getMessagesLimiter().validate(source.getAccount().getUuid(), destination.getUuid()); rateLimiters.getMessagesLimiter().validate(source.getAccount().getUuid(), destination.getUuid());
} catch (final RateLimitExceededException e) { } catch (final RateLimitExceededException e) {
Metrics.counter(RATE_LIMITED_MESSAGE_COUNTER_NAME, Metrics.counter(RATE_LIMITED_MESSAGE_COUNTER_NAME,
SENDER_COUNTRY_TAG_NAME, senderCountryCode, Tags.of(
RATE_LIMIT_REASON_TAG_NAME, "singleDestinationRate").increment(); UserAgentTagUtil.getPlatformTag(userAgent),
Tag.of(SENDER_COUNTRY_TAG_NAME, senderCountryCode),
Tag.of(RATE_LIMIT_REASON_TAG_NAME, "singleDestinationRate"))).increment();
throw e; throw e;
} }