From 3aa4d8713c222dafccceed2ffc9754bd3804e8c6 Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Tue, 11 Jun 2024 14:56:29 -0400 Subject: [PATCH] Switch to a remote-aggregated distribution for message size metrics --- .../controllers/MessageController.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java index 276ffabef..2d5ec8bfa 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java @@ -15,6 +15,7 @@ import com.google.protobuf.ByteString; import io.dropwizard.auth.Auth; import io.dropwizard.util.DataSize; import io.micrometer.core.instrument.Counter; +import io.micrometer.core.instrument.DistributionSummary; import io.micrometer.core.instrument.Metrics; import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; @@ -176,7 +177,7 @@ public class MessageController { private static final String REJECT_OVERSIZE_MESSAGE_COUNTER = name(MessageController.class, "rejectOversizeMessage"); private static final String SENT_MESSAGE_COUNTER_NAME = name(MessageController.class, "sentMessages"); - private static final String CONTENT_SIZE_DISTRIBUTION_NAME = name(MessageController.class, "messageContentSize"); + private static final String CONTENT_SIZE_DISTRIBUTION_NAME = MetricsUtil.name(MessageController.class, "messageContentSize"); private static final String OUTGOING_MESSAGE_LIST_SIZE_BYTES_DISTRIBUTION_NAME = name(MessageController.class, "outgoingMessageListSizeBytes"); private static final String RATE_LIMITED_MESSAGE_COUNTER_NAME = name(MessageController.class, "rateLimitedMessage"); @@ -933,15 +934,19 @@ public class MessageController { } private void validateContentLength(final int contentLength, final String userAgent) { - Metrics.summary(CONTENT_SIZE_DISTRIBUTION_NAME, Tags.of(UserAgentTagUtil.getPlatformTag(userAgent))) + final boolean oversize = contentLength > MAX_MESSAGE_SIZE; + + DistributionSummary.builder(CONTENT_SIZE_DISTRIBUTION_NAME) + .tags(Tags.of(UserAgentTagUtil.getPlatformTag(userAgent), Tag.of("oversize", String.valueOf(oversize)))) + .publishPercentileHistogram(true) + .register(Metrics.globalRegistry) .record(contentLength); - if (contentLength > MAX_MESSAGE_SIZE) { + if (oversize) { Metrics.counter(REJECT_OVERSIZE_MESSAGE_COUNTER, Tags.of(UserAgentTagUtil.getPlatformTag(userAgent))) .increment(); throw new WebApplicationException(Status.REQUEST_ENTITY_TOO_LARGE); } - } private void validateEnvelopeType(final int type, final String userAgent) {