|
@ -5,20 +5,25 @@ import com.yihu.admin.client.websocket.event.SQLTimeEvent;
|
|
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
|
|
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
|
|
import org.hibernate.EmptyInterceptor;
|
|
import org.hibernate.EmptyInterceptor;
|
|
import org.hibernate.Transaction;
|
|
import org.hibernate.Transaction;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.cloud.sleuth.Tracer;
|
|
import org.springframework.cloud.sleuth.Tracer;
|
|
|
|
import org.springframework.core.annotation.Order;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
|
import java.util.Iterator;
|
|
|
|
|
|
/**
|
|
/**
|
|
* Created by chenweida on 2018/5/31 0031.
|
|
* Created by chenweida on 2018/5/31 0031.
|
|
*/
|
|
*/
|
|
@Component
|
|
@Component
|
|
|
|
@Order(0)
|
|
public class HibernateFilter extends EmptyInterceptor {
|
|
public class HibernateFilter extends EmptyInterceptor {
|
|
|
|
|
|
|
|
private Logger logger = LoggerFactory.getLogger(HibernateFilter.class);
|
|
@Autowired
|
|
@Autowired
|
|
private Tracer tracer;
|
|
private Tracer tracer;
|
|
@Autowired
|
|
@Autowired
|
|
@ -28,37 +33,29 @@ public class HibernateFilter extends EmptyInterceptor {
|
|
@Value("${spring.application.name}")
|
|
@Value("${spring.application.name}")
|
|
private String spanrName;
|
|
private String spanrName;
|
|
|
|
|
|
private ThreadLocal<Long> startTimeThreadLocal = new ThreadLocal<>();
|
|
|
|
private ThreadLocal<String> sqlThreadLocal = new ThreadLocal<>();
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String onPrepareStatement(String sql) {
|
|
|
|
sqlThreadLocal.set(sql);
|
|
|
|
return sql;
|
|
|
|
|
|
public HibernateFilter() {
|
|
|
|
logger.info(" init HibernateFilter success!!!");
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void afterTransactionBegin(Transaction tx) {
|
|
|
|
startTimeThreadLocal.set(new Date().getTime());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void afterTransactionCompletion(Transaction tx) {
|
|
|
|
|
|
public String onPrepareStatement(String sql) {
|
|
if (adminClientProperties.getHibernateSql()) {
|
|
if (adminClientProperties.getHibernateSql()) {
|
|
Long endTime = new Date().getTime();
|
|
Long endTime = new Date().getTime();
|
|
SQLTimeEvent event = new SQLTimeEvent();
|
|
SQLTimeEvent event = new SQLTimeEvent();
|
|
//用改变后的参数执行目标方法
|
|
//用改变后的参数执行目标方法
|
|
event.setSql(sqlThreadLocal.get());
|
|
|
|
Long startTime = System.currentTimeMillis();
|
|
|
|
event.setEventStartTime(startTimeThreadLocal.get());
|
|
|
|
|
|
event.setSql(sql);
|
|
|
|
event.setEventStartTime(endTime);
|
|
event.setEventEndTime(endTime);
|
|
event.setEventEndTime(endTime);
|
|
event.setEventName("system_sql_tracer");
|
|
event.setEventName("system_sql_tracer");
|
|
event.setExcuteTime(endTime - startTime);
|
|
|
|
|
|
event.setExcuteTime(-1L);
|
|
event.setSpanName(spanrName);
|
|
event.setSpanName(spanrName);
|
|
event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
|
|
event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
|
|
event.setTraceId(tracer.getCurrentSpan().traceIdString());
|
|
event.setTraceId(tracer.getCurrentSpan().traceIdString());
|
|
event.setSuccess(1);
|
|
event.setSuccess(1);
|
|
simpleEventSender.send(event);
|
|
simpleEventSender.send(event);
|
|
}
|
|
}
|
|
|
|
return sql;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|