Browse Source

canal-admin-ui 指定profile编译 (#2019)

* canal-admin-ui 指定profile编译

* 启动实例时选择指定节点

* modify

* modify

* 静态页面修改
rewerma 5 years ago
parent
commit
44722fe01c
26 changed files with 199 additions and 147 deletions
  1. 55 39
      canal-admin/canal-admin-server/pom.xml
  2. 5 5
      canal-admin/canal-admin-server/src/main/java/com/alibaba/otter/canal/admin/controller/CanalInstanceController.java
  3. 5 2
      canal-admin/canal-admin-server/src/main/java/com/alibaba/otter/canal/admin/service/impl/CanalInstanceServiceImpl.java
  4. 10 0
      canal-admin/canal-admin-server/src/main/java/com/alibaba/otter/canal/admin/service/impl/NodeServerServiceImpl.java
  5. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/index.html
  6. 0 1
      canal-admin/canal-admin-server/src/main/resources/public/static/css/chunk-2ead9580.da8fbef7.css
  7. 1 0
      canal-admin/canal-admin-server/src/main/resources/public/static/css/chunk-4f09fed2.70ec0b86.css
  8. 0 1
      canal-admin/canal-admin-server/src/main/resources/public/static/css/chunk-666608b4.fd6bfc93.css
  9. 1 0
      canal-admin/canal-admin-server/src/main/resources/public/static/css/chunk-7ec889b7.c0585512.css
  10. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/app.b8d01331.js
  11. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-137eaf06.867259ad.js
  12. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-2ead9580.e145af54.js
  13. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-4f09fed2.ff28d88d.js
  14. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-555c32e2.6c39a877.js
  15. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-57829aa9.389c1070.js
  16. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-666608b4.1b76bd53.js
  17. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-7279d7fc.22670fea.js
  18. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-7ec889b7.6ba68ef0.js
  19. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-e1a839e4.c870a02b.js
  20. 0 0
      canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-e1a839e4.f532f91b.js
  21. 65 55
      canal-admin/canal-admin-ui/pom.xml
  22. 2 2
      canal-admin/canal-admin-ui/src/api/canalInstance.js
  23. 51 19
      canal-admin/canal-admin-ui/src/views/canalServer/CanalInstance.vue
  24. 1 1
      canal-admin/canal-admin-ui/src/views/canalServer/CanalInstanceLogDetail.vue
  25. 1 1
      canal-admin/canal-admin-ui/src/views/canalServer/CanalLogDetail.vue
  26. 2 21
      canal-admin/canal-admin-ui/src/views/canalServer/NodeServer.vue

+ 55 - 39
canal-admin/canal-admin-server/pom.xml

@@ -66,45 +66,6 @@
                     </execution>
                 </executions>
             </plugin>
-            <plugin>
-                <artifactId>maven-clean-plugin</artifactId>
-                <version>3.0.0</version>
-                <configuration>
-                    <filesets>
-                        <fileset>
-                            <directory>src/main/resources/public</directory>
-                        </fileset>
-                    </filesets>
-                </configuration>
-            </plugin>
-            <plugin>
-                <artifactId>maven-resources-plugin</artifactId>
-                <version>3.0.2</version>
-                <executions>
-                    <execution>
-                        <id>copy Vue.js frontend content</id>
-                        <phase>generate-resources</phase>
-                        <goals>
-                            <goal>copy-resources</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>src/main/resources/public</outputDirectory>
-                            <overwrite>true</overwrite>
-                            <resources>
-                                <resource>
-                                    <directory>${project.parent.basedir}/canal-admin-ui/target/dist</directory>
-                                    <includes>
-                                        <include>static/</include>
-                                        <include>index.html</include>
-                                        <include>avatar.gif</include>
-                                        <include>logo.png</include>
-                                    </includes>
-                                </resource>
-                            </resources>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
             <plugin>
                 <groupId>io.repaint.maven</groupId>
                 <artifactId>tiles-maven-plugin</artifactId>
@@ -119,4 +80,59 @@
         </plugins>
     </build>
 
+    <profiles>
+        <profile>
+            <id>release</id>
+            <activation>
+                <property>
+                    <name>env</name>
+                    <value>release</value>
+                </property>
+            </activation>
+            <build>
+                <plugins>
+                    <plugin>
+                        <artifactId>maven-clean-plugin</artifactId>
+                        <version>3.0.0</version>
+                        <configuration>
+                            <filesets>
+                                <fileset>
+                                    <directory>src/main/resources/public</directory>
+                                </fileset>
+                            </filesets>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <artifactId>maven-resources-plugin</artifactId>
+                        <version>3.0.2</version>
+                        <executions>
+                            <execution>
+                                <id>copy Vue.js frontend content</id>
+                                <phase>generate-resources</phase>
+                                <goals>
+                                    <goal>copy-resources</goal>
+                                </goals>
+                                <configuration>
+                                    <outputDirectory>src/main/resources/public</outputDirectory>
+                                    <overwrite>true</overwrite>
+                                    <resources>
+                                        <resource>
+                                            <directory>${project.parent.basedir}/canal-admin-ui/target/dist</directory>
+                                            <includes>
+                                                <include>static/</include>
+                                                <include>index.html</include>
+                                                <include>avatar.gif</include>
+                                                <include>logo.png</include>
+                                            </includes>
+                                        </resource>
+                                    </resources>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
 </project>

+ 5 - 5
canal-admin/canal-admin-server/src/main/java/com/alibaba/otter/canal/admin/controller/CanalInstanceController.java

@@ -94,9 +94,9 @@ public class CanalInstanceController {
      * @param env 环境变量
      * @return 是否成功
      */
-    @PutMapping(value = "/instance/start/{id}")
-    public BaseModel<Boolean> start(@PathVariable Long id, @PathVariable String env) {
-        return BaseModel.getInstance(canalInstanceConfigService.remoteOperation(id, null, "start"));
+    @PutMapping(value = "/instance/start/{id}/{nodeId}")
+    public BaseModel<Boolean> start(@PathVariable Long id, @PathVariable Long nodeId, @PathVariable String env) {
+        return BaseModel.getInstance(canalInstanceConfigService.remoteOperation(id, nodeId, "start"));
     }
 
     /**
@@ -121,8 +121,8 @@ public class CanalInstanceController {
      * @return 实例日志信息
      */
     @GetMapping(value = "/instance/log/{id}/{nodeId}")
-    public BaseModel<Map<String, String>> start(@PathVariable Long id, @PathVariable Long nodeId,
-                                                @PathVariable String env) {
+    public BaseModel<Map<String, String>> instanceLog(@PathVariable Long id, @PathVariable Long nodeId,
+                                                      @PathVariable String env) {
         return BaseModel.getInstance(canalInstanceConfigService.remoteInstanceLog(id, nodeId));
     }
 }

+ 5 - 2
canal-admin/canal-admin-server/src/main/java/com/alibaba/otter/canal/admin/service/impl/CanalInstanceServiceImpl.java

@@ -102,8 +102,11 @@ public class CanalInstanceServiceImpl implements CanalInstanceService {
     public boolean remoteOperation(Long id, Long nodeId, String option) {
         NodeServer nodeServer = null;
         if ("start".equals(option)) {
-            // select the first node server
-            nodeServer = NodeServer.find.query().findOne();
+            if (nodeId != null) {
+                nodeServer = NodeServer.find.byId(nodeId);
+            } else {
+                nodeServer = NodeServer.find.query().findOne();
+            }
         } else {
             if (nodeId == null) {
                 return false;

+ 10 - 0
canal-admin/canal-admin-server/src/main/java/com/alibaba/otter/canal/admin/service/impl/NodeServerServiceImpl.java

@@ -49,6 +49,16 @@ public class NodeServerServiceImpl implements NodeServerService {
     }
 
     public void update(NodeServer nodeServer) {
+        int cnt = NodeServer.find.query()
+            .where()
+            .eq("ip", nodeServer.getIp())
+            .eq("port", nodeServer.getPort())
+            .ne("id", nodeServer.getId())
+            .findCount();
+        if (cnt > 0) {
+            throw new ServiceException("节点信息已存在");
+        }
+
         nodeServer.update("name", "ip", "port", "port2");
     }
 

File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/index.html


+ 0 - 1
canal-admin/canal-admin-server/src/main/resources/public/static/css/chunk-2ead9580.da8fbef7.css

@@ -1 +0,0 @@
-.line[data-v-50b472ce]{text-align:center}

+ 1 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/css/chunk-4f09fed2.70ec0b86.css

@@ -0,0 +1 @@
+.line[data-v-64c3fae5]{text-align:center}

+ 0 - 1
canal-admin/canal-admin-server/src/main/resources/public/static/css/chunk-666608b4.fd6bfc93.css

@@ -1 +0,0 @@
-.line[data-v-4058c64d]{text-align:center}

+ 1 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/css/chunk-7ec889b7.c0585512.css

@@ -0,0 +1 @@
+.line[data-v-0b80198c]{text-align:center}

File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/app.b8d01331.js


File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-137eaf06.867259ad.js


File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-2ead9580.e145af54.js


File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-4f09fed2.ff28d88d.js


File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-555c32e2.6c39a877.js


File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-57829aa9.389c1070.js


File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-666608b4.1b76bd53.js


File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-7279d7fc.22670fea.js


File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-7ec889b7.6ba68ef0.js


File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-e1a839e4.c870a02b.js


File diff suppressed because it is too large
+ 0 - 0
canal-admin/canal-admin-server/src/main/resources/public/static/js/chunk-e1a839e4.f532f91b.js


+ 65 - 55
canal-admin/canal-admin-ui/pom.xml

@@ -2,64 +2,74 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <artifactId>canal-admin</artifactId>
-        <groupId>com.alibaba.otter</groupId>
-        <version>1.1.4-SNAPSHOT</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>canal-admin</artifactId>
+    <groupId>com.alibaba.otter</groupId>
+    <version>1.1.4-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>canal-admin-ui</artifactId>
+  <artifactId>canal-admin-ui</artifactId>
 
-    <properties>
-        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-        <java.version>1.8</java.version>
-        <frontend-maven-plugin.version>1.6</frontend-maven-plugin.version>
-    </properties>
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+    <java.version>1.8</java.version>
+    <frontend-maven-plugin.version>1.6</frontend-maven-plugin.version>
+  </properties>
 
-    <build>
+  <profiles>
+    <profile>
+      <id>release</id>
+      <activation>
+        <property>
+          <name>env</name>
+          <value>release</value>
+        </property>
+      </activation>
+      <build>
         <plugins>
-            <plugin>
-                <groupId>com.github.eirslett</groupId>
-                <artifactId>frontend-maven-plugin</artifactId>
-                <version>${frontend-maven-plugin.version}</version>
-                <executions>
-                    <execution>
-                        <id>install node and npm</id>
-                        <goals>
-                            <goal>install-node-and-npm</goal>
-                        </goals>
-                        <configuration>
-                            <nodeVersion>v9.11.1</nodeVersion>
-                        </configuration>
-                    </execution>
-                    <!-- Install all project dependencies -->
-                    <execution>
-                        <id>npm install</id>
-                        <goals>
-                            <goal>npm</goal>
-                        </goals>
-                        <!-- optional: default phase is "generate-resources" -->
-                        <phase>generate-resources</phase>
-                        <!-- Optional configuration which provides for running any npm command -->
-                        <configuration>
-                            <arguments>install</arguments>
-                        </configuration>
-                    </execution>
-                    <!-- Build and minify static files -->
-                    <execution>
-                        <id>npm run build</id>
-                        <goals>
-                            <goal>npm</goal>
-                        </goals>
-                        <configuration>
-                            <arguments>run build</arguments>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
+          <plugin>
+            <groupId>com.github.eirslett</groupId>
+            <artifactId>frontend-maven-plugin</artifactId>
+            <version>${frontend-maven-plugin.version}</version>
+            <executions>
+              <execution>
+                <id>install node and npm</id>
+                <goals>
+                  <goal>install-node-and-npm</goal>
+                </goals>
+                <configuration>
+                  <nodeVersion>v9.11.1</nodeVersion>
+                </configuration>
+              </execution>
+              <!-- Install all project dependencies -->
+              <execution>
+                <id>npm install</id>
+                <goals>
+                  <goal>npm</goal>
+                </goals>
+                <!-- optional: default phase is "generate-resources" -->
+                <phase>generate-resources</phase>
+                <!-- Optional configuration which provides for running any npm command -->
+                <configuration>
+                  <arguments>install</arguments>
+                </configuration>
+              </execution>
+              <!-- Build and minify static files -->
+              <execution>
+                <id>npm run build</id>
+                <goals>
+                  <goal>npm</goal>
+                </goals>
+                <configuration>
+                  <arguments>run build</arguments>
+                </configuration>
+              </execution>
+            </executions>
+          </plugin>
         </plugins>
-    </build>
-
+      </build>
+    </profile>
+  </profiles>
 </project>

+ 2 - 2
canal-admin/canal-admin-ui/src/api/canalInstance.js

@@ -38,9 +38,9 @@ export function deleteCanalInstance(id) {
   })
 }
 
-export function startInstance(id) {
+export function startInstance(id, nodeId) {
   return request({
-    url: '/canal/instance/start/' + id,
+    url: '/canal/instance/start/' + id + '/' + nodeId,
     method: 'put'
   })
 }

+ 51 - 19
canal-admin/canal-admin-ui/src/views/canalServer/CanalInstance.vue

@@ -47,11 +47,25 @@
         </template>
       </el-table-column>
     </el-table>
+    <el-dialog :visible.sync="dialogFormVisible" title="确定启动服务" width="400px">
+      <el-form ref="dataForm" :rules="rules" :model="nodeModel" label-position="left" label-width="80px" style="width: 350px; margin-left:30px;">
+        <el-form-item label="选择节点" prop="nodeId">
+          <el-select v-model="nodeModel.id" placeholder="选择节点">
+            <el-option v-for="item in nodeServices" :key="item.id" :label="item.name" :value="item.id" />
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取消</el-button>
+        <el-button type="primary" @click="doStartInstance()">确定</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import { getCanalInstances, deleteCanalInstance, startInstance, stopInstance } from '@/api/canalInstance'
+import { getNodeServers } from '@/api/nodeServer'
 
 export default {
   filters: {
@@ -68,8 +82,17 @@ export default {
     return {
       list: null,
       listLoading: true,
+      dialogFormVisible: false,
+      nodeServices: [],
       listQuery: {
         name: ''
+      },
+      currentId: null,
+      nodeModel: {
+        id: null
+      },
+      rules: {
+        id: [{ required: true, message: '请选择节点', trigger: 'change' }]
       }
     }
   },
@@ -117,25 +140,34 @@ export default {
         this.$message({ message: '当前实例不是停止状态,无法启动', type: 'error' })
         return
       }
-      this.$confirm('启动Canal Instance: ' + row.name, '确定启动实例服务', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        startInstance(row.id).then((res) => {
-          if (res.data) {
-            this.fetchData()
-            this.$message({
-              message: '启动成功',
-              type: 'success'
-            })
-          } else {
-            this.$message({
-              message: '启动实例服务出现异常',
-              type: 'error'
-            })
-          }
-        })
+
+      this.currentId = row.id
+      this.nodeModel.id = null
+
+      this.$nextTick(() => {
+        this.$refs['dataForm'].clearValidate()
+      })
+
+      getNodeServers().then((res) => {
+        this.nodeServices = res.data
+        this.dialogFormVisible = true
+      })
+    },
+    doStartInstance() {
+      startInstance(this.currentId, this.nodeModel.id).then((res) => {
+        if (res.data) {
+          this.fetchData()
+          this.$message({
+            message: '启动成功',
+            type: 'success'
+          })
+          this.dialogFormVisible = false
+        } else {
+          this.$message({
+            message: '启动实例服务出现异常',
+            type: 'error'
+          })
+        }
       })
     },
     handleStop(row) {

+ 1 - 1
canal-admin/canal-admin-ui/src/views/canalServer/CanalInstanceLogDetail.vue

@@ -7,7 +7,7 @@
           <el-button type="primary" @click="onRefresh">刷新</el-button>
           <el-button type="info" @click="onBack">返回</el-button>
         </el-form-item>
-        <el-input v-model="form.desc" :rows="35" readonly="true" type="textarea" />
+        <el-input v-model="form.desc" :rows="35" :readonly="'readonly'" type="textarea" />
       </div>
     </el-form>
   </div>

+ 1 - 1
canal-admin/canal-admin-ui/src/views/canalServer/CanalLogDetail.vue

@@ -7,7 +7,7 @@
           <el-button type="primary" @click="onRefresh">刷新</el-button>
           <el-button type="info" @click="onBack">返回</el-button>
         </el-form-item>
-        <el-input v-model="form.desc" :rows="35" readonly="true" type="textarea" />
+        <el-input v-model="form.desc" :rows="35" :readonly="'readonly'" type="textarea" />
       </div>
     </el-form>
   </div>

+ 2 - 21
canal-admin/canal-admin-ui/src/views/canalServer/NodeServer.vue

@@ -57,26 +57,6 @@
         </template>
       </el-table-column>
     </el-table>
-    <el-dialog :visible.sync="dialogFormVisible" title="新建节点信息" width="600px">
-      <el-form ref="dataForm" :rules="rules" :model="nodeModel" label-position="left" label-width="80px" style="width: 350px; margin-left:80px;">
-        <el-form-item label="节点名称" prop="name">
-          <el-input v-model="nodeModel.name" />
-        </el-form-item>
-        <el-form-item label="节点IP" prop="ip">
-          <el-input v-model="nodeModel.ip" />
-        </el-form-item>
-        <el-form-item label="节点端口" prop="port">
-          <el-input v-model="nodeModel.port" placeholder="11113" type="number" />
-        </el-form-item>
-        <el-form-item label="监控端口" prop="port2">
-          <el-input v-model="nodeModel.port2" type="number" />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">取消</el-button>
-        <el-button type="primary" @click="createData()">确定</el-button>
-      </div>
-    </el-dialog>
     <el-dialog :visible.sync="dialogFormVisible" :title="textMap[dialogStatus]" width="600px">
       <el-form ref="dataForm" :rules="rules" :model="nodeModel" label-position="left" label-width="80px" style="width: 350px; margin-left:80px;">
         <el-form-item label="节点名称" prop="name">
@@ -146,7 +126,8 @@ export default {
         name: [{ required: true, message: '节点名称不能为空', trigger: 'change' }],
         ip: [{ required: true, message: '节点IP不能为空', trigger: 'change' }],
         port: [{ required: true, message: '节点端口不能为空', trigger: 'change' }]
-      }
+      },
+      dialogStatus: 'create'
     }
   },
   // { min: 2, max: 5, message: '长度在 2 到 5 个字符', trigger: 'change' }

Some files were not shown because too many files changed in this diff