All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hubspot.singularity.smtp.SingularityMailRecordCleaner Maven / Gradle / Ivy

package com.hubspot.singularity.smtp;

import java.util.concurrent.TimeUnit;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Optional;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.hubspot.mesos.JavaUtils;
import com.hubspot.singularity.config.SMTPConfiguration;
import com.hubspot.singularity.data.MetadataManager;
import com.hubspot.singularity.scheduler.SingularityLeaderOnlyPoller;

@Singleton
public class SingularityMailRecordCleaner extends SingularityLeaderOnlyPoller {

  private static final Logger LOG = LoggerFactory.getLogger(SingularityMailRecordCleaner.class);

  private final MetadataManager metadataManager;
  private final Optional smtpConfiguration;

  @Inject
  SingularityMailRecordCleaner(Optional smtpConfiguration, MetadataManager metadataManager) {
    super(smtpConfiguration.isPresent() ? Math.max(smtpConfiguration.get().getRateLimitCooldownMillis(), smtpConfiguration.get().getRateLimitPeriodMillis()) : 0, TimeUnit.MILLISECONDS);

    this.metadataManager = metadataManager;
    this.smtpConfiguration = smtpConfiguration;
  }

  @Override
  public void runActionOnPoll() {
    final long start = System.currentTimeMillis();
    final long rateLimitExpiresAfter = Math.max(smtpConfiguration.get().getRateLimitCooldownMillis(), smtpConfiguration.get().getRateLimitPeriodMillis());

    LOG.debug("Cleaning stale mail records");

    int numCleaned = 0;
    int numSeen = 0;

    for (String requestId : metadataManager.getRequestsWithMailRecords()) {
      for (String emailType : metadataManager.getEmailTypesWithMailRecords(requestId)) {
        for (String mailRecordTimestamp : metadataManager.getMailRecords(requestId, emailType)) {
          numSeen++;
          if (start - Long.parseLong(mailRecordTimestamp) > rateLimitExpiresAfter) {
            metadataManager.deleteMailRecord(requestId, emailType, mailRecordTimestamp);
            numCleaned++;
          }
        }
      }
    }

    LOG.debug("Cleaned {} of {} mail record timestamps in {}", numCleaned, numSeen, JavaUtils.duration(start));
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy