All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xiaomi.infra.galaxy.sds.client.metrics.RequestMetrics Maven / Gradle / Ivy

There is a newer version: 1.3.6
Show newest version
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