我正在为 ElasticSearch 的 TransportClient 编写一个子类。(好吧,那是无关紧要的信息)
我想计算各种功能的频率和时间统计。所以我写了以下客户端(只包括一些部分以避免复杂化)
import com.yammer.metrics.Metrics;
...
public class MikeESClient extends TransportClient
{
...
private Timer indexTimer, ... ,searchTimer;
private TimerContext indexTimerContext,..., searchTimerContext;
//
//Meters
private Meter indexMeter,getMeter,updateMeter, deleteMeter, searchMeter;
//
private void initial()
{
//intialize the Timers
indexTimer= Metrics.newTimer(MikeESClient.class, "index Response", TimeUnit.MILLISECONDS, TimeUnit.SECONDS);.
.
.
.
//Timer Initialization Done
//Meters
indexMeter = Metrics.newMeter(metricName("Index"), "indexing", TimeUnit.SECONDS);
.
.
.
}
.
.
.
@Override
public ActionFuture<IndexResponse> index(IndexRequest request)
{
indexTimerContext = indexTimer.time(); //start timer
indexMeter.mark();//meter
ActionFuture<IndexResponse>temp=super.index(request);
indexTimerContext.stop(); //stop timer
return temp;
}
.
.
.
similar functions
.
.
.
@Override
public void search(SearchRequest request, ActionListener<SearchResponse> listener)
{
searchTimerContext = indexTimer.time(); //start timer
searchMeter.mark();//meter
super.search(request,listener);
searchTimerContext.stop(); //stop timer
}
}
我在各种函数中一次又一次地编写了 Timer 和 Meter 的类似代码 - index()、get()、update()、delete() 和 search()。我开始知道使用注释可以完成同样的事情。但不幸的是,我不知道 java 中的注释。好吧,我很想知道如何在 java 中使用它们。这将有助于大幅减少我的代码。
我现在只是想使用@Timer、@Meter 和默认设置。我想为指标使用自定义名称。