![JAR search and dependency download from the Maven repository](/logo.png)
com.xiaomi.infra.galaxy.sds.client.metrics.RequestMetrics Maven / Gradle / Ivy
package com.xiaomi.infra.galaxy.sds.client.metrics;
import com.google.common.base.Preconditions;
import com.xiaomi.infra.galaxy.sds.thrift.ClientMetricType;
import com.xiaomi.infra.galaxy.sds.thrift.ClientMetrics;
import com.xiaomi.infra.galaxy.sds.thrift.LatencyMetricType;
import com.xiaomi.infra.galaxy.sds.thrift.MetricData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
public class RequestMetrics {
private static final Logger LOG = LoggerFactory.getLogger(RequestMetrics.class);
private String queryString;
private Map latencyMetrics
= new HashMap();
public void setRequestTypeName(String queryString) {
this.queryString = queryString;
}
public void startEvent(LatencyMetricType metricType) {
TimingInfo timingInfo = new TimingInfo(System.currentTimeMillis(), null);
latencyMetrics.put(metricType, timingInfo);
}
public void endEvent(LatencyMetricType metricType) {
TimingInfo timingInfo = latencyMetrics.get(metricType);
if (timingInfo == null) {
LOG.warn("Try to end event which wasn't started.");
return;
}
timingInfo.setEndTimeMilli(System.currentTimeMillis());
}
public ClientMetrics toClientMetrics() {
ClientMetrics clientMetrics = new ClientMetrics();
for (Map.Entry entry
: latencyMetrics.entrySet()) {
TimingInfo timingInfo = entry.getValue();
Preconditions.checkNotNull(timingInfo.getStartTimeMilli());
Preconditions.checkNotNull(timingInfo.getEndTimeMilli());
String metricName = queryString + "." + entry.getKey().toString();
MetricData metricData = new MetricData()
.setClientMetricType(ClientMetricType.Letency)
.setMetricName(metricName)
.setValue(timingInfo.getEndTimeMilli() - timingInfo.getStartTimeMilli())
.setTimeStamp(timingInfo.getEndTimeMilli() / 1000);
clientMetrics.addToMetricDataList(metricData);
}
return clientMetrics;
}
private class TimingInfo {
private Long startTimeMilli;
private Long endTimeMilli;
public TimingInfo(Long startTimeMilli, Long endTimeMilli) {
this.startTimeMilli = startTimeMilli;
this.endTimeMilli = endTimeMilli;
}
public Long getStartTimeMilli() {
return startTimeMilli;
}
public void setStartTimeMilli(Long startTimeMilli) {
this.startTimeMilli = startTimeMilli;
}
public Long getEndTimeMilli() {
return endTimeMilli;
}
public void setEndTimeMilli(Long endTimeMilli) {
this.endTimeMilli = endTimeMilli;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy