diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index c4fdfdf78..8411f670b 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -4,7 +4,7 @@ */ package org.whispersystems.textsecuregcm; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import static java.util.Objects.requireNonNull; import com.google.common.collect.Lists; @@ -1173,7 +1173,7 @@ public class WhisperServerService extends Application { - private static final String LEGACY_NAME_PREFIX = "org.whispersystems.textsecuregcm.auth.BaseAccountAuthenticator"; - - private static final String AUTHENTICATION_COUNTER_NAME = name(LEGACY_NAME_PREFIX, "authentication"); + private static final String AUTHENTICATION_COUNTER_NAME = name(AccountAuthenticator.class, "authentication"); private static final String AUTHENTICATION_SUCCEEDED_TAG_NAME = "succeeded"; private static final String AUTHENTICATION_FAILURE_REASON_TAG_NAME = "reason"; - private static final String DAYS_SINCE_LAST_SEEN_DISTRIBUTION_NAME = name(LEGACY_NAME_PREFIX, "daysSinceLastSeen"); + private static final String DAYS_SINCE_LAST_SEEN_DISTRIBUTION_NAME = name(AccountAuthenticator.class, "daysSinceLastSeen"); private static final String IS_PRIMARY_DEVICE_TAG = "isPrimary"; private static final Counter OLD_TOKEN_VERSION_COUNTER = diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/backup/BackupManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/backup/BackupManager.java index d091591c8..19146de6e 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/backup/BackupManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/backup/BackupManager.java @@ -74,8 +74,8 @@ public class BackupManager { private static final Timer SYNCHRONOUS_DELETE_TIMER = Metrics.timer(MetricsUtil.name(BackupManager.class, "synchronousDelete")); - private static final String NUM_OBJECTS_SUMMARY_NAME = MetricsUtil.name(BackupsDb.class, "numObjects"); - private static final String BYTES_USED_SUMMARY_NAME = MetricsUtil.name(BackupsDb.class, "bytesUsed"); + private static final String NUM_OBJECTS_SUMMARY_NAME = MetricsUtil.name(BackupManager.class, "numObjects"); + private static final String BYTES_USED_SUMMARY_NAME = MetricsUtil.name(BackupManager.class, "bytesUsed"); private static final String SUCCESS_TAG_NAME = "success"; private static final String FAILURE_REASON_TAG_NAME = "reason"; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java index 3f4e91d15..9a00c74b0 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/CertificateController.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.controllers; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import com.google.common.annotations.VisibleForTesting; import io.dropwizard.auth.Auth; @@ -55,7 +55,7 @@ public class CertificateController { @VisibleForTesting public static final Duration MAX_REDEMPTION_DURATION = Duration.ofDays(7); - private static final String GENERATE_DELIVERY_CERTIFICATE_COUNTER_NAME = name(CertificateGenerator.class, "generateCertificate"); + private static final String GENERATE_DELIVERY_CERTIFICATE_COUNTER_NAME = name(CertificateController.class, "generateCertificate"); private static final String INCLUDE_E164_TAG_NAME = "includeE164"; public CertificateController( diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java index c45b4596b..e8a4fc570 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/KeepAliveController.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.controllers; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import io.dropwizard.auth.Auth; import io.micrometer.core.instrument.Metrics; 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 dfc0007bb..fa3d03f23 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/MessageController.java @@ -4,7 +4,7 @@ */ package org.whispersystems.textsecuregcm.controllers; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import com.google.common.net.HttpHeaders; import io.dropwizard.auth.Auth; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java index 146ab1cf4..7ff684c17 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProvisioningController.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.controllers; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import com.google.common.annotations.VisibleForTesting; import com.google.common.net.HttpHeaders; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java index e42c53eb3..3f247e05f 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/IncomingMessageList.java @@ -4,7 +4,7 @@ */ package org.whispersystems.textsecuregcm.entities; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; @@ -34,7 +34,7 @@ public record IncomingMessageList(@NotNull private static final Counter REJECT_DUPLICATE_RECIPIENT_COUNTER = Metrics.counter( - name(MessageController.class, "rejectDuplicateRecipients"), + name(IncomingMessageList.class, "rejectDuplicateRecipients"), "multiRecipient", "false"); @JsonCreator diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/filters/RemoteDeprecationFilter.java b/service/src/main/java/org/whispersystems/textsecuregcm/filters/RemoteDeprecationFilter.java index 3aea5b38c..ee5afbe41 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/filters/RemoteDeprecationFilter.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/filters/RemoteDeprecationFilter.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.filters; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import com.google.common.net.HttpHeaders; import com.vdurmont.semver4j.Semver; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/filters/RequestStatisticsFilter.java b/service/src/main/java/org/whispersystems/textsecuregcm/filters/RequestStatisticsFilter.java index 6fa38730a..7469e11a6 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/filters/RequestStatisticsFilter.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/filters/RequestStatisticsFilter.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.filters; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import static java.util.Objects.requireNonNull; import com.google.common.net.InetAddresses; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/limits/PushChallengeManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/PushChallengeManager.java index 0a79ad098..30f1ec50d 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/limits/PushChallengeManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/limits/PushChallengeManager.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.limits; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import io.micrometer.core.instrument.Metrics; import java.security.SecureRandom; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManager.java index 7a5e95515..b7e41d59a 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/limits/RateLimitChallengeManager.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.limits; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import io.micrometer.core.instrument.Metrics; import io.micrometer.core.instrument.Tag; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/ApplicationShutdownMonitor.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/ApplicationShutdownMonitor.java index b9eb266ad..ab4c36319 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/ApplicationShutdownMonitor.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/ApplicationShutdownMonitor.java @@ -6,7 +6,7 @@ package org.whispersystems.textsecuregcm.metrics; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; @@ -24,7 +24,7 @@ public class ApplicationShutdownMonitor implements LifeCycle.Listener { public ApplicationShutdownMonitor(final MeterRegistry meterRegistry) { // without a strong reference to the gauge’s value supplier, shutdown garbage collection // might prevent the final value from being reported - Gauge.builder(name(getClass().getSimpleName(), "shuttingDown"), () -> shuttingDown.get() ? 1 : 0) + Gauge.builder(name(getClass(), "shuttingDown"), () -> shuttingDown.get() ? 1 : 0) .strongReference(true) .register(meterRegistry); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MetricsRequestEventListener.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MetricsRequestEventListener.java index 798c43601..71f4eb47f 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MetricsRequestEventListener.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/MetricsRequestEventListener.java @@ -5,7 +5,8 @@ package org.whispersystems.textsecuregcm.metrics; -import com.codahale.metrics.MetricRegistry; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; + import com.google.common.annotations.VisibleForTesting; import com.google.common.net.HttpHeaders; import io.micrometer.core.instrument.MeterRegistry; @@ -35,10 +36,10 @@ public class MetricsRequestEventListener implements RequestEventListener { private final ClientReleaseManager clientReleaseManager; - public static final String REQUEST_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "request"); - public static final String REQUESTS_BY_VERSION_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "requestByVersion"); - public static final String RESPONSE_BYTES_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "responseBytes"); - public static final String REQUEST_BYTES_COUNTER_NAME = MetricRegistry.name(MetricsRequestEventListener.class, "requestBytes"); + public static final String REQUEST_COUNTER_NAME = name(MetricsRequestEventListener.class, "request"); + public static final String REQUESTS_BY_VERSION_COUNTER_NAME = name(MetricsRequestEventListener.class, "requestByVersion"); + public static final String RESPONSE_BYTES_COUNTER_NAME = name(MetricsRequestEventListener.class, "responseBytes"); + public static final String REQUEST_BYTES_COUNTER_NAME = name(MetricsRequestEventListener.class, "requestBytes"); @VisibleForTesting static final String PATH_TAG = "path"; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/ReportedMessageMetricsListener.java b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/ReportedMessageMetricsListener.java index 3c1c6eb85..37e50ba94 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/metrics/ReportedMessageMetricsListener.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/metrics/ReportedMessageMetricsListener.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.metrics; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import io.micrometer.core.instrument.Metrics; import java.util.Map; @@ -15,7 +15,6 @@ import net.logstash.logback.marker.Markers; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.whispersystems.textsecuregcm.storage.AccountsManager; -import org.whispersystems.textsecuregcm.storage.ReportMessageManager; import org.whispersystems.textsecuregcm.storage.ReportedMessageListener; import org.whispersystems.textsecuregcm.util.Util; @@ -24,8 +23,8 @@ public class ReportedMessageMetricsListener implements ReportedMessageListener { private final AccountsManager accountsManager; // ReportMessageManager name used deliberately to preserve continuity of metrics - private static final String REPORTED_COUNTER_NAME = name(ReportMessageManager.class, "reported"); - private static final String REPORTER_COUNTER_NAME = name(ReportMessageManager.class, "reporter"); + private static final String REPORTED_COUNTER_NAME = name(ReportedMessageMetricsListener.class, "reported"); + private static final String REPORTER_COUNTER_NAME = name(ReportedMessageMetricsListener.class, "reporter"); private static final String COUNTRY_CODE_TAG_NAME = "countryCode"; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/push/MessageSender.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/MessageSender.java index 02a3de993..2921366d4 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/push/MessageSender.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/push/MessageSender.java @@ -4,7 +4,7 @@ */ package org.whispersystems.textsecuregcm.push; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import static org.whispersystems.textsecuregcm.entities.MessageProtos.Envelope; import com.google.common.annotations.VisibleForTesting; @@ -24,7 +24,6 @@ import javax.annotation.Nullable; import org.apache.commons.lang3.StringUtils; import org.signal.libsignal.protocol.SealedSenderMultiRecipientMessage; import org.signal.libsignal.protocol.util.Pair; -import org.whispersystems.textsecuregcm.controllers.MessageController; import org.whispersystems.textsecuregcm.controllers.MismatchedDevices; import org.whispersystems.textsecuregcm.controllers.MismatchedDevicesException; import org.whispersystems.textsecuregcm.controllers.MultiRecipientMismatchedDevicesException; @@ -54,8 +53,8 @@ public class MessageSender { private final PushNotificationManager pushNotificationManager; // Note that these names deliberately reference `MessageController` for metric continuity - private static final String REJECT_OVERSIZE_MESSAGE_COUNTER_NAME = name(MessageController.class, "rejectOversizeMessage"); - private static final String CONTENT_SIZE_DISTRIBUTION_NAME = MetricsUtil.name(MessageController.class, "messageContentSize"); + private static final String REJECT_OVERSIZE_MESSAGE_COUNTER_NAME = name(MessageSender.class, "rejectOversizeMessage"); + private static final String CONTENT_SIZE_DISTRIBUTION_NAME = MetricsUtil.name(MessageSender.class, "messageContentSize"); private static final String EMPTY_MESSAGE_LIST_COUNTER_NAME = MetricsUtil.name(MessageSender.class, "emptyMessageList"); private static final String SEND_COUNTER_NAME = name(MessageSender.class, "sendMessage"); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/push/ProvisioningManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/ProvisioningManager.java index e6542b9f2..f6abce980 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/push/ProvisioningManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/push/ProvisioningManager.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.push; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AbstractDynamoDbStore.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AbstractDynamoDbStore.java index a5abc8d56..d7ee4e1c2 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AbstractDynamoDbStore.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AbstractDynamoDbStore.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.storage; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import static io.micrometer.core.instrument.Metrics.counter; import static io.micrometer.core.instrument.Metrics.timer; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java index cb7ee5cfe..9df40a1ba 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java @@ -4,7 +4,7 @@ */ package org.whispersystems.textsecuregcm.storage; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import static java.util.Objects.requireNonNull; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java index 679b3e3e0..198545531 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.storage; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import static java.util.Objects.requireNonNull; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/KeysManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/KeysManager.java index 742433bbf..d52f19803 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/KeysManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/KeysManager.java @@ -13,7 +13,6 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; -import org.whispersystems.textsecuregcm.controllers.KeysController; import org.whispersystems.textsecuregcm.entities.ECPreKey; import org.whispersystems.textsecuregcm.entities.ECSignedPreKey; import org.whispersystems.textsecuregcm.entities.KEMSignedPreKey; @@ -28,7 +27,7 @@ import javax.annotation.Nullable; public class KeysManager { // KeysController for backwards compatibility - private static final String GET_KEYS_COUNTER_NAME = MetricsUtil.name(KeysController.class, "getKeys"); + private static final String GET_KEYS_COUNTER_NAME = MetricsUtil.name(KeysManager.class, "getKeys"); private final SingleUseECPreKeyStore ecPreKeys; private final SingleUseKEMPreKeyStore pqPreKeys; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java index 569e85f44..313986c03 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.storage; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import com.google.common.annotations.VisibleForTesting; import com.google.protobuf.ByteString; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesDynamoDb.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesDynamoDb.java index 951723842..ce1963e4e 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesDynamoDb.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesDynamoDb.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.storage; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import static io.micrometer.core.instrument.Metrics.timer; import com.google.common.annotations.VisibleForTesting; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/OneTimeDonationsManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/OneTimeDonationsManager.java index 1fef1550b..5eb300f28 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/OneTimeDonationsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/OneTimeDonationsManager.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.storage; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import io.micrometer.core.instrument.Metrics; import java.time.Duration; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java index a0e6940aa..2cd6239db 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/AuthenticatedConnectListener.java @@ -35,7 +35,7 @@ import reactor.core.scheduler.Scheduler; public class AuthenticatedConnectListener implements WebSocketConnectListener { - private static final String OPEN_WEBSOCKET_GAUGE_NAME = name(WebSocketConnection.class, "openWebsockets"); + private static final String OPEN_WEBSOCKET_GAUGE_NAME = name(AuthenticatedConnectListener.class, "openWebsockets"); private static final String NEW_CONNECTION_COUNTER_NAME = name(AuthenticatedConnectListener.class, "newConnections"); private static final String CONNECTED_DURATION_TIMER_NAME = name(AuthenticatedConnectListener.class, "connectedDuration"); 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 6abf7fd4d..8da462b3b 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/websocket/WebSocketConnection.java @@ -5,7 +5,7 @@ package org.whispersystems.textsecuregcm.websocket; -import static com.codahale.metrics.MetricRegistry.name; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; import com.google.common.annotations.VisibleForTesting; import io.micrometer.core.instrument.Counter; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/workers/CommandDependencies.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/CommandDependencies.java index ea58de08f..8493f6be2 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/workers/CommandDependencies.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/workers/CommandDependencies.java @@ -5,9 +5,6 @@ package org.whispersystems.textsecuregcm.workers; -import static com.codahale.metrics.MetricRegistry.name; - -import com.codahale.metrics.MetricRegistry; import com.fasterxml.jackson.databind.DeserializationFeature; import io.dropwizard.core.setup.Environment; import io.lettuce.core.resource.ClientResources; @@ -25,7 +22,8 @@ import org.signal.libsignal.zkgroup.InvalidInputException; import org.signal.libsignal.zkgroup.ServerSecretParams; import org.signal.libsignal.zkgroup.receipts.ServerZkReceiptOperations; import org.whispersystems.textsecuregcm.WhisperServerConfiguration; -import org.whispersystems.textsecuregcm.WhisperServerService; +import org.whispersystems.textsecuregcm.WhisperServerService.ExecutorServiceBuilder; +import org.whispersystems.textsecuregcm.WhisperServerService.ScheduledExecutorServiceBuilder; import org.whispersystems.textsecuregcm.attachments.TusAttachmentGenerator; import org.whispersystems.textsecuregcm.auth.DisconnectionRequestManager; import org.whispersystems.textsecuregcm.auth.ExternalServiceCredentialsGenerator; @@ -81,6 +79,7 @@ import org.whispersystems.textsecuregcm.subscriptions.AppleAppStoreClient; import org.whispersystems.textsecuregcm.subscriptions.AppleAppStoreManager; import org.whispersystems.textsecuregcm.subscriptions.GooglePlayBillingManager; import org.whispersystems.textsecuregcm.util.ManagedAwsCrt; +import org.whispersystems.textsecuregcm.util.ManagedExecutors; import reactor.core.scheduler.Scheduler; import reactor.core.scheduler.Schedulers; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; @@ -130,8 +129,8 @@ record CommandDependencies( final AwsCredentialsProvider awsCredentialsProvider = configuration.getAwsCredentialsConfiguration().build(); - ScheduledExecutorService dynamicConfigurationExecutor = environment.lifecycle() - .scheduledExecutorService(name(WhisperServerService.class, "dynamicConfiguration-%d")).threads(1).build(); + ScheduledExecutorService dynamicConfigurationExecutor = ScheduledExecutorServiceBuilder.of(environment, "dynamicConfiguration") + .threads(1).build(); DynamicConfigurationManager dynamicConfigurationManager = new DynamicConfigurationManager<>( @@ -151,33 +150,35 @@ record CommandDependencies( Scheduler messageDeliveryScheduler = Schedulers.fromExecutorService( environment.lifecycle().executorService("messageDelivery").minThreads(4).maxThreads(4).build()); - ExecutorService messageDeletionExecutor = environment.lifecycle() - .executorService(name(WhisperServerService.class, "messageDeletion-%d")).minThreads(4).maxThreads(4).build(); - ExecutorService secureValueRecoveryServiceExecutor = environment.lifecycle() - .executorService(name(WhisperServerService.class, "secureValueRecoveryService-%d")).maxThreads(8).minThreads(8).build(); - ExecutorService storageServiceExecutor = environment.lifecycle() - .executorService(name(WhisperServerService.class, "storageService-%d")).maxThreads(8).minThreads(8).build(); - ExecutorService accountLockExecutor = environment.lifecycle() - .executorService(name(WhisperServerService.class, "accountLock-%d")).minThreads(8).maxThreads(8).build(); - ExecutorService remoteStorageHttpExecutor = environment.lifecycle() - .executorService(name(WhisperServerService.class, "remoteStorage-%d")) + ExecutorService messageDeletionExecutor = ExecutorServiceBuilder.of(environment, "messageDeletion") + .minThreads(4).maxThreads(4).build(); + ExecutorService secureValueRecoveryServiceExecutor = ExecutorServiceBuilder.of(environment, "secureValueRecoveryService") + .maxThreads(8).minThreads(8).build(); + ExecutorService storageServiceExecutor = ExecutorServiceBuilder.of(environment, "storageService") + .maxThreads(8).minThreads(8).build(); + ExecutorService accountLockExecutor = ExecutorServiceBuilder.of(environment, "accountLock") + .minThreads(8).maxThreads(8).build(); + ExecutorService remoteStorageHttpExecutor = ExecutorServiceBuilder.of(environment, "remoteStorage") + .minThreads(0).maxThreads(Integer.MAX_VALUE).workQueue(new SynchronousQueue<>()) .keepAliveTime(io.dropwizard.util.Duration.seconds(60L)).build(); - ExecutorService apnSenderExecutor = environment.lifecycle().executorService(name(WhisperServerService.class, "apnSender-%d")) + ExecutorService apnSenderExecutor = ExecutorServiceBuilder.of(environment, "apnSender") .maxThreads(1).minThreads(1).build(); - ExecutorService fcmSenderExecutor = environment.lifecycle().executorService(name(WhisperServerService.class, "fcmSender-%d")) + ExecutorService fcmSenderExecutor = ExecutorServiceBuilder.of(environment, "fcmSender") .maxThreads(16).minThreads(16).build(); - ExecutorService clientEventExecutor = environment.lifecycle() - .virtualExecutorService(name(WhisperServerService.class, "clientEvent-%d")); - ExecutorService asyncOperationQueueingExecutor = environment.lifecycle() - .executorService(name(WhisperServerService.class, "asyncOperationQueueing-%d")).minThreads(1).maxThreads(1).build(); - ExecutorService disconnectionRequestListenerExecutor = environment.lifecycle() - .virtualExecutorService(name(WhisperServerService.class, "disconnectionRequest-%d")); + ExecutorService clientEventExecutor = ManagedExecutors.newVirtualThreadPerTaskExecutor( + "clientEvent", configuration.getVirtualThreadConfiguration().maxConcurrentThreadsPerExecutor(), environment); + ExecutorService asyncOperationQueueingExecutor = ExecutorServiceBuilder.of(environment, "asyncOperationQueueing") + .minThreads(1).maxThreads(1).build(); + ExecutorService disconnectionRequestListenerExecutor = ManagedExecutors.newVirtualThreadPerTaskExecutor( + "disconnectionRequest", + configuration.getVirtualThreadConfiguration().maxConcurrentThreadsPerExecutor(), + environment); - final ScheduledExecutorService messagePollExecutor = environment.lifecycle() - .scheduledExecutorService(name(WhisperServerService.class, "messagePollExecutor-%d")).threads(1).build(); - final ScheduledExecutorService retryExecutor = environment.lifecycle() - .scheduledExecutorService(name(WhisperServerService.class, "retry-%d")).threads(4).build(); + final ScheduledExecutorService messagePollExecutor = ScheduledExecutorServiceBuilder.of(environment, "messagePollExecutor") + .threads(1).build(); + final ScheduledExecutorService retryExecutor = ScheduledExecutorServiceBuilder.of(environment, "retry") + .threads(1).build(); ExternalServiceCredentialsGenerator storageCredentialsGenerator = SecureStorageController.credentialsGenerator( configuration.getSecureStorageServiceConfiguration()); @@ -186,8 +187,10 @@ record CommandDependencies( ExternalServiceCredentialsGenerator secureValueRecoveryBCredentialsGenerator = SecureValueRecoveryBCredentialsGeneratorFactory.svrbCredentialsGenerator(configuration.getSvrbConfiguration()); - final ExecutorService awsSdkMetricsExecutor = environment.lifecycle() - .virtualExecutorService(MetricRegistry.name(WhisperServerService.class, "awsSdkMetrics-%d")); + final ExecutorService awsSdkMetricsExecutor = ManagedExecutors.newVirtualThreadPerTaskExecutor( + "awsSdkMetrics", + configuration.getVirtualThreadConfiguration().maxConcurrentThreadsPerExecutor(), + environment); DynamoDbAsyncClient dynamoDbAsyncClient = configuration.getDynamoDbClientConfiguration() .buildAsyncClient(awsCredentialsProvider, new MicrometerAwsSdkMetricPublisher(awsSdkMetricsExecutor, "dynamoDbAsyncCommand"));