2016-08-29 1 views
0

Il est possible de compter les données de Codahale pour les dernières 24 heures (aujourd'hui).Compteur de mesures de Codahale réinitialisé et compte tous les jours

pour générer un rapport comme ci-dessous:

demande Count:

lastSec lastMin lastHour today 
======================================= 
1   5   22  45 

Nombre de réponses:

lastSec lastMin lastHour today 
======================================= 
1   5   22  45 

Il est Meter methods pour obtenir la dernière seconde, minute, taux quinze. mais comment obtenir pour la dernière heure et compter aujourd'hui?

ci-dessous essayé:

public class ReportMetrics { 

    static final MetricRegistry metrics = new MetricRegistry(); 
    static final Counter aReqCount = ReportMetrics.metrics.counter(name(AProcessor.class, "a-req-count")); 
    static final Counter aResCount = ReportMetrics.metrics.counter(name(AProcessor.class, "a-res-count")); 

    private static final AProcessor aProcessor = new AProcessor(); 

    public static void main(String[] args) { 
     startReport(); 

     for(int i=0; i<=5; i++){ 
      //add 
      aProcessor.addJob(); 
      wait5Seconds();   

      //take 
      arProcessor.takeJob(); 
      wait5Seconds();   
     } 

    } 

    static void startReport() { 
      ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics) 
       .convertRatesTo(TimeUnit.SECONDS) 
       .convertDurationsTo(TimeUnit.MILLISECONDS) 
       .build(); 
      reporter.start(1, TimeUnit.SECONDS); 
     } 

    static void wait5Seconds() { 
      try { 
       Thread.sleep(5*1000); 
      } 
      catch(InterruptedException e) {} 
     } 

    public long requestCount(){ 
     ReportMetrics.metrics.aReqCount.getCount(); 
    } 

    public long responseCount(){ 
     ReportMetrics.metrics.aResCount.getCount(); 
    } 

    public long pendingRequestCount(){ 
     return requestCount() - responseCount(); 
    } 

} 

class AProcessor { 

    public void addJob(){ 
     ReportMetrics.metrics.aReqCount.inc(); 
    } 

    public Object takeJob(){ 
     ReportMetrics.metrics.aResCount.inc(); 
    } 
} 

Répondre

1

Pour résumer ou calculer le nombre (total) par intervalle arbitraire pour les compteurs rapportés avec counter.inc:

hitcount(perSecond(AProcessor.a-req-count.count), '1hour') 

hitcount(perSecond(AProcessor.a-res-count.count), '1day') 

Autant que je sache, il fait toute la magie noire à l'intérieur . Y compris, mais non limité à summarize(scaleToSeconds(nonNegativeDerivative(your.count),1), '1day') et il devrait également être mise à l'échelle en fonction des périodes de rétention du carbone (un ou plusieurs) qui tombent dans l'intervalle d'agrégation choisi.

+0

Merci pour la réponse. – Rembo