Skip to content

Commit

Permalink
[HWKMETRICS-643] Add a flag to explicitly enable/disable the job to d…
Browse files Browse the repository at this point in the history
…elete expired metrics. The job is enabled by default.
  • Loading branch information
Stefan Negrea committed Apr 10, 2017
1 parent 9523163 commit c9cfc5c
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.INGEST_MAX_RETRIES;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.INGEST_MAX_RETRY_DELAY;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.METRICS_EXPIRATION_DELAY;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.METRICS_EXPIRATION_JOB_ENABLED;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.METRICS_EXPIRATION_JOB_FREQUENCY;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.METRICS_REPORTING_ENABLED;
import static org.hawkular.metrics.api.jaxrs.config.ConfigurationKey.METRICS_REPORTING_HOSTNAME;
Expand Down Expand Up @@ -296,6 +297,11 @@ public enum State {
@ConfigurationProperty(METRICS_EXPIRATION_JOB_FREQUENCY)
private String metricsExpirationJobFrequency;

@Inject
@Configurable
@ConfigurationProperty(METRICS_EXPIRATION_JOB_ENABLED)
private String metricsExpirationJobEnabled;

@Inject
DriverUsageMetricsManager driverUsageMetricsManager;

Expand Down Expand Up @@ -680,12 +686,21 @@ private int parseIntConfig(String value, ConfigurationKey configKey) {
}
}

private boolean parseBooleanConfig(String value, ConfigurationKey configKey) {
try {
return Boolean.parseBoolean(value);
} catch (NumberFormatException e) {
return Boolean.parseBoolean(configKey.defaultValue());
}
}

private void initJobsService() {

RxSession rxSession = new RxSessionImpl(session);
jobsService = new JobsServiceImpl(
parseIntConfig(metricExpirationDelay, ConfigurationKey.METRICS_EXPIRATION_DELAY),
parseIntConfig(metricsExpirationJobFrequency, ConfigurationKey.METRICS_EXPIRATION_JOB_FREQUENCY));
parseIntConfig(metricExpirationDelay, METRICS_EXPIRATION_DELAY),
parseIntConfig(metricsExpirationJobFrequency, METRICS_EXPIRATION_JOB_FREQUENCY),
parseBooleanConfig(metricsExpirationJobEnabled, METRICS_EXPIRATION_JOB_ENABLED));
jobsService.setMetricsService(metricsService);
jobsService.setConfigurationService(configurationService);
jobsService.setSession(rxSession);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,8 +69,10 @@ public enum ConfigurationKey {

//Metric expiration job configuration
METRICS_EXPIRATION_DELAY("hawkular.metrics.expiration.delay", "1", "METRICS_EXPIRATION_DELAY", false),
METRICS_EXPIRATION_JOB_FREQUENCY("hawkular.metrics.expiration.job.frequency", "7",
METRICS_EXPIRATION_JOB_FREQUENCY("hawkular.metrics.jobs.expiration.frequency", "7",
"METRICS_EXPIRATION_JOB_FREQUENCY", false),
METRICS_EXPIRATION_JOB_ENABLED("hawkular.metrics.jobs.expiration.enabled", "true",
"METRICS_EXPIRATION_JOB_ENABLED", false),

// Request logging properties
// Useful for debugging
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,20 +57,23 @@ public class JobsServiceImpl implements JobsService, JobsServiceImplMBean {
private MetricsService metricsService;

private DeleteTenant deleteTenant;
private int metricExpirationJobFrequencyInDays;
private int metricExpirationDelay;

private DeleteExpiredMetrics deleteExpiredMetrics;
private int metricExpirationJobFrequencyInDays;
private int metricExpirationDelay;
private boolean metricExpirationJobEnabled;

private ConfigurationService configurationService;

public JobsServiceImpl() {
this(1, 7);
this(1, 7, true);
}

public JobsServiceImpl(int metricExpirationDelay, int metricExpirationJobFrequencyInDays) {
public JobsServiceImpl(int metricExpirationDelay, int metricExpirationJobFrequencyInDays,
boolean metricExpirationJobEnabled) {
this.metricExpirationJobFrequencyInDays = metricExpirationJobFrequencyInDays;
this.metricExpirationDelay = metricExpirationDelay;
this.metricExpirationJobEnabled = metricExpirationJobEnabled;
}

public void setMetricsService(MetricsService metricsService) {
Expand Down Expand Up @@ -179,7 +182,8 @@ private void maybeScheduleMetricExpirationJob(List<JobDetails> backgroundJobs) {
}

if (configuredJobFrequency == null || configuredJobFrequency != this.metricExpirationJobFrequencyInDays
|| this.metricExpirationJobFrequencyInDays <= 0 || configuredJobFrequency <= 0) {
|| this.metricExpirationJobFrequencyInDays <= 0 || configuredJobFrequency <= 0 ||
!this.metricExpirationJobEnabled) {
scheduler.unscheduleJob(config.get(jobIdConfigKey)).await();
configurationService.delete(configId, jobIdConfigKey).toBlocking();
config.delete(jobIdConfigKey);
Expand All @@ -188,7 +192,8 @@ private void maybeScheduleMetricExpirationJob(List<JobDetails> backgroundJobs) {
}
}

if (config.get(jobIdConfigKey) == null && this.metricExpirationJobFrequencyInDays > 0) {
if (config.get(jobIdConfigKey) == null && this.metricExpirationJobFrequencyInDays > 0
&& this.metricExpirationJobEnabled) {
logger.info("Preparing to create and schedule " + DeleteExpiredMetrics.JOB_NAME + " job");

//Get start of next day
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertTrue;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;

import java.lang.reflect.Method;
import java.util.List;
Expand Down Expand Up @@ -102,27 +101,16 @@ public void initTest(Method method) {
jobScheduler = new TestScheduler(rxSession);
jobScheduler.truncateTables(getKeyspace());

if (method.getName().equals("testScheduleDeleteExpiredMetricsJobDisabled")) {
jobsService = new JobsServiceImpl(2, -1);
} else {
jobsService = new JobsServiceImpl(2, 7);
}
jobsService = new JobsServiceImpl(2, 7, true);
jobsService.setSession(rxSession);
jobsService.setScheduler(jobScheduler);
jobsService.setMetricsService(metricsService);
jobsService.setConfigurationService(configurationService);

if (method.getName().equals("testScheduleDeleteExpiredMetricsJobDisabled")) {
assertEquals(jobsService.start().stream()
.filter(details -> details.getJobName().equals(DeleteExpiredMetrics.JOB_NAME))
.count(), 0);
deleteExpiredMetricsJob = null;
} else {
deleteExpiredMetricsJob = jobsService.start().stream()
.filter(details -> details.getJobName().equals(DeleteExpiredMetrics.JOB_NAME))
.findFirst().get();
assertNotNull(deleteExpiredMetricsJob);
}
deleteExpiredMetricsJob = jobsService.start().stream()
.filter(details -> details.getJobName().equals(DeleteExpiredMetrics.JOB_NAME))
.findFirst().get();
assertNotNull(deleteExpiredMetricsJob);
}

@AfterMethod(alwaysRun = true)
Expand Down Expand Up @@ -254,7 +242,20 @@ public void testScheduleDeleteExpiredMetricsJob() throws Exception {

@Test
public void testScheduleDeleteExpiredMetricsJobDisabled() throws Exception {
assertNull(this.deleteExpiredMetricsJob);
int[] jobFrequency = { -1, 0, 1, -100 };
boolean[] jobEnabled = { true, true, false, false };

for (int i = 0; i < jobFrequency.length; i++) {
jobsService = new JobsServiceImpl(2, jobFrequency[i], jobEnabled[i]);
jobsService.setSession(rxSession);
jobsService.setScheduler(jobScheduler);
jobsService.setMetricsService(metricsService);
jobsService.setConfigurationService(configurationService);

assertEquals(jobsService.start().stream()
.filter(details -> details.getJobName().equals(DeleteExpiredMetrics.JOB_NAME))
.count(), 0);
}
}

private void waitForScheduledDeleteExpiredMetricsJob() throws InterruptedException {
Expand Down

0 comments on commit c9cfc5c

Please sign in to comment.