2016-10-11 14 views
0

DropWizardメトリック用のカスタムレポーターを作成しようとしていますが、ScheduledReporterを拡張して作成する方法を示すリソースまたは例は見つかりません。私は既存の記者(CSV、SLF4Jなど)に従うことでこのクラスを拡張することができますが、どこに登録しますか?DropWizardカスタムレポーター

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); 
     } 
    } 
} 

そして、これは、カスタムReporterを作成するための正しい方法であるか、他の方法がある:ここでは

は私が登録しようとしていますカスタムレポーターの抽出物ですか?

ありがとうございます.-

+0

はいそれは正しいアプローチです。登録したのとまったく同じ方法で登録します(メトリックのドキュメントを参照) – pandaadb

+0

@pandaadbはい、登録はしていません。 –

答えて

0

はい、同じ方法で実装できます。登録に関しては、通常、DWによってメトリックがインスタンス化された後、メインアプリケーションで実行されます。あなたのrunメソッド内たとえば

、:助け

@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")); 
    } 

希望、

アルトゥル

+0

あなたは私の質問を理解できませんでした。更新された質問を参照してください。 –

+0

もう一度:はい、それはあなた自身のカスタムレポーターを作成し、どこにどのようにそれを登録するのかとの私の答えを見る正しい方法です。あなたのポストで見ることができる唯一の質問ですから、他に何を知りたいですか? – pandaadb