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.annotation.Nullable;
import java.io.File;

import static java.util.Objects.requireNonNull;

A factory for configuring and building CsvReporter instances.

Configuration Parameters:
Name Default Description
file No default. You must define a directory. 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.
See BaseFormattedReporterFactory for more options.
See BaseReporterFactory for more options.
/** * 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 { @Nullable private File file; @JsonProperty @Nullable public File getFile() { return file; } @JsonProperty public void setFile(@Nullable File file) { this.file = file; } @Override public ScheduledReporter build(MetricRegistry registry) { final File file = requireNonNull(this.file, "File is not set"); 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()); } }