|  | @ -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;
 | 
												
													
														
															|  |     }
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | }
 |  | }
 |