package io.dropwizard.metrics; import com.codahale.metrics.CsvReporter; import com.codahale.metrics.MetricRegistry; import com.codahale.metrics.ScheduledReporter; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; import javax.validation.constraints.NotNull; import java.io.File; /** * A factory for configuring and building {@link CsvReporter} instances. * <p/> * <b>Configuration Parameters:</b> * <table> * <tr> * <td>Name</td> * <td>Default</td> * <td>Description</td> * </tr> * <tr> * <td>file</td> * <td>No default. You must define a directory.</td> * <td>The directory where the csv metrics will be written. If the * directory does not exist on startup, an attempt will be made to * create it and any parent directories as necessary. If this * operation fails dropwizard will fail on startup, but it may * have succeeded in creating some of the necessary parent * directories.</td> * </tr> * <tr> * <td colspan="3">See {@link BaseFormattedReporterFactory} for more options.</td> * </tr> * <tr> * <td colspan="3">See {@link BaseReporterFactory} for more options.</td> * </tr> * </table> */ @JsonTypeName("csv") public class CsvReporterFactory extends BaseFormattedReporterFactory { @NotNull private File file; @JsonProperty public File getFile() { return file; } @JsonProperty public void setFile(File file) { this.file = file; } @Override public ScheduledReporter build(MetricRegistry registry) { final boolean creation = file.mkdirs(); if (!creation && !file.exists()) { throw new RuntimeException("Failed to create" + file.getAbsolutePath()); } return CsvReporter.forRegistry(registry) .convertDurationsTo(getDurationUnit()) .convertRatesTo(getRateUnit()) .filter(getFilter()) .formatFor(getLocale()) .build(getFile()); } }