diff --git a/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java b/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java index a58c2d16d..f204a43ca 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java +++ b/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java @@ -1,5 +1,8 @@ package org.whispersystems.textsecuregcm.websocket; +import com.codahale.metrics.Histogram; +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.SharedMetricRegistries; import com.google.common.base.Optional; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; @@ -18,6 +21,7 @@ import org.whispersystems.textsecuregcm.storage.Device; import org.whispersystems.textsecuregcm.storage.MessagesManager; import org.whispersystems.textsecuregcm.storage.PubSubListener; import org.whispersystems.textsecuregcm.storage.PubSubManager; +import org.whispersystems.textsecuregcm.util.Constants; import org.whispersystems.textsecuregcm.util.Pair; import org.whispersystems.websocket.WebSocketClient; import org.whispersystems.websocket.messages.WebSocketResponseMessage; @@ -26,6 +30,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.List; +import static com.codahale.metrics.MetricRegistry.name; import static org.whispersystems.textsecuregcm.entities.MessageProtos.OutgoingMessageSignal; import static org.whispersystems.textsecuregcm.storage.PubSubProtos.PubSubMessage; @@ -33,6 +38,9 @@ public class WebSocketConnection implements PubSubListener { private static final Logger logger = LoggerFactory.getLogger(WebSocketConnection.class); + private static final MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME); + private static final Histogram durationHistogram = metricRegistry.histogram(name(WebSocketConnection.class, "connected_duration")); + private final AccountsManager accountsManager; private final PushSender pushSender; private final MessagesManager messagesManager; @@ -43,6 +51,8 @@ public class WebSocketConnection implements PubSubListener { private final WebsocketAddress address; private final WebSocketClient client; + private long connectionStartTime; + public WebSocketConnection(AccountsManager accountsManager, PushSender pushSender, MessagesManager messagesManager, @@ -62,11 +72,13 @@ public class WebSocketConnection implements PubSubListener { } public void onConnected() { + connectionStartTime = System.currentTimeMillis(); pubSubManager.subscribe(address, this); processStoredMessages(); } public void onConnectionLost() { + durationHistogram.update(System.currentTimeMillis() - connectionStartTime); pubSubManager.unsubscribe(address, this); }