Browse Source

add meta list

AE86 5 years ago
parent
commit
18a8c2abfb

+ 2 - 2
dbsyncer-biz/src/main/java/org/dbsyncer/biz/MappingService.java

@@ -54,14 +54,14 @@ public interface MappingService {
      *
      *
      * @param id
      * @param id
      */
      */
-    boolean start(String id);
+    String start(String id);
 
 
     /**
     /**
      * 停止驱动
      * 停止驱动
      *
      *
      * @param id
      * @param id
      */
      */
-    boolean stop(String id);
+    String stop(String id);
 
 
     /**
     /**
      * 获取运行的驱动列表
      * 获取运行的驱动列表

+ 10 - 7
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/MetaChecker.java

@@ -39,23 +39,26 @@ public class MetaChecker extends AbstractChecker {
         Mapping mapping = manager.getMapping(mappingId);
         Mapping mapping = manager.getMapping(mappingId);
         Assert.notNull(mapping, "驱动不存在.");
         Assert.notNull(mapping, "驱动不存在.");
 
 
-        // 驱动和元信息1对1关系
-        List<Meta> metaAll = manager.getMetaAll(mappingId);
-        if (!CollectionUtils.isEmpty(metaAll)) {
+        Meta meta = manager.getMeta(mapping.getMetaId());
+        if (null != meta) {
             throw new BizException("驱动正在运行中.");
             throw new BizException("驱动正在运行中.");
         }
         }
 
 
         // TODO 获取驱动数据源总条数
         // TODO 获取驱动数据源总条数
-        AtomicInteger total = new AtomicInteger();
-        AtomicInteger success = new AtomicInteger();
-        AtomicInteger fail = new AtomicInteger();
+        AtomicInteger total = new AtomicInteger(1000);
+        AtomicInteger success = new AtomicInteger(500);
+        AtomicInteger fail = new AtomicInteger(0);
         Map<String, String> map = new ConcurrentHashMap<>();
         Map<String, String> map = new ConcurrentHashMap<>();
-        Meta meta = new Meta(mappingId, MetaEnum.RUNNING.getCode(), total, success, fail, map);
+        meta = new Meta(mappingId, MetaEnum.RUNNING.getCode(), total, success, fail, map);
         meta.setType(ConfigConstant.META);
         meta.setType(ConfigConstant.META);
         meta.setName(ConfigConstant.META);
         meta.setName(ConfigConstant.META);
 
 
         // 修改基本配置
         // 修改基本配置
         this.modifyConfigModel(meta, params);
         this.modifyConfigModel(meta, params);
+
+        // 修改驱动元信息ID
+        mapping.setMetaId(meta.getId());
+        manager.editMapping(mapping);
         return meta;
         return meta;
     }
     }
 
 

+ 17 - 12
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MappingServiceImpl.java

@@ -60,11 +60,10 @@ public class MappingServiceImpl implements MappingService {
     @Override
     @Override
     public boolean remove(String mappingId) {
     public boolean remove(String mappingId) {
         logger.info("检查驱动是否停止运行");
         logger.info("检查驱动是否停止运行");
+        Mapping mapping = manager.getMapping(mappingId);
+        Assert.notNull(mapping, "驱动不存在.");
         // 删除meta
         // 删除meta
-        List<Meta> metaList = manager.getMetaAll(mappingId);
-        if (!CollectionUtils.isEmpty(metaList)) {
-            metaList.forEach(m -> manager.removeMeta(m.getId()));
-        }
+        manager.removeMeta(mapping.getMetaId());
 
 
         // 删除tableGroup
         // 删除tableGroup
         List<TableGroup> groupList = manager.getTableGroupAll(mappingId);
         List<TableGroup> groupList = manager.getTableGroupAll(mappingId);
@@ -92,23 +91,27 @@ public class MappingServiceImpl implements MappingService {
     }
     }
 
 
     @Override
     @Override
-    public boolean start(String id) {
+    public String start(String id) {
         Map<String, String> params = new HashMap<>();
         Map<String, String> params = new HashMap<>();
         params.put(ConfigConstant.CONFIG_MODEL_ID, id);
         params.put(ConfigConstant.CONFIG_MODEL_ID, id);
         ConfigModel model = metaChecker.checkAddConfigModel(params);
         ConfigModel model = metaChecker.checkAddConfigModel(params);
         manager.addMeta(model);
         manager.addMeta(model);
-        return true;
+        return "驱动启动成功";
     }
     }
 
 
     @Override
     @Override
-    public boolean stop(String id) {
-        List<Meta> metaAll = manager.getMetaAll(id);
-        if (!CollectionUtils.isEmpty(metaAll)) {
-            metaAll.forEach(m -> manager.removeMeta(m.getId()));
+    public String stop(String id) {
+        Mapping mapping = manager.getMapping(id);
+        Assert.notNull(mapping, "驱动不存在.");
+
+        String metaId = mapping.getMetaId();
+        Meta meta = manager.getMeta(metaId);
+        if (null != meta) {
+            manager.removeMeta(metaId);
         } else {
         } else {
             throw new BizException("驱动已停止.");
             throw new BizException("驱动已停止.");
         }
         }
-        return true;
+        return "驱动停止成功";
     }
     }
 
 
     @Override
     @Override
@@ -139,7 +142,9 @@ public class MappingServiceImpl implements MappingService {
         BeanUtils.copyProperties(s, sConn);
         BeanUtils.copyProperties(s, sConn);
         ConnectorVo tConn = new ConnectorVo(running);
         ConnectorVo tConn = new ConnectorVo(running);
         BeanUtils.copyProperties(t, tConn);
         BeanUtils.copyProperties(t, tConn);
-        MappingVo vo = new MappingVo(running, sConn, tConn);
+
+        boolean isRunning = null != manager.getMeta(mapping.getMetaId());
+        MappingVo vo = new MappingVo(isRunning, sConn, tConn);
         BeanUtils.copyProperties(mapping, vo);
         BeanUtils.copyProperties(mapping, vo);
         return vo;
         return vo;
     }
     }

+ 7 - 7
dbsyncer-biz/src/main/java/org/dbsyncer/biz/vo/MetaVo.java

@@ -14,12 +14,12 @@ public class MetaVo extends Meta {
     // 同步方式
     // 同步方式
     private String model;
     private String model;
     // 状态
     // 状态
-    private String status;
+    private String mappingState;
 
 
-    public MetaVo(String mappingName, String model, String status) {
+    public MetaVo(String mappingName, String model, String mappingState) {
         this.mappingName = mappingName;
         this.mappingName = mappingName;
         this.model = model;
         this.model = model;
-        this.status = status;
+        this.mappingState = mappingState;
     }
     }
 
 
     public String getMappingName() {
     public String getMappingName() {
@@ -38,11 +38,11 @@ public class MetaVo extends Meta {
         this.model = model;
         this.model = model;
     }
     }
 
 
-    public String getStatus() {
-        return status;
+    public String getMappingState() {
+        return mappingState;
     }
     }
 
 
-    public void setStatus(String status) {
-        this.status = status;
+    public void setMappingState(String mappingState) {
+        this.mappingState = mappingState;
     }
     }
 }
 }

+ 2 - 2
dbsyncer-manager/src/main/java/org/dbsyncer/manager/Manager.java

@@ -63,9 +63,9 @@ public interface Manager {
     // Meta
     // Meta
     String addMeta(ConfigModel model);
     String addMeta(ConfigModel model);
 
 
-    void removeMeta(String metaId);
+    Meta getMeta(String metaId);
 
 
-    List<Meta> getMetaAll(String mappingId);
+    void removeMeta(String metaId);
 
 
     List<Meta> getMetaAll();
     List<Meta> getMetaAll();
 
 

+ 9 - 25
dbsyncer-manager/src/main/java/org/dbsyncer/manager/ManagerFactory.java

@@ -52,9 +52,6 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
     @Autowired
     @Autowired
     private GroupStrategy tableGroupStrategy;
     private GroupStrategy tableGroupStrategy;
 
 
-    @Autowired
-    private GroupStrategy metaGroupStrategy;
-
     @Override
     @Override
     public boolean alive(ConnectorConfig config) {
     public boolean alive(ConnectorConfig config) {
         return parser.alive(config);
         return parser.alive(config);
@@ -303,19 +300,24 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
 
 
             @Override
             @Override
             public GroupStrategy getGroupStrategy() {
             public GroupStrategy getGroupStrategy() {
-                return metaGroupStrategy;
+                return defaultGroupStrategy;
             }
             }
 
 
         });
         });
     }
     }
 
 
+    @Override
+    public Meta getMeta(String metaId) {
+        return operationTemplate.queryObject(Meta.class, metaId);
+    }
+
     @Override
     @Override
     public void removeMeta(String metaId) {
     public void removeMeta(String metaId) {
         operationTemplate.remove(new RemoveTemplate() {
         operationTemplate.remove(new RemoveTemplate() {
 
 
             @Override
             @Override
             public GroupStrategy getGroupStrategy() {
             public GroupStrategy getGroupStrategy() {
-                return metaGroupStrategy;
+                return defaultGroupStrategy;
             }
             }
 
 
             @Override
             @Override
@@ -325,24 +327,6 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
         });
         });
     }
     }
 
 
-    @Override
-    public List<Meta> getMetaAll(String mappingId) {
-        return operationTemplate.queryAll(new QueryTemplate<Meta>() {
-            @Override
-            public ConfigModel getConfigModel() {
-                Meta model = new Meta();
-                model.setType(ConfigConstant.META);
-                model.setMappingId(mappingId);
-                return model;
-            }
-
-            @Override
-            public GroupStrategy getGroupStrategy() {
-                return metaGroupStrategy;
-            }
-        });
-    }
-
     @Override
     @Override
     public List<Meta> getMetaAll() {
     public List<Meta> getMetaAll() {
         return operationTemplate.queryAll(new QueryTemplate<Meta>() {
         return operationTemplate.queryAll(new QueryTemplate<Meta>() {
@@ -356,7 +340,7 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
 
 
             @Override
             @Override
             public GroupStrategy getGroupStrategy() {
             public GroupStrategy getGroupStrategy() {
-                return metaGroupStrategy;
+                return defaultGroupStrategy;
             }
             }
         });
         });
     }
     }
@@ -450,7 +434,7 @@ public class ManagerFactory implements Manager, ApplicationListener<ContextRefre
 
 
             @Override
             @Override
             public GroupStrategy getGroupStrategy() {
             public GroupStrategy getGroupStrategy() {
-                return metaGroupStrategy;
+                return defaultGroupStrategy;
             }
             }
 
 
             @Override
             @Override

+ 4 - 0
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/ConfigOperationTemplate.java

@@ -1,5 +1,6 @@
 package org.dbsyncer.manager.template.impl;
 package org.dbsyncer.manager.template.impl;
 
 
+import org.apache.commons.lang.StringUtils;
 import org.dbsyncer.cache.CacheService;
 import org.dbsyncer.cache.CacheService;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.manager.ManagerException;
 import org.dbsyncer.manager.ManagerException;
@@ -60,6 +61,9 @@ public class ConfigOperationTemplate {
     }
     }
 
 
     public <T> T queryObject(Class<T> clazz, String id) {
     public <T> T queryObject(Class<T> clazz, String id) {
+        if(StringUtils.isBlank(id)){
+            return null;
+        }
         Object o = cacheService.get(id, clazz);
         Object o = cacheService.get(id, clazz);
         return beanCopy(clazz, o);
         return beanCopy(clazz, o);
     }
     }

+ 0 - 29
dbsyncer-manager/src/main/java/org/dbsyncer/manager/template/impl/MetaGroupStrategy.java

@@ -1,29 +0,0 @@
-package org.dbsyncer.manager.template.impl;
-
-import org.dbsyncer.manager.ManagerException;
-import org.dbsyncer.manager.template.GroupStrategy;
-import org.dbsyncer.parser.model.ConfigModel;
-import org.dbsyncer.parser.model.Meta;
-import org.springframework.stereotype.Component;
-
-/**
- * @author AE86
- * @version 1.0.0
- * @date 2020/04/21 21:35
- */
-@Component
-public class MetaGroupStrategy implements GroupStrategy {
-
-    @Override
-    public String getGroupId(ConfigModel model) {
-        if (model instanceof Meta) {
-            Meta m = (Meta) model;
-            String type = m.getType();
-            String mappingId = m.getMappingId();
-            // 格式:${type} + "_" + ${mappingId}
-            return new StringBuilder(type).append("_").append(mappingId).toString();
-        }
-        throw new ManagerException(String.format("Not support config model \"%s\".", model));
-    }
-
-}

+ 11 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/Mapping.java

@@ -37,6 +37,9 @@ public class Mapping extends AbstractConfigModel {
     // 监听配置
     // 监听配置
     private ListenerConfig listener;
     private ListenerConfig listener;
 
 
+    // 元信息ID
+    private String metaId;
+
     // 批量数
     // 批量数
     private int batchNum = 200;
     private int batchNum = 200;
 
 
@@ -95,6 +98,14 @@ public class Mapping extends AbstractConfigModel {
         return this;
         return this;
     }
     }
 
 
+    public String getMetaId() {
+        return metaId;
+    }
+
+    public void setMetaId(String metaId) {
+        this.metaId = metaId;
+    }
+
     public int getBatchNum() {
     public int getBatchNum() {
         return batchNum;
         return batchNum;
     }
     }

+ 2 - 0
dbsyncer-parser/src/main/resources/Mapping.json

@@ -47,6 +47,7 @@
     "name":"用户信息转换插件",
     "name":"用户信息转换插件",
     "className": "com.xx.hr.convert.MyImpl"
     "className": "com.xx.hr.convert.MyImpl"
   },
   },
+  "model":"full",
   "listener": {
   "listener": {
     "listenerType": "Polling",
     "listenerType": "Polling",
     "cronExpression": "*/30 * * * * ?",
     "cronExpression": "*/30 * * * * ?",
@@ -62,6 +63,7 @@
       "D"
       "D"
     ]
     ]
   },
   },
+  "metaId":"1",
   "batchNum": 200,
   "batchNum": 200,
   "threadNum": 5
   "threadNum": 5
 }
 }

+ 1 - 0
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/IndexController.java

@@ -24,6 +24,7 @@ public class IndexController {
     public String index(HttpServletRequest request, ModelMap model) {
     public String index(HttpServletRequest request, ModelMap model) {
         model.put("connectors", connectorService.getConnectorAll());
         model.put("connectors", connectorService.getConnectorAll());
         model.put("mappings", mappingService.getMappingAll());
         model.put("mappings", mappingService.getMappingAll());
+        model.put("metas", mappingService.getMetaAll());
         return "index/index.html";
         return "index/index.html";
     }
     }
 
 

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

@@ -140,7 +140,7 @@
 
 
         <!-- 实时数据 -->
         <!-- 实时数据 -->
         <div class="col-md-8">
         <div class="col-md-8">
-            <table class="table table-condensed table-hover">
+            <table th:if="${metas?.size() gt 0}" class="table table-hover">
                 <caption>驱动运行监控</caption>
                 <caption>驱动运行监控</caption>
                 <thead>
                 <thead>
                 <tr>
                 <tr>
@@ -153,53 +153,20 @@
                 </tr>
                 </tr>
                 </thead>
                 </thead>
                 <tbody>
                 <tbody>
-                <tr>
-                    <td>1</td>
-                    <td>增量同步1</td>
-                    <td>增量</td>
-                    <td>成功:0</td>
-                    <td><span class="label label-info">启动中</span></td>
-                    <td>2020-04-20 22:15:30</td>
-                </tr>
-                <tr>
-                    <td>2</td>
-                    <td>增量同步2</td>
-                    <td>增量</td>
-                    <td>成功:99999</td>
-                    <td><span class="label label-warning">停止中</span></td>
-                    <td>2020-04-20 22:15:30</td>
-                </tr>
-                <tr>
-                    <td>3</td>
-                    <td>增量同步3</td>
-                    <td>增量</td>
-                    <td>成功:18686,失败:1 <a href="javascript:;" class="label label-danger">日志</a></td>
-                    <td><span class="label label-success">运行中</span></td>
-                    <td>2020-04-20 22:15:30</td>
-                </tr>
-                <tr>
-                    <td>4</td>
-                    <td>全量同步1</td>
-                    <td>全量</td>
-                    <td>进度:0%, 成功:0</td>
-                    <td><span class="label label-info">启动中</span></td>
-                    <td>2020-04-20 22:15:30</td>
-                </tr>
-                <tr>
-                    <td>5</td>
-                    <td>全量同步2</td>
-                    <td>全量</td>
-                    <td>进度:35%, 成功:18686</td>
-                    <td><span class="label label-success">运行中</span></td>
-                    <td>2020-04-20 22:15:30</td>
-                </tr>
-                <tr>
-                    <td>6</td>
-                    <td>全量同步3</td>
-                    <td>全量</td>
-                    <td>进度:35%, 成功:18686, 失败:1 <a href="javascript:;" class="label label-danger">日志</a></td>
-                    <td><span class="label label-success">运行中</span></td>
-                    <td>2020-04-20 22:15:30</td>
+                <tr th:each="m,state : ${metas}">
+                    <td th:text="${state?.index + 1}"></td>
+                    <td th:text="${m?.mappingName}"></td>
+                    <td th:text="${m?.model}"></td>
+                    <td>
+                        <span th:if="${m?.model eq '全量' and m?.total gt 0}">
+                            进度:[[${#numbers.formatDecimal(((m?.success + m?.fail) / m?.total * 10000 / 100.00),2 ,2)}]]%,
+                            总数:[[${m?.total}]],
+                        </span>
+                        成功:[[${m?.success}]]
+                        <span th:if="${m?.fail gt 0}">,失败:[[${m?.fail}]] <a href="javascript:;" class="label label-danger">日志</a></span>
+                    </td>
+                    <td><span class="label label-success">[[${m?.mappingState}]]</span></td>
+                    <td th:text="${#dates.format(m?.updateTime, 'yyyy-MM-dd HH:mm:ss')}"></td>
                 </tr>
                 </tr>
                 </tbody>
                 </tbody>
             </table>
             </table>