소스 검색

add query data

AE86 5 년 전
부모
커밋
14baf5ce77

+ 13 - 9
dbsyncer-biz/src/main/java/org/dbsyncer/biz/MonitorService.java

@@ -22,21 +22,26 @@ public interface MonitorService {
     Map getThreadInfo();
 
     /**
-     * 获取运行的驱动列表
+     * 获取驱动元信息列表
      *
      * @return
      */
     List<MetaVo> getMetaAll();
 
+    /**
+     * 获取驱动默认元信息id
+     * @param params
+     * @return
+     */
+    String getDefaultMetaId(Map<String, String> params);
+
     /**
      * 查询驱动同步数据
      *
      * @return
-     * @param id
-     * @param pageNum
-     * @param pageSize
+     * @param params
      */
-    List<DataVo> queryData(String id, int pageNum, int pageSize);
+    List<DataVo> queryData(Map<String, String> params);
 
     /**
      * 清空驱动同步数据
@@ -49,12 +54,10 @@ public interface MonitorService {
     /**
      * 查询操作日志
      *
-     * @param type
-     * @param pageNum
-     * @param pageSize
+     * @param params
      * @return
      */
-    List<LogVo> queryLog(String type, int pageNum, int pageSize);
+    List<LogVo> queryLog(Map<String, String> params);
 
     /**
      * 清空操作日志
@@ -63,4 +66,5 @@ public interface MonitorService {
      * @return
      */
     String clearLog(String type);
+
 }

+ 40 - 6
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MonitorServiceImpl.java

@@ -1,15 +1,19 @@
 package org.dbsyncer.biz.impl;
 
+import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang.math.NumberUtils;
 import org.dbsyncer.biz.MonitorService;
 import org.dbsyncer.biz.vo.DataVo;
 import org.dbsyncer.biz.vo.LogVo;
 import org.dbsyncer.biz.vo.MetaVo;
+import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.JsonUtil;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.monitor.Monitor;
 import org.dbsyncer.parser.enums.ModelEnum;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Meta;
+import org.dbsyncer.storage.constant.ConfigConstant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -17,9 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -31,6 +33,7 @@ import java.util.stream.Collectors;
 public class MonitorServiceImpl implements MonitorService {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
+
     @Autowired
     private Monitor monitor;
 
@@ -53,8 +56,29 @@ public class MonitorServiceImpl implements MonitorService {
     }
 
     @Override
-    public List<DataVo> queryData(String id, int pageNum, int pageSize) {
-        Assert.hasText(id, "id不能为空.");
+    public String getDefaultMetaId(Map<String, String> params) {
+        String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
+        if (StringUtils.isNotBlank(id)) {
+            return id;
+        }
+        return getDefaultMetaId();
+    }
+
+    @Override
+    public List<DataVo> queryData(Map<String, String> params) {
+        String id = params.get(ConfigConstant.CONFIG_MODEL_ID);
+        // 获取默认驱动元信息
+        if (StringUtils.isBlank(id)) {
+            id = getDefaultMetaId();
+        }
+
+        // 没有驱动
+        if (StringUtils.isBlank(id)) {
+            return Collections.EMPTY_LIST;
+        }
+
+        int pageNum = NumberUtils.toInt(params.get("pageNum"), 1);
+        int pageSize = NumberUtils.toInt(params.get("pageSize"), 20);
         List<DataVo> list = manager.queryData(id, pageNum, pageSize)
                 .stream()
                 .map(m -> convert2Vo(m, DataVo.class))
@@ -69,7 +93,10 @@ public class MonitorServiceImpl implements MonitorService {
     }
 
     @Override
-    public List<LogVo> queryLog(String type, int pageNum, int pageSize) {
+    public List<LogVo> queryLog(Map<String, String> params) {
+        String type = params.get(ConfigConstant.CONFIG_MODEL_TYPE);
+        int pageNum = NumberUtils.toInt(params.get("pageNum"), 1);
+        int pageSize = NumberUtils.toInt(params.get("pageSize"), 20);
         List<LogVo> list = manager.queryLog(type, pageNum, pageSize)
                 .stream()
                 .map(m -> convert2Vo(m, LogVo.class))
@@ -98,4 +125,11 @@ public class MonitorServiceImpl implements MonitorService {
         return (T) JsonUtil.jsonToObj(json, clazz);
     }
 
+    private String getDefaultMetaId() {
+        List<MetaVo> list = getMetaAll();
+        if (!CollectionUtils.isEmpty(list)) {
+            return list.get(0).getId();
+        }
+        return "";
+    }
 }

+ 13 - 5
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/monitor/MonitorController.java

@@ -2,6 +2,7 @@ package org.dbsyncer.web.controller.monitor;
 
 import org.dbsyncer.biz.MonitorService;
 import org.dbsyncer.biz.vo.RestResult;
+import org.dbsyncer.web.controller.BaseController;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,10 +14,11 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
 
 @Controller
 @RequestMapping("/monitor")
-public class MonitorController {
+public class MonitorController extends BaseController {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
@@ -25,15 +27,20 @@ public class MonitorController {
 
     @RequestMapping("")
     public String index(HttpServletRequest request, ModelMap model) {
+        Map<String, String> params = getParams(request);
         model.put("threadInfo", monitorService.getThreadInfo());
+        model.put("meta", monitorService.getMetaAll());
+        model.put("data", monitorService.queryData(params));
+        model.put("metaId", monitorService.getDefaultMetaId(params));
         return "monitor/monitor.html";
     }
 
     @GetMapping("/queryData")
     @ResponseBody
-    public RestResult queryData(@RequestParam(value = "id") String id, @RequestParam(value = "pageNum") int pageNum, @RequestParam(value = "pageSize") int pageSize) {
+    public RestResult queryData(HttpServletRequest request) {
         try {
-            return RestResult.restSuccess(monitorService.queryData(id, pageNum, pageSize));
+            Map<String, String> params = getParams(request);
+            return RestResult.restSuccess(monitorService.queryData(params));
         } catch (Exception e) {
             logger.error(e.getLocalizedMessage(), e.getClass());
             return RestResult.restFail(e.getMessage());
@@ -42,9 +49,10 @@ public class MonitorController {
 
     @GetMapping("/queryLog")
     @ResponseBody
-    public RestResult queryLog(@RequestParam(value = "type") String type, @RequestParam(value = "pageNum") int pageNum, @RequestParam(value = "pageSize") int pageSize) {
+    public RestResult queryLog(HttpServletRequest request) {
         try {
-            return RestResult.restSuccess(monitorService.queryLog(type, pageNum, pageSize));
+            Map<String, String> params = getParams(request);
+            return RestResult.restSuccess(monitorService.queryLog(params));
         } catch (Exception e) {
             logger.error(e.getLocalizedMessage(), e.getClass());
             return RestResult.restFail(e.getMessage());

+ 7 - 0
dbsyncer-web/src/main/resources/static/js/common.js

@@ -20,6 +20,13 @@ function backIndexPage() {
     $initContainer.load("/index?refresh=" + new Date().getTime());
 }
 
+// 跳转菜单
+function activeMenu($url){
+    var $menu = $('#menu > li');
+    $menu.removeClass('active');
+    $menu.find("a[url='" + $url + "']").parent().addClass('active');
+}
+
 // 美化SQL
 function beautifySql(){
     var $sql = $("#sql");

+ 11 - 0
dbsyncer-web/src/main/resources/static/js/index/index.js

@@ -29,6 +29,16 @@ function bindEditMapping() {
     });
 }
 
+// 查看驱动日志
+function bindQueryData() {
+    $(".mappingList .queryData").click(function () {
+        // 阻止触发click传递事件
+        event.cancelBubble=true;
+        var $id = $(this).attr("id");
+        activeMenu('/monitor');
+        $initContainer.load('/monitor?id=' + $id);
+    });
+}
 
 function bindConnectorDropdownMenu() {
     $(".connectorList .dropdown-menu li").click(function () {
@@ -108,6 +118,7 @@ $(function () {
 
     bindAddMapping();
     bindEditMapping();
+    bindQueryData();
 
     bindConnectorDropdownMenu();
     bindMappingDropdownMenu();

+ 19 - 0
dbsyncer-web/src/main/resources/static/js/monitor/index.js

@@ -0,0 +1,19 @@
+//切换连接器
+function changeMetaData($this) {
+    var $id = $this.val();
+    $initContainer.load('/monitor?id=' + $id);
+}
+
+$(function () {
+    // 初始化select2插件
+    $(".select-control").select2({
+        width: "100%",
+        theme: "classic"
+    });
+
+    //连接器类型切换事件
+    $("select[name='metaData']").change(function () {
+        changeMetaData($(this));
+    });
+
+});

+ 1 - 1
dbsyncer-web/src/main/resources/templates/index/index.html

@@ -135,7 +135,7 @@
                                                             ,耗时:[[${(m?.meta?.endTime - m?.meta?.beginTime) / 1000}]]秒
                                                             </span>
                                                             <span th:if="${m?.meta?.success gt 0}">,成功:[[${m?.meta?.success}]]</span>
-                                                            <span th:if="${m?.meta?.fail gt 0}">,失败:[[${m?.meta?.fail}]] <a href="javascript:;" class="label label-danger">日志</a></span>
+                                                            <span th:if="${m?.meta?.fail gt 0}">,失败:[[${m?.meta?.fail}]] <a  th:id="${m?.meta?.id}" href="javascript:;" class="label label-danger queryData">日志</a></span>
                                                         </td>
                                                     </tr>
                                                     <tr>

+ 57 - 4
dbsyncer-web/src/main/resources/templates/monitor/monitor.html

@@ -6,12 +6,55 @@
 <div class="container-fluid">
 
     图表信息
-    <p>CPU 内存 硬盘 堆内存 线程数</p>
+    <p>CPU 内存 硬盘 堆内存 </p>
+
+    <div class="form-group">
+        <div class="row">
+            <div class="col-md-3">
+                <!-- 驱动下拉 -->
+                <select id="metaData" name="metaData" class="form-control select-control">
+                    <option th:each="m,s:${meta}" th:value="${m?.id}" th:text="${m?.mappingName} +' (' + ${m?.model} +')'" th:selected="${m?.id eq metaId}"/>
+                </select>
+            </div>
+            <div class="col-md-9"></div>
+        </div>
+    </div>
+
+    <!-- 数据 -->
     <table class="table table-hover">
-        <caption>任务线程</caption>
+        <caption>
+            数据
+        </caption>
+        <thead>
+        <tr>
+            <th></th>
+            <th>时间</th>
+            <th>数据</th>
+            <th>事件</th>
+            <th>结果</th>
+            <th>异常</th>
+        </tr>
+        </thead>
+        <tr th:each="d,s : ${data}">
+            <td th:text="${s.index}+1"></td>
+            <td th:text="${#dates.format(d?.createTime, 'yyyy-MM-dd HH:mm:ss')}"></td>
+            <td th:text="${d?.json}"></td>
+            <td th:text="${d?.event}"></td>
+            <td>
+                <span th:if="${d?.success}" class="label label-success">成功</span>
+                <span th:if="${not d?.success}" class="label label-warning">失败</span>
+            </td>
+            <td th:text="${d?.error}"></td>
+        </tr>
+    </table>
+
+    <!-- 线程任务 -->
+    <table class="table table-hover">
+        <caption>线程任务</caption>
         <thead>
         <tr>
             <th>序号</th>
+            <th>类型</th>
             <th>指标</th>
         </tr>
         </thead>
@@ -22,9 +65,19 @@
         </tr>
     </table>
 
-    <p>驱动增量/全量同步数据</p>
-    <p>操作日志</p>
+    <!-- 日志 -->
+    <table class="table table-hover">
+        <caption>日志</caption>
+        <thead>
+        <tr>
+            <th>序号</th>
+            <th>信息</th>
+            <th>时间</th>
+        </tr>
+        </thead>
+    </table>
 
 </div>
 
+<script th:src="@{/js/monitor/index.js}"></script>
 </html>