package com.dianping.pigeon.remoting.common.monitor.trace;
import com.fasterxml.jackson.annotation.JsonIgnore;
/**
* @author qi.yin
* 2016/11/17 下午1:22.
*/
public class ApplicationTraceRepository {
private String appName;
private long startMillis;
private long endMillis;
private static transient final ThreadLocal<TraceKey> traceKeys = new ThreadLocal<TraceKey>();
private InvokerTraceRepository invokerTraceData = new InvokerTraceRepository();
private ProviderTraceRepository providerTraceData = new ProviderTraceRepository();
public ApplicationTraceRepository() {
}
public ApplicationTraceRepository(String appName) {
this.appName = appName;
this.startMillis = System.currentTimeMillis();
}
public void start(ProviderMonitorData monitorData) {
providerTraceData.start(monitorData);
}
public void trace(ProviderMonitorData monitorData) {
traceKeys.set(monitorData.getDstKey());
}
public void complete(ProviderMonitorData monitorData) {
traceKeys.remove();
providerTraceData.complete(monitorData);
}
public void addData(ProviderMonitorData monitorData) {
providerTraceData.addData(monitorData);
}
public void start(InvokerMonitorData monitorData) {
invokerTraceData.start(monitorData);
}
public void complete(InvokerMonitorData monitorData) {
invokerTraceData.complete(monitorData);
}
public void addData(InvokerMonitorData monitorData) {
invokerTraceData.addData(monitorData);
}
public void degrade(InvokerMonitorData monitorData) {
invokerTraceData.degrade(monitorData);
}
public void reset() {
invokerTraceData.reset();
providerTraceData.reset();
startMillis = System.currentTimeMillis();
endMillis = startMillis;
}
public ApplicationTraceRepository copy() {
ApplicationTraceRepository traceData = new ApplicationTraceRepository(appName);
traceData.setStartMillis(getStartMillis());
traceData.setEndMillis(System.currentTimeMillis());
traceData.setInvokerTraceData((InvokerTraceRepository) invokerTraceData.copy());
traceData.setProviderTraceData((ProviderTraceRepository) providerTraceData.copy());
return traceData;
}
public String getAppName() {
return appName;
}
public void setAppName(String appName) {
this.appName = appName;
}
public long getStartMillis() {
return startMillis;
}
public void setStartMillis(long startMillis) {
this.startMillis = startMillis;
}
public long getEndMillis() {
return endMillis;
}
public void setEndMillis(long endMillis) {
this.endMillis = endMillis;
}
public InvokerTraceRepository getInvokerTraceData() {
return invokerTraceData;
}
public ProviderTraceRepository getProviderTraceData() {
return providerTraceData;
}
public void setInvokerTraceData(InvokerTraceRepository invokerTraceData) {
this.invokerTraceData = invokerTraceData;
}
public void setProviderTraceData(ProviderTraceRepository providerTraceData) {
this.providerTraceData = providerTraceData;
}
@JsonIgnore
public SourceKey getSourceKey() {
SourceKey sourceKey = (SourceKey) traceKeys.get();
return sourceKey;
}
}