Don't count backup metrics on TTL refresh

This commit is contained in:
Ravi Khadiwala
2025-09-11 13:55:02 -05:00
committed by ravi-signal
parent 8f65486fab
commit 31ebe9071a
2 changed files with 28 additions and 14 deletions

View File

@@ -254,8 +254,7 @@ public class BackupsDb {
.updateItemBuilder()
.returnValues(ReturnValue.ALL_OLD)
.build())
.thenAccept(updateItemResponse ->
updateMetricsAfterRefresh(backupUser, today, updateItemResponse.attributes()));
.thenRun(Util.NOOP);
}
/**
@@ -274,10 +273,10 @@ public class BackupsDb {
.returnValues(ReturnValue.ALL_OLD)
.build())
.thenAccept(updateItemResponse ->
updateMetricsAfterRefresh(backupUser, today, updateItemResponse.attributes()));
updateMetricsAfterUpload(backupUser, today, updateItemResponse.attributes()));
}
private void updateMetricsAfterRefresh(final AuthenticatedBackupUser backupUser, final Instant today, final Map<String, AttributeValue> item) {
private void updateMetricsAfterUpload(final AuthenticatedBackupUser backupUser, final Instant today, final Map<String, AttributeValue> item) {
final Instant previousRefreshTime = Instant.ofEpochSecond(
AttributeValues.getLong(item, ATTR_LAST_REFRESH, 0L));
// Only publish a metric update once per day

View File

@@ -5,24 +5,23 @@
package org.whispersystems.textsecuregcm.workers;
import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;
import io.dropwizard.core.Application;
import io.dropwizard.core.setup.Environment;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.DistributionSummary;
import io.micrometer.core.instrument.Metrics;
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
import java.util.Objects;
import net.sourceforge.argparse4j.inf.Namespace;
import net.sourceforge.argparse4j.inf.Subparser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.whispersystems.textsecuregcm.WhisperServerConfiguration;
import org.whispersystems.textsecuregcm.backup.BackupManager;
import reactor.core.scheduler.Schedulers;
import java.time.Clock;
import java.time.Duration;
import java.time.Instant;
import java.util.Objects;
import static org.whispersystems.textsecuregcm.metrics.MetricsUtil.name;
public class BackupMetricsCommand extends AbstractCommandWithDependencies {
@@ -67,17 +66,33 @@ public class BackupMetricsCommand extends AbstractCommandWithDependencies {
"timeSinceLastRefresh"));
final DistributionSummary timeSinceLastMediaRefresh = Metrics.summary(name(getClass(),
"timeSinceLastMediaRefresh"));
final DistributionSummary numMediaObjects = Metrics.summary(name(getClass(),
"numObjects"));
final DistributionSummary mediaBytesUsed = Metrics.summary(name(getClass(),
"bytesUsed"));
final Counter backups = Metrics.counter(name(getClass(), "backups"));
final BackupManager backupManager = commandDependencies.backupManager();
final Long backupsExpired = backupManager
final Long backupsCrawled = backupManager
.listBackupAttributes(segments)
.doOnNext(backupMetadata -> {
timeSinceLastRefresh.record(timeSince(backupMetadata.lastRefresh()).getSeconds());
timeSinceLastMediaRefresh.record(timeSince(backupMetadata.lastMediaRefresh()).getSeconds());
backups.increment();
final boolean hasMediaTier = Duration
.between(backupMetadata.lastMediaRefresh(), backupMetadata.lastRefresh())
.abs()
.compareTo(Duration.ofDays(1)) < 1;
if (hasMediaTier) {
numMediaObjects.record(backupMetadata.numObjects());
mediaBytesUsed.record(backupMetadata.bytesUsed());
}
})
.count()
.block();
logger.info("Crawled {} backups", backupsExpired);
logger.info("Crawled {} backups", backupsCrawled);
}
private Duration timeSince(Instant t) {