From 4f1001490280b7df3681da6f2f17a8b704356fce Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Wed, 17 Jul 2024 12:15:59 -0400 Subject: [PATCH] Add an "is primary" dimension to message latency measurements --- .../textsecuregcm/controllers/MessageController.java | 6 +++++- .../textsecuregcm/metrics/MessageMetrics.java | 4 +++- .../textsecuregcm/websocket/WebSocketConnection.java | 6 +++++- 3 files changed, 13 insertions(+), 3 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 543a19a99..5aa98fbd2 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java @@ -742,7 +742,11 @@ public class MessageController { .map(OutgoingMessageEntity::fromEnvelope) .peek(outgoingMessageEntity -> { messageMetrics.measureAccountOutgoingMessageUuidMismatches(auth.getAccount(), outgoingMessageEntity); - messageMetrics.measureOutgoingMessageLatency(outgoingMessageEntity.serverTimestamp(), "rest", userAgent, clientReleaseManager); + messageMetrics.measureOutgoingMessageLatency(outgoingMessageEntity.serverTimestamp(), + "rest", + auth.getAuthenticatedDevice().isPrimary(), + userAgent, + clientReleaseManager); }) .collect(Collectors.toList()), messagesAndHasMore.second()); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MessageMetrics.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MessageMetrics.java index 2c74bb5fe..a7b473f24 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MessageMetrics.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MessageMetrics.java @@ -70,12 +70,14 @@ public final class MessageMetrics { public void measureOutgoingMessageLatency(final long serverTimestamp, final String channel, + final boolean isPrimaryDevice, final String userAgent, final ClientReleaseManager clientReleaseManager) { - final List tags = new ArrayList<>(3); + final List tags = new ArrayList<>(4); tags.add(UserAgentTagUtil.getPlatformTag(userAgent)); tags.add(Tag.of("channel", channel)); + tags.add(Tag.of("isPrimary", String.valueOf(isPrimaryDevice))); UserAgentTagUtil.getClientVersionTag(userAgent, clientReleaseManager).ifPresent(tags::add); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java index bf709623e..10288ba73 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java @@ -222,7 +222,11 @@ public class WebSocketConnection implements MessageAvailabilityListener, Displac if (throwable != null) { sendFailuresCounter.increment(); } else { - messageMetrics.measureOutgoingMessageLatency(message.getServerTimestamp(), "websocket", client.getUserAgent(), clientReleaseManager); + messageMetrics.measureOutgoingMessageLatency(message.getServerTimestamp(), + "websocket", + device.isPrimary(), + client.getUserAgent(), + clientReleaseManager); } }).thenCompose(response -> { final CompletableFuture result;