Browse Source

优化效率

chenweida 6 years ago
parent
commit
197a1c4ec2

+ 3 - 4
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/HibernateFilter.java

@ -1,10 +1,9 @@
package com.yihu.admin.client.advice;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.SQLTimeEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import org.hibernate.EmptyInterceptor;
import org.hibernate.Transaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -29,7 +28,7 @@ public class HibernateFilter extends EmptyInterceptor {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    @Value("${spring.application.name}")
@ -55,7 +54,7 @@ public class HibernateFilter extends EmptyInterceptor {
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setSuccess(1);
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
        }
        return sql;
    }

+ 4 - 5
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/HttpAdvice.java

@ -3,8 +3,8 @@ package com.yihu.admin.client.advice;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.util.NetworkUtil;
import com.yihu.admin.client.util.SpringUtil;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.HttpEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import net.sf.json.JSONObject;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
@ -21,7 +21,6 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.mvc.condition.PatternsRequestCondition;
import org.springframework.web.servlet.mvc.condition.RequestMethodsRequestCondition;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
@ -41,7 +40,7 @@ public class HttpAdvice {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    @Value("${spring.application.name}")
@ -154,7 +153,7 @@ public class HttpAdvice {
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setSuccess(1);
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
            logger.debug("event:" + event.toString());
            return returnValue;
        } catch (Exception e) {
@ -165,7 +164,7 @@ public class HttpAdvice {
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setFail(1);
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
            logger.debug("event:" + event.toString());
            throw new Exception(e);

+ 0 - 24
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/RequestToMethodItem.java

@ -1,29 +1,5 @@
package com.yihu.admin.client.advice;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.util.NetworkUtil;
import com.yihu.admin.client.websocket.event.HttpEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import net.sf.json.JSONObject;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
/**
 * Created by chenweida on 2018/5/23 0023.1

+ 4 - 10
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/SQLTimeAdvice.java

@ -1,8 +1,8 @@
package com.yihu.admin.client.advice;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.SQLTimeEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
@ -10,17 +10,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.trace.Trace;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.UUID;
/**
 * Created by chenweida on 2018/5/21 0021.1
@ -33,7 +27,7 @@ public class SQLTimeAdvice {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
@ -76,7 +70,7 @@ public class SQLTimeAdvice {
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setSuccess(1);
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
            logger.debug("event:" + event.toString());
            return returnValue;
        } catch (Exception e) {
@ -88,7 +82,7 @@ public class SQLTimeAdvice {
            event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
            event.setTraceId(tracer.getCurrentSpan().traceIdString());
            event.setFail(1);
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
            throw new Exception(e);
        }

+ 3 - 3
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/ZuulPostFilter.java

@ -4,8 +4,8 @@ import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.util.NetworkUtil;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.HttpEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -26,7 +26,7 @@ public class ZuulPostFilter extends ZuulFilter {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    @Value("${spring.application.name}")
@ -82,7 +82,7 @@ public class ZuulPostFilter extends ZuulFilter {
            event.setUri(HttpAdvice.matchURI(request));
            event.setIp(ip);
            event.setMethod(request.getMethod());
            simpleEventSender.send(event);
            eventBuffer.addEvent(event);
        } catch (Exception e) {
        }

+ 3 - 4
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/ZuulPreFilter.java

@ -4,8 +4,8 @@ import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.util.NetworkUtil;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.HttpEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import net.sf.json.JSONObject;
import okhttp3.*;
import okhttp3.internal.http.HttpMethod;
@ -21,7 +21,6 @@ import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.StreamUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.List;
@ -37,7 +36,7 @@ public class ZuulPreFilter extends ZuulFilter {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    @Value("${spring.application.name}")
@ -133,7 +132,7 @@ public class ZuulPreFilter extends ZuulFilter {
                event.setUri(HttpAdvice.matchURI(request));
                event.setIp(ip);
                event.setMethod(request.getMethod());
                simpleEventSender.send(event);
                eventBuffer.addEvent(event);
            }catch (Exception e){
            }

+ 3 - 4
admin/admin-client-starter/src/main/java/com/yihu/admin/client/advice/ZuulRouteFilter.java

@ -4,8 +4,8 @@ import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.util.NetworkUtil;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.HttpEvent;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import net.sf.json.JSONObject;
import okhttp3.*;
import okhttp3.internal.http.HttpMethod;
@ -16,7 +16,6 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelper;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.StreamUtils;
@ -40,7 +39,7 @@ public class ZuulRouteFilter extends ZuulFilter {
    @Autowired
    private Tracer tracer;
    @Autowired
    private SimpleEventSender simpleEventSender;
    private EventBuffer eventBuffer;
    @Autowired
    private AdminClientProperties adminClientProperties;
    @Value("${spring.application.name}")
@ -143,7 +142,7 @@ public class ZuulRouteFilter extends ZuulFilter {
                event.setUri(HttpAdvice.matchURI(request));
                event.setIp(ip);
                event.setMethod(request.getMethod());
                simpleEventSender.send(event);
                eventBuffer.addEvent(event);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error(e.getMessage());

+ 6 - 2
admin/admin-client-starter/src/main/java/com/yihu/admin/client/config/WebsocketConfig.java

@ -3,6 +3,7 @@ package com.yihu.admin.client.config;
import com.yihu.admin.client.advice.HibernateFilter;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.websocket.SocketClient;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.sender.SimpleEventSender;
import org.hibernate.EmptyInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
@ -33,10 +34,13 @@ import java.util.Map;
public class WebsocketConfig {
    @Autowired
    SocketClient socketClient;
    @Autowired
    AdminClientProperties adminClientProperties;
    @Bean
    public SimpleEventSender simpleEventSender() {
        return new SimpleEventSender(socketClient);
    public EventBuffer eventBuffer() {
        return new EventBuffer(adminClientProperties);
    }
}

+ 10 - 0
admin/admin-client-starter/src/main/java/com/yihu/admin/client/properties/AdminClientProperties.java

@ -24,6 +24,8 @@ public class AdminClientProperties {
    private Boolean zuulRoute;//port
    @Value("${yihu.admin.client.advice.http:true}")
    private Boolean http;//port
    @Value("${yihu.admin.client.buffer.size:100000}")
    private Integer bufferSize;//port
    public String getIp() {
        return ip;
@ -88,4 +90,12 @@ public class AdminClientProperties {
    public void setZuulRoute(Boolean zuulRoute) {
        this.zuulRoute = zuulRoute;
    }
    public Integer getBufferSize() {
        return bufferSize;
    }
    public void setBufferSize(Integer bufferSize) {
        this.bufferSize = bufferSize;
    }
}

+ 29 - 0
admin/admin-client-starter/src/main/java/com/yihu/admin/client/websocket/buffer/EventBuffer.java

@ -0,0 +1,29 @@
package com.yihu.admin.client.websocket.buffer;
import ch.qos.logback.classic.spi.LoggingEvent;
import com.yihu.admin.client.properties.AdminClientProperties;
import com.yihu.admin.client.websocket.event.IEvent;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
 * Created by chenweida on 2018/2/24.
 */
public class EventBuffer {
    //缓冲队列
    BlockingQueue queue = null;
    public EventBuffer(AdminClientProperties adminClientProperties) {
        queue = new ArrayBlockingQueue(adminClientProperties.getBufferSize());
    }
    public BlockingQueue getBuffer() {
        return queue;
    }
    public void addEvent(IEvent event) {
        queue.add(event);
    }
}

+ 40 - 6
admin/admin-client-starter/src/main/java/com/yihu/admin/client/websocket/sender/SimpleEventSender.java

@ -1,25 +1,33 @@
package com.yihu.admin.client.websocket.sender;
import com.yihu.admin.client.websocket.SocketClient;
import com.yihu.admin.client.websocket.buffer.EventBuffer;
import com.yihu.admin.client.websocket.event.IEvent;
import net.sf.json.JSONObject;
import org.java_websocket.client.WebSocketClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * Created by chenweida on 2018/5/23 0023.1
 */
@Component
public class SimpleEventSender implements EventSender {
    private Logger logger = LoggerFactory.getLogger(SimpleEventSender.class);
    public SimpleEventSender( SocketClient socketClient) {
        this.socketClient = socketClient;
    }
    @Autowired
    private SocketClient socketClient;
    @Override
    @Autowired
    private EventBuffer eventBuffer;
    public Boolean send(IEvent event) {
        try {
            JSONObject jsonObject = new JSONObject();
@ -49,8 +57,34 @@ public class SimpleEventSender implements EventSender {
            socketClient.getCurrentClient().send(jsonObject.toString());
            return true;
        } catch (Exception e) {
            logger.error(e.getMessage());
            return false;
        }
    }
    @Scheduled(cron = "0/10 * * * * ?")
    public void send() {
        try {
            int success = 0;
            int error = 0;
            //如果队列没数据休眠
            if (eventBuffer.getBuffer().size() == 0) {
                return;
            }
            List<IEvent> eventObjectList = new ArrayList<>();
            //获取队列中的全部数据
            eventBuffer.getBuffer().drainTo(eventObjectList);
            for (IEvent event : eventObjectList) {
                if (send(event)) {
                    success++;
                } else {
                    error++;
                }
            }
            logger.info(new StringBuffer("all:" + eventObjectList.size() + ",success:" + success + ",error:" + error).toString());
        } catch (Exception e) {
            logger.error(e.getMessage());
            return;
        }
    }
}