From 7292a88ea3dec00f5da48852711859586259d4cb Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Tue, 16 Aug 2022 11:26:42 -0400 Subject: [PATCH] Record table performance metrics around reported messages --- .../storage/ReportMessageDynamoDb.java | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/ReportMessageDynamoDb.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/ReportMessageDynamoDb.java index 7ecd7a851..611514d2c 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/ReportMessageDynamoDb.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/ReportMessageDynamoDb.java @@ -1,5 +1,7 @@ package org.whispersystems.textsecuregcm.storage; +import io.micrometer.core.instrument.Metrics; +import io.micrometer.core.instrument.Timer; import org.whispersystems.textsecuregcm.util.AttributeValues; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.dynamodb.model.DeleteItemRequest; @@ -10,6 +12,8 @@ import java.time.Duration; import java.time.Instant; import java.util.Map; +import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name; + public class ReportMessageDynamoDb { static final String KEY_HASH = "H"; @@ -19,6 +23,9 @@ public class ReportMessageDynamoDb { private final String tableName; private final Duration ttl; + private static final String REMOVED_MESSAGE_COUNTER_NAME = name(ReportMessageDynamoDb.class, "removed"); + private static final Timer REMOVED_MESSAGE_AGE_TIMER = Metrics.timer(name(ReportMessageDynamoDb.class, "removedMessageAge")); + public ReportMessageDynamoDb(final DynamoDbClient dynamoDB, final String tableName, final Duration ttl) { this.db = dynamoDB; this.tableName = tableName; @@ -41,6 +48,22 @@ public class ReportMessageDynamoDb { .key(Map.of(KEY_HASH, AttributeValues.fromByteArray(hash))) .returnValues(ReturnValue.ALL_OLD) .build()); - return !deleteItemResponse.attributes().isEmpty(); + + final boolean found = !deleteItemResponse.attributes().isEmpty(); + + if (found) { + if (deleteItemResponse.attributes().containsKey(ATTR_TTL)) { + final Instant expiration = + Instant.ofEpochSecond(Long.parseLong(deleteItemResponse.attributes().get(ATTR_TTL).n())); + + final Duration approximateAge = ttl.minus(Duration.between(Instant.now(), expiration)); + + REMOVED_MESSAGE_AGE_TIMER.record(approximateAge); + } + } + + Metrics.counter(REMOVED_MESSAGE_COUNTER_NAME, "found", String.valueOf(found)).increment(); + + return found; } }