0
0
mirror of https://github.com/signalapp/Signal-Server.git synced 2024-09-20 12:02:18 +02:00

Estimate the size of message entity lists sent via the REST API.

This commit is contained in:
Jon Chambers 2020-10-13 13:46:16 -04:00 committed by Jon Chambers
parent 679fd9d60f
commit adac7d7fb2

View File

@ -52,6 +52,9 @@ import org.whispersystems.textsecuregcm.storage.MessagesManager;
import org.whispersystems.textsecuregcm.util.Base64;
import org.whispersystems.textsecuregcm.util.Constants;
import org.whispersystems.textsecuregcm.util.Util;
import org.whispersystems.textsecuregcm.util.ua.UnrecognizedUserAgentException;
import org.whispersystems.textsecuregcm.util.ua.UserAgent;
import org.whispersystems.textsecuregcm.util.ua.UserAgentUtil;
import org.whispersystems.textsecuregcm.websocket.WebSocketConnection;
import javax.validation.Valid;
@ -67,6 +70,7 @@ import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
@ -95,7 +99,8 @@ public class MessageController {
private final MessagesManager messagesManager;
private final ApnFallbackManager apnFallbackManager;
private static final String CONTENT_SIZE_DISTRIBUTION_NAME = name(MessageController.class, "messageContentSize");
private static final String CONTENT_SIZE_DISTRIBUTION_NAME = name(MessageController.class, "messageContentSize");
private static final String OUTGOING_MESSAGE_LIST_SIZE_BYTES_DISTRIBUTION_NAME = name(MessageController.class, "outgoingMessageListSizeBytes");
private static final int MAX_MESSAGE_SIZE = 64 * 1024;
@ -216,9 +221,34 @@ public class MessageController {
outgoingMessageListSizeHistogram.update(outgoingMessages.getMessages().size());
{
String platform;
try {
platform = UserAgentUtil.parseUserAgentString(userAgent).getPlatform().name().toLowerCase();
} catch (final UnrecognizedUserAgentException ignored) {
platform = "unrecognized";
}
Metrics.summary(OUTGOING_MESSAGE_LIST_SIZE_BYTES_DISTRIBUTION_NAME, "platform", platform).record(estimateMessageListSizeBytes(outgoingMessages));
}
return outgoingMessages;
}
private static long estimateMessageListSizeBytes(final OutgoingMessageEntityList messageList) {
long size = 0;
for (final OutgoingMessageEntity message : messageList.getMessages()) {
size += message.getContent() == null ? 0 : message.getContent().length;
size += message.getMessage() == null ? 0 : message.getMessage().length;
size += Util.isEmpty(message.getSource()) ? 0 : message.getSource().length();
size += Util.isEmpty(message.getRelay()) ? 0 : message.getRelay().length();
}
return size;
}
@Timed
@DELETE
@Path("/{source}/{timestamp}")