dropwizard-jobs/dropwizard-jobs

View on GitHub
dropwizard-jobs-core/src/main/java/io/dropwizard/jobs/Job.java

Summary

Maintainability
A
0 mins
Test Coverage
package io.dropwizard.jobs;

import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.SharedMetricRegistries;
import com.codahale.metrics.Timer;
import com.codahale.metrics.Timer.Context;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import static com.codahale.metrics.MetricRegistry.name;

public abstract class Job implements org.quartz.Job {

    public static final String DROPWIZARD_JOBS_KEY = "dropwizard-jobs";
    private final String groupName;

    private final Timer timer;
    private final MetricRegistry metricRegistry;

    public Job() {
        // get the metrics registry which was shared during bundle instantiation
        this(SharedMetricRegistries.getOrCreate(DROPWIZARD_JOBS_KEY), null);
    }

    public Job(String groupName) {
        this(SharedMetricRegistries.getOrCreate(DROPWIZARD_JOBS_KEY), groupName);
    }

    public Job(MetricRegistry metricRegistry) {
        this(metricRegistry, null);
    }

    public Job(MetricRegistry metricRegistry, String groupName) {
        this.timer = metricRegistry.timer(name(getClass()));
        this.metricRegistry = metricRegistry;
        this.groupName = groupName;
    }

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        try (Context ignored = timer.time()) {
            doJob(context);
        }
    }

    public abstract void doJob(JobExecutionContext context) throws JobExecutionException;

    protected MetricRegistry getMetricRegistry() {
        return metricRegistry;
    }

    public String getGroupName() {
        return groupName;
    }
}