diff --git a/src/main/java/com/alibaba/druid/support/monitor/PushService.java b/src/main/java/com/alibaba/druid/support/monitor/PushService.java
index feee40b21f..429c70f8c1 100644
--- a/src/main/java/com/alibaba/druid/support/monitor/PushService.java
+++ b/src/main/java/com/alibaba/druid/support/monitor/PushService.java
@@ -18,60 +18,191 @@ package com.alibaba.druid.support.monitor;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
import com.alibaba.druid.stat.DruidStatManagerFacade;
import com.alibaba.druid.support.http.stat.WebAppStatManager;
import com.alibaba.druid.support.json.JSONUtils;
import com.alibaba.druid.support.spring.stat.SpringStatManager;
+import com.alibaba.druid.util.DaemonThreadFactory;
+import com.alibaba.druid.util.HttpClientUtils;
+/**
+ *
+ * 将指定的信息 (includeSql,includeWebApp,includeWebUri,includeWebSession,includeSpring)
+ * 定期 (cycleTime)
+ * post到指定的url (serverUrl) ,请求超时时间(pushTimeOut)
+ * 并进行清零 (autoReset)
+ *
+ *
+ * @author sandzhang
+ */
public class PushService {
- private final DruidStatManagerFacade statManagerFacade = DruidStatManagerFacade.getInstance();
+ private final static PushService instance = new PushService();
+ private static final int DEFAULT_CYCLE_TIME = 5 * 60 * 1000;
+ private static final int DEFAULT_PUSH_TIMEOUT = 60 * 1000;
+
+ private final DruidStatManagerFacade statManagerFacade = DruidStatManagerFacade.getInstance();
+ private final WebAppStatManager webAppStatManager = WebAppStatManager.getInstance();
+ private final SpringStatManager springStatManager = SpringStatManager.getInstance();
private String serverUrl;
- private boolean includeSql = true;
+ private boolean includeSql = true;
+ private boolean includeWebApp = true;
+ private boolean includeWebUri = true;
+ private boolean includeWebSession = true;
+ private boolean includeSpring = true;
- private boolean includeWebApp = true;
- private boolean includeWebUri = true;
- private boolean includeWebSession = true;
- private boolean includeSpring = true;
+ private boolean autoReset = true;
- public void collect() {
+ private long cycleTime = DEFAULT_CYCLE_TIME;
+ private long pushTimeOut = DEFAULT_PUSH_TIMEOUT;
+
+ private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1,
+ new DaemonThreadFactory(
+ "DruidPullService-Scheduler"));
+
+ private ScheduledFuture> executeFuture = null;
+
+ private PushService(){
+ }
+
+ public static PushService getInstance() {
+ return instance;
+ }
+
+ public void start() {
+ executeFuture = scheduler.scheduleAtFixedRate(new Runnable() {
+
+ @Override
+ public void run() {
+ execute();
+ }
+
+ }, 0, cycleTime, TimeUnit.MILLISECONDS);
+ }
+
+ public void stop() {
+ if (executeFuture != null) {
+ if (executeFuture.cancel(true)) {
+ executeFuture = null;
+ }
+ }
+ }
+
+ protected void execute() {
+ Map data = collectAndReset();
+ String json = JSONUtils.toJSONString(data);
+ push("data=" + json);
+ }
+
+ /**
+ * @return
+ */
+ protected Map collectAndReset() {
Map data = new HashMap();
if (includeSql) {
List