2016-10-11 1 views
0

J'essaie de créer un rapporteur personnalisé pour DropWizard Metrics, mais je ne trouve aucune ressource ou aucun exemple montrant comment en créer un en étendant le ScheduledReporter. Je pourrais étendre cette classe en suivant les reporters existants (CSV, SLF4J, etc), mais où puis-je l'enregistrer?DropWizard Custom Reporter

Voici un extrait du journaliste personnalisé Je suis en train d'enregistrer:

public class DbReporter extends ScheduledReporter { 
    private final Connection connection; 
    private final Clock clock; 

    public static DbReporter.Builder forRegistry(MetricRegistry registry) { 
     return new DbReporter.Builder(registry); 
    } 

    private DbReporter(MetricRegistry registry, Connection connection, Clock clock, MetricFilter filter, TimeUnit rateUnit, TimeUnit durationUnit) { 
     super(registry, "db-reporter", filter, rateUnit, durationUnit); 
     this.connection = connection; 
     this.clock = clock; 
    } 

    //... 

    public static class Builder { 
     private final MetricRegistry registry; 
     private Connection connection; 
     private TimeUnit rateUnit; 
     private TimeUnit durationUnit; 
     private MetricFilter filter; 
     private Clock clock; 

     private Builder(MetricRegistry registry) { 
      this.registry = registry; 
      this.connection = null; 
      this.rateUnit = TimeUnit.SECONDS; 
      this.durationUnit = TimeUnit.MILLISECONDS; 
      this.filter = MetricFilter.ALL; 
      this.clock = Clock.defaultClock(); 
     } 

     public DbReporter.Builder outputTo(Connection connection) { 
      this.connection = connection; 
      return this; 
     } 

     public DbReporter.Builder convertRatesTo(TimeUnit rateUnit) { 
      this.rateUnit = rateUnit; 
      return this; 
     } 

     public DbReporter.Builder convertDurationsTo(TimeUnit durationUnit) { 
      this.durationUnit = durationUnit; 
      return this; 
     } 

     public DbReporter.Builder filter(MetricFilter filter) { 
      this.filter = filter; 
      return this; 
     } 

     public DbReporter build() { 
      return new DbReporter(this.registry, this.connection, this.clock, this.filter, this.rateUnit, this.durationUnit); 
     } 
    } 
} 

Et, est-ce la bonne façon de créer un Reporter personnalisé ou est-il une autre façon?

Merci à advance.-

+0

Oui, c'est la bonne approche. Vous les enregistrez de la même manière que vous enregistrez les autres (voir les documents sur les métriques) – pandaadb

+0

@pandaadb Oui, mais je n'ai rien enregistré. –

Répondre

0

Oui, vous pouvez les mettre en œuvre la même manière. En ce qui concerne l'enregistrement, cela se fait généralement dans votre application principale après que les métriques ont été instanciées par DW.

Par exemple, dans votre méthode d'exécution:

@Override 
    public void run(final Configuration configuration, 
        final Environment environment) { 
     log.info(String.format("Starting %s server with version: %s", getName(), configuration.getVersion())); 

     CsvReporter.forRegistry(environment.metrics()).build(new File("path/to/csv")); 
    } 

espoir qui aide,

Artur

+0

Vous n'avez pas compris ma question. Voir la question mise à jour. –

+0

Encore une fois: Oui, c'est la bonne façon de créer votre propre journaliste personnalisé, et voir ma réponse avec où et comment vous l'enregistrer. Que voulez-vous savoir d'autre, parce que ce sont les seules questions que je peux voir dans votre message ... – pandaadb