You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/07/21 11:47:27 UTC

[shardingsphere-elasticjob] branch master updated: Remove lite console module (#1227)

This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere-elasticjob.git


The following commit(s) were added to refs/heads/master by this push:
     new 7f6c434  Remove lite console module (#1227)
7f6c434 is described below

commit 7f6c434255c743a82955b9d462a1670aa39bf7a0
Author: Haoran Meng <me...@gmail.com>
AuthorDate: Tue Jul 21 19:47:16 2020 +0800

    Remove lite console module (#1227)
---
 .../elasticjob-lite-console/.dockerignore          |   18 -
 elasticjob-lite/elasticjob-lite-console/Dockerfile |   23 -
 elasticjob-lite/elasticjob-lite-console/README.md  |    7 -
 elasticjob-lite/elasticjob-lite-console/pom.xml    |  149 -
 .../elasticjob/lite/console/ConsoleBootstrap.java  |   39 -
 .../console/config/DynamicDataSourceConfig.java    |  116 -
 .../lite/console/config/FilterRegisterConfig.java  |   75 -
 .../lite/console/config/WebMvcConfig.java          |   49 -
 .../config/advice/ConsoleRestControllerAdvice.java |   67 -
 .../controller/EventTraceDataSourceController.java |  138 -
 .../controller/EventTraceHistoryController.java    |   67 -
 .../console/controller/JobConfigController.java    |   77 -
 .../console/controller/JobOperationController.java |  139 -
 .../controller/RegistryCenterController.java       |  124 -
 .../controller/ServerOperationController.java      |  162 -
 .../dao/search/JobExecutionLogRepository.java      |   25 -
 .../dao/search/JobStatusTraceLogRepository.java    |   25 -
 .../JobRegisterStatisticsRepository.java           |   42 -
 .../statistics/JobRunningStatisticsRepository.java |   42 -
 .../console/dao/statistics/StatisticInterval.java  |   37 -
 .../statistics/TaskResultStatisticsRepository.java |   54 -
 .../TaskRunningStatisticsRepository.java           |   42 -
 .../type/job/JobExecutionTypeStatistics.java       |   33 -
 .../dao/statistics/type/job/JobTypeStatistics.java |   35 -
 .../lite/console/domain/DataSourceFactory.java     |   41 -
 .../lite/console/domain/EventTraceDataSource.java  |   52 -
 .../domain/EventTraceDataSourceConfiguration.java  |   66 -
 .../domain/EventTraceDataSourceConfigurations.java |   37 -
 .../domain/EventTraceDataSourceFactory.java        |   66 -
 .../lite/console/domain/GlobalConfiguration.java   |   39 -
 .../lite/console/domain/JobExecutionLog.java       |   86 -
 .../lite/console/domain/JobRegisterStatistics.java |   59 -
 .../lite/console/domain/JobRunningStatistics.java  |   59 -
 .../lite/console/domain/JobStatusTraceLog.java     |   86 -
 .../domain/RegistryCenterConfiguration.java        |   56 -
 .../domain/RegistryCenterConfigurations.java       |   37 -
 .../lite/console/domain/TaskResultStatistics.java  |   72 -
 .../lite/console/domain/TaskRunningStatistics.java |   59 -
 .../lite/console/dto/request/BasePageRequest.java  |   60 -
 .../dto/request/FindJobExecutionEventsRequest.java |   76 -
 .../request/FindJobStatusTraceEventsRequest.java   |   63 -
 .../console/dto/response/BasePageResponse.java     |   65 -
 .../console/exception/JobConsoleException.java     |   30 -
 .../console/filter/GlobalConfigurationFilter.java  |  120 -
 .../repository/ConfigurationsXmlRepository.java    |   26 -
 .../lite/console/repository/XmlRepository.java     |   40 -
 .../repository/impl/AbstractXmlRepositoryImpl.java |   80 -
 .../impl/ConfigurationsXmlRepositoryImpl.java      |   31 -
 .../console/security/AuthenticationResult.java     |   35 -
 .../security/UserAuthenticationService.java        |  105 -
 .../lite/console/security/WwwAuthFilter.java       |  101 -
 .../EventTraceDataSourceConfigurationService.java  |   75 -
 .../console/service/EventTraceHistoryService.java  |   46 -
 .../lite/console/service/JobAPIService.java        |   70 -
 .../RegistryCenterConfigurationService.java        |   75 -
 ...entTraceDataSourceConfigurationServiceImpl.java |  125 -
 .../service/impl/EventTraceHistoryServiceImpl.java |  132 -
 .../console/service/impl/JobAPIServiceImpl.java    |   73 -
 .../RegistryCenterConfigurationServiceImpl.java    |  113 -
 .../elasticjob/lite/console/util/BeanUtils.java    |   56 -
 .../lite/console/util/HomeFolderUtils.java         |   58 -
 .../SessionEventTraceDataSourceConfiguration.java  |   43 -
 .../util/SessionRegistryCenterConfiguration.java   |   49 -
 .../src/main/resources/application.properties      |   31 -
 .../src/main/resources/assembly/assembly.xml       |   54 -
 .../src/main/resources/bin/start.bat               |   39 -
 .../src/main/resources/bin/start.sh                |   50 -
 .../src/main/resources/console/css/index.css       |   82 -
 .../src/main/resources/console/favicon.ico         |  Bin 4166 -> 0 bytes
 .../html/global/event_trace_data_source.html       |   83 -
 .../console/html/global/registry_center.html       |   77 -
 .../src/main/resources/console/html/help/help.html |   43 -
 .../html/history/job_event_trace_history.html      |   93 -
 .../console/html/history/job_status_history.html   |   91 -
 .../console/html/status/job/job_config.html        |  158 -
 .../console/html/status/job/job_status_detail.html |   47 -
 .../html/status/job/jobs_status_overview.html      |   58 -
 .../html/status/server/server_status_detail.html   |   43 -
 .../status/server/servers_status_overview.html     |   42 -
 .../main/resources/console/i18n/message.properties |   18 -
 .../resources/console/i18n/message_en.properties   |  195 -
 .../resources/console/i18n/message_zh.properties   |  195 -
 .../src/main/resources/console/index.html          |  319 -
 .../console/js/global/event_trace_data_source.js   |  268 -
 .../resources/console/js/global/registry_center.js |  250 -
 .../console/js/history/job_event_trace_history.js  |   67 -
 .../console/js/history/job_status_history.js       |   79 -
 .../src/main/resources/console/js/index.js         |   47 -
 .../resources/console/js/status/job/job_config.js  |  160 -
 .../console/js/status/job/job_status_detail.js     |  113 -
 .../console/js/status/job/jobs_status_overview.js  |  242 -
 .../js/status/server/server_status_detail.js       |  155 -
 .../js/status/server/servers_status_overview.js    |  159 -
 .../src/main/resources/console/js/util/common.js   |  136 -
 .../main/resources/console/js/util/dashboard.js    |  249 -
 .../main/resources/console/js/util/formatter.js    |   59 -
 .../console/lib/AdminLTE/css/AdminLTE.min.css      |    7 -
 .../lib/AdminLTE/css/skins/_all-skins.min.css      |    1 -
 .../resources/console/lib/AdminLTE/js/app.min.js   |   13 -
 .../BootstrapValidator/js/bootstrapValidator.js    | 7823 --------------------
 .../js/bootstrapValidator_zh_CN.js                 |  387 -
 .../console/lib/bootstrap-table/bootstrap-table.js | 3128 --------
 .../lib/bootstrap-table/bootstrap-table.min.css    |  288 -
 .../lib/bootstrap/css/bootstrap-theme.min.css      |    5 -
 .../console/lib/bootstrap/css/bootstrap.min.css    |    5 -
 .../fonts/glyphicons-halflings-regular.eot         |  Bin 20127 -> 0 bytes
 .../fonts/glyphicons-halflings-regular.svg         |  288 -
 .../fonts/glyphicons-halflings-regular.ttf         |  Bin 45404 -> 0 bytes
 .../fonts/glyphicons-halflings-regular.woff        |  Bin 23424 -> 0 bytes
 .../fonts/glyphicons-halflings-regular.woff2       |  Bin 18028 -> 0 bytes
 .../console/lib/bootstrap/js/bootstrap.min.js      |    7 -
 .../lib/daterangepicker/daterangepicker.css        |  286 -
 .../console/lib/daterangepicker/daterangepicker.js | 1631 ----
 .../console/lib/daterangepicker/moment.min.js      |    7 -
 .../font-awesome-4.5.0/css/font-awesome.min.css    |    4 -
 .../lib/font-awesome-4.5.0/fonts/FontAwesome.otf   |  Bin 109688 -> 0 bytes
 .../fonts/fontawesome-webfont.eot                  |  Bin 70807 -> 0 bytes
 .../fonts/fontawesome-webfont.svg                  |  655 --
 .../fonts/fontawesome-webfont.ttf                  |  Bin 142072 -> 0 bytes
 .../fonts/fontawesome-webfont.woff                 |  Bin 83588 -> 0 bytes
 .../fonts/fontawesome-webfont.woff2                |  Bin 66624 -> 0 bytes
 .../input-mask/jquery.inputmask.date.extensions.js |  495 --
 .../lib/input-mask/jquery.inputmask.extensions.js  |  129 -
 .../console/lib/input-mask/jquery.inputmask.js     | 1636 ----
 .../jquery.inputmask.numeric.extensions.js         |  184 -
 .../jquery.inputmask.phone.extensions.js           |   47 -
 .../jquery.inputmask.regex.extensions.js           |  175 -
 .../lib/input-mask/phone-codes/phone-be.json       |   45 -
 .../lib/input-mask/phone-codes/phone-codes.json    |  294 -
 .../console/lib/input-mask/phone-codes/readme.txt  |    1 -
 .../console/lib/jquery/jquery-2.1.4.min.js         |    4 -
 .../lib/jquery/jquery.i18n.properties-min.js       |    9 -
 .../src/main/resources/log4j.properties            |   21 -
 .../src/main/resources/logback.xml                 |   75 -
 .../console/dao/search/RDBJobEventSearchTest.java  |  217 -
 .../search/RDBJobEventSearchTestConfiguration.java |   70 -
 .../statistics/rdb/RDBStatisticRepositoryTest.java |  175 -
 .../lite/console/util/HomeFolderUtilsTest.java     |   35 -
 elasticjob-lite/pom.xml                            |    1 -
 139 files changed, 25997 deletions(-)

diff --git a/elasticjob-lite/elasticjob-lite-console/.dockerignore b/elasticjob-lite/elasticjob-lite-console/.dockerignore
deleted file mode 100644
index ac9822c..0000000
--- a/elasticjob-lite/elasticjob-lite-console/.dockerignore
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-*
-!target/elasticjob-lite-console-*-console-bin.tar.gz
diff --git a/elasticjob-lite/elasticjob-lite-console/Dockerfile b/elasticjob-lite/elasticjob-lite-console/Dockerfile
deleted file mode 100644
index 535790f..0000000
--- a/elasticjob-lite/elasticjob-lite-console/Dockerfile
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-FROM adoptopenjdk:8-jre-hotspot
-CMD bin/start.sh -p $CONSOLE_PORT
-ENV CONSOLE_PORT=8899
-ADD target/elasticjob-lite-console-*.tar.gz /
-RUN mv $(ls -d /elasticjob-lite-console-*) /elasticjob-lite-console
-WORKDIR /elasticjob-lite-console
diff --git a/elasticjob-lite/elasticjob-lite-console/README.md b/elasticjob-lite/elasticjob-lite-console/README.md
deleted file mode 100644
index 6181cf9..0000000
--- a/elasticjob-lite/elasticjob-lite-console/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# ElasticJob-Lite Console
-
-Usage:
-1. Execute `mvn install`.
-2. Extract `elasticjob-lite-console/target/elasticjob-lite-console-${version}.tar.gz` and goto the extracted directory.
-3. Add JDBC Driver (Such as `mysql-connector-java-8.0.13.jar`) to directory `ext-lib`.
-4. Run ElasticJob-Lite Console with `bin/start.sh`
diff --git a/elasticjob-lite/elasticjob-lite-console/pom.xml b/elasticjob-lite/elasticjob-lite-console/pom.xml
deleted file mode 100644
index dff1b34..0000000
--- a/elasticjob-lite/elasticjob-lite-console/pom.xml
+++ /dev/null
@@ -1,149 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<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">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.apache.shardingsphere.elasticjob</groupId>
-        <artifactId>elasticjob-lite</artifactId>
-        <version>3.0.0-alpha-SNAPSHOT</version>
-    </parent>
-    <artifactId>elasticjob-lite-console</artifactId>
-    <packaging>jar</packaging>
-    <name>${project.artifactId}</name>
-    
-    <properties>
-        <spring-boot.version>2.3.1.RELEASE</spring-boot.version>
-        <springframework.version>5.2.7.RELEASE</springframework.version>
-    </properties>
-    
-    <dependencies>
-        <dependency>
-            <groupId>org.apache.shardingsphere.elasticjob</groupId>
-            <artifactId>elasticjob-lite-lifecycle</artifactId>
-            <version>${project.parent.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <version>${spring-boot.version}</version>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-            <version>${springframework.version}</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-web</artifactId>
-            <version>${springframework.version}</version>
-            <scope>compile</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-webmvc</artifactId>
-            <version>${springframework.version}</version>
-            <scope>compile</scope>
-            <exclusions>
-                <exclusion>
-                    <artifactId>spring-web</artifactId>
-                    <groupId>org.springframework</groupId>
-                </exclusion>
-                <exclusion>
-                    <artifactId>spring-context</artifactId>
-                    <groupId>org.springframework</groupId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>jcl-over-slf4j</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>log4j-over-slf4j</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>commons-dbcp</groupId>
-            <artifactId>commons-dbcp</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
-            <scope>compile</scope>
-        </dependency>
-    </dependencies>
-    
-    <build>
-        <resources>
-            <resource>
-               <directory>src/main/resources</directory>
-               <excludes>
-                   <exclude>bin/*</exclude>
-                   <exclude>assembly/*</exclude>
-               </excludes>
-            </resource>
-        </resources>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <configuration>
-                    <descriptors>
-                        <descriptor>src/main/resources/assembly/assembly.xml</descriptor>
-                    </descriptors>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>console-bin</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/ConsoleBootstrap.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/ConsoleBootstrap.java
deleted file mode 100644
index c7798c7..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/ConsoleBootstrap.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-/**
- * Console bootstrap.
- */
-@SpringBootApplication
-public class ConsoleBootstrap {
-    
-    /**
-     * Startup RESTful server.
-     *
-     * @param args arguments
-     */
-    //CHECKSTYLE:OFF
-    public static void main(final String[] args) {
-    //CHECKSTYLE:ON
-        SpringApplication.run(ConsoleBootstrap.class, args);
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/DynamicDataSourceConfig.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/DynamicDataSourceConfig.java
deleted file mode 100644
index cfcfe57..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/DynamicDataSourceConfig.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.config;
-
-import org.apache.commons.dbcp.BasicDataSource;
-import org.springframework.boot.jdbc.DataSourceBuilder;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Primary;
-import org.springframework.core.env.Environment;
-import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
-
-import javax.sql.DataSource;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Dynamic datasource config.
- */
-@Configuration
-public class DynamicDataSourceConfig {
-    
-    public static final String DRIVER_CLASS_NAME = "spring.datasource.default.driver-class-name";
-    
-    public static final String DATASOURCE_URL = "spring.datasource.default.url";
-    
-    public static final String DATASOURCE_USERNAME = "spring.datasource.default.username";
-    
-    public static final String DATASOURCE_PASSWORD = "spring.datasource.default.password";
-    
-    public static final String DEFAULT_DATASOURCE_NAME = "default";
-    
-    /**
-     * Declare dynamicDataSource instead of default dataSource.
-     * @param environment spring environment
-     * @return A subClass of AbstractRoutingDataSource
-     */
-    @Bean(name = "dynamicDataSource")
-    @Primary
-    public DynamicDataSource dynamicDataSource(final Environment environment) {
-        DataSource defaultDataSource = createDefaultDataSource(environment);
-        DynamicDataSource dynamicDataSource = new DynamicDataSource();
-        dynamicDataSource.addDataSource(DEFAULT_DATASOURCE_NAME, defaultDataSource);
-        dynamicDataSource.setDefaultTargetDataSource(defaultDataSource);
-        return dynamicDataSource;
-    }
-    
-    private DataSource createDefaultDataSource(final Environment environment) {
-        String driverName = environment.getProperty(DRIVER_CLASS_NAME);
-        String url = environment.getProperty(DATASOURCE_URL);
-        String username = environment.getProperty(DATASOURCE_USERNAME);
-        String password = environment.getProperty(DATASOURCE_PASSWORD);
-        return DataSourceBuilder.create().driverClassName(driverName).type(BasicDataSource.class).url(url)
-            .username(username).password(password).build();
-    }
-    
-    public static class DynamicDataSource extends AbstractRoutingDataSource {
-        
-        private final Map<Object, Object> dataSourceMap = new HashMap<>(10);
-        
-        @Override
-        protected Object determineCurrentLookupKey() {
-            return DynamicDataSourceContextHolder.getDataSourceName();
-        }
-        
-        /**
-         * Add a data source.
-         * 
-         * @param dataSourceName data source name
-         * @param dataSource data source
-         */
-        public void addDataSource(final String dataSourceName, final DataSource dataSource) {
-            dataSourceMap.put(dataSourceName, dataSource);
-            setTargetDataSources(dataSourceMap);
-            afterPropertiesSet();
-        }
-    }
-    
-    public static class DynamicDataSourceContextHolder {
-        
-        private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
-        
-        /**
-         * Get the specify dataSource.
-         * 
-         * @return data source name
-         */
-        public static String getDataSourceName() {
-            return CONTEXT_HOLDER.get();
-        }
-        
-        /**
-         * Specify a dataSource.
-         * 
-         * @param dataSourceName data source name
-         */
-        public static void setDataSourceName(final String dataSourceName) {
-            CONTEXT_HOLDER.set(dataSourceName);
-        }
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/FilterRegisterConfig.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/FilterRegisterConfig.java
deleted file mode 100644
index 1a0fc8d..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/FilterRegisterConfig.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.config;
-
-import org.apache.shardingsphere.elasticjob.lite.console.filter.GlobalConfigurationFilter;
-import org.apache.shardingsphere.elasticjob.lite.console.security.UserAuthenticationService;
-import org.apache.shardingsphere.elasticjob.lite.console.security.WwwAuthFilter;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.web.servlet.FilterRegistrationBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import javax.servlet.DispatcherType;
-import java.util.EnumSet;
-
-/**
- * Filter register config.
- **/
-@Configuration
-public class FilterRegisterConfig {
-    
-    private UserAuthenticationService userAuthenticationService;
-    
-    @Autowired
-    public FilterRegisterConfig(final UserAuthenticationService userAuthenticationService) {
-        this.userAuthenticationService = userAuthenticationService;
-    }
-    
-    /**
-     * register global configuration filter.
-     *
-     * @return global configuration filter bean
-     */
-    @Bean
-    public FilterRegistrationBean<GlobalConfigurationFilter> globalConfigurationFilter() {
-        GlobalConfigurationFilter globalConfigurationFilter = new GlobalConfigurationFilter();
-        FilterRegistrationBean<GlobalConfigurationFilter> registration = new FilterRegistrationBean<>();
-        registration.setFilter(globalConfigurationFilter);
-        registration.addUrlPatterns("*.html");
-        registration.setDispatcherTypes(EnumSet.of(DispatcherType.REQUEST));
-        return registration;
-    }
-    
-    /**
-     * register www auth filter.
-     *
-     * @return www auth filter bean
-     */
-    @Bean
-    public FilterRegistrationBean<WwwAuthFilter> wwwAuthFilter() {
-        WwwAuthFilter wwwAuthFilter = new WwwAuthFilter();
-        wwwAuthFilter.setUserAuthenticationService(userAuthenticationService);
-        FilterRegistrationBean<WwwAuthFilter> registration = new FilterRegistrationBean<>();
-        registration.setFilter(wwwAuthFilter);
-        registration.addUrlPatterns("/");
-        registration.addUrlPatterns("*.html");
-        registration.setDispatcherTypes(EnumSet.of(DispatcherType.REQUEST));
-        return registration;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/WebMvcConfig.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/WebMvcConfig.java
deleted file mode 100644
index b1e7cdb..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/WebMvcConfig.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.config;
-
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.method.HandlerTypePredicate;
-import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
-import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
-import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-/**
- * Web mvc config.
- **/
-@Configuration
-public class WebMvcConfig implements WebMvcConfigurer {
-    
-    @Override
-    public void configurePathMatch(final PathMatchConfigurer configurer) {
-        HandlerTypePredicate handlerTypePredicate = HandlerTypePredicate.forAnnotation(RestController.class);
-        configurer.addPathPrefix("/api", handlerTypePredicate);
-    }
-    
-    @Override
-    public void addResourceHandlers(final ResourceHandlerRegistry registry) {
-        registry.addResourceHandler("/**").addResourceLocations("classpath:/console/");
-    }
-    
-    @Override
-    public void addViewControllers(final ViewControllerRegistry registry) {
-        registry.addViewController("/").setViewName("/index.html");
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/advice/ConsoleRestControllerAdvice.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/advice/ConsoleRestControllerAdvice.java
deleted file mode 100644
index c70f6a9..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/config/advice/ConsoleRestControllerAdvice.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.config.advice;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.elasticjob.infra.exception.ExceptionUtils;
-import org.springframework.core.MethodParameter;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.http.converter.HttpMessageConverter;
-import org.springframework.http.server.ServerHttpRequest;
-import org.springframework.http.server.ServerHttpResponse;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
-import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
-
-/**
- * Console rest controller advice.
- **/
-@RestControllerAdvice
-@Slf4j
-public final class ConsoleRestControllerAdvice implements ResponseBodyAdvice<Object> {
-    
-    @Override
-    public boolean supports(final MethodParameter returnType, final Class<? extends HttpMessageConverter<?>> converterType) {
-        //only advice return void method.
-        if (null == returnType.getMethod()) {
-            return false;
-        }
-        return void.class.isAssignableFrom(returnType.getMethod().getReturnType());
-    }
-    
-    @Override
-    public Object beforeBodyWrite(final Object body, final MethodParameter returnType, final MediaType selectedContentType,
-                                  final Class<? extends HttpMessageConverter<?>> selectedConverterType, final ServerHttpRequest request, final ServerHttpResponse response) {
-        //if the method return void, then the value is true and returns.
-        return null == body ? true : body;
-    }
-    
-    /**
-     * Handle exception.
-     *
-     * @param ex exception
-     * @return response result
-     */
-    @ExceptionHandler(Exception.class)
-    public ResponseEntity<String> toResponse(final Exception ex) {
-        log.error("CONSOLE ERROR", ex);
-        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ExceptionUtils.transform(ex));
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/EventTraceDataSourceController.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/EventTraceDataSourceController.java
deleted file mode 100644
index d416fc9..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/EventTraceDataSourceController.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.controller;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.EventTraceDataSourceConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.EventTraceDataSourceFactory;
-import org.apache.shardingsphere.elasticjob.lite.console.service.EventTraceDataSourceConfigurationService;
-import org.apache.shardingsphere.elasticjob.lite.console.util.SessionEventTraceDataSourceConfiguration;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import java.util.Collection;
-
-/**
- * Event trace data source RESTful API.
- */
-@RestController
-@RequestMapping("/data-source")
-public final class EventTraceDataSourceController {
-    
-    public static final String DATA_SOURCE_CONFIG_KEY = "data_source_config_key";
-    
-    private EventTraceDataSourceConfigurationService eventTraceDataSourceConfigurationService;
-    
-    @Autowired
-    public EventTraceDataSourceController(final EventTraceDataSourceConfigurationService eventTraceDataSourceConfigurationService) {
-        this.eventTraceDataSourceConfigurationService = eventTraceDataSourceConfigurationService;
-    }
-    
-    /**
-     * Judge whether event trace data source is activated.
-     *
-     * @param request HTTP request
-     * @return event trace data source is activated or not
-     */
-    @GetMapping("/activated")
-    public boolean activated(@Context final HttpServletRequest request) {
-        return eventTraceDataSourceConfigurationService.loadActivated().isPresent();
-    }
-    
-    /**
-     * Load event trace data source configuration.
-     *
-     * @param request HTTP request
-     * @return event trace data source configurations
-     */
-    @GetMapping(produces = MediaType.APPLICATION_JSON)
-    public Collection<EventTraceDataSourceConfiguration> load(@Context final HttpServletRequest request) {
-        eventTraceDataSourceConfigurationService.loadActivated().ifPresent(eventTraceDataSourceConfig -> setDataSourceNameToSession(eventTraceDataSourceConfig, request.getSession()));
-        return eventTraceDataSourceConfigurationService.loadAll().getEventTraceDataSourceConfiguration();
-    }
-    
-    /**
-     * Add event trace data source configuration.
-     *
-     * @param config event trace data source configuration
-     * @return success to added or not
-     */
-    @PostMapping(produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
-    public boolean add(@RequestBody final EventTraceDataSourceConfiguration config) {
-        return eventTraceDataSourceConfigurationService.add(config);
-    }
-    
-    /**
-     * Delete event trace data source configuration.
-     *
-     * @param config event trace data source configuration
-     */
-    @DeleteMapping(consumes = MediaType.APPLICATION_JSON)
-    public void delete(@RequestBody final EventTraceDataSourceConfiguration config) {
-        eventTraceDataSourceConfigurationService.delete(config.getName());
-    }
-    
-    /**
-     * Test event trace data source connection.
-     *
-     * @param config  event trace data source configuration
-     * @param request HTTP request
-     * @return success or not
-     */
-    @PostMapping(value = "/connectTest", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
-    public boolean connectTest(@RequestBody final EventTraceDataSourceConfiguration config, @Context final HttpServletRequest request) {
-        return setDataSourceNameToSession(config, request.getSession());
-    }
-    
-    /**
-     * Connect event trace data source.
-     *
-     * @param config  event trace data source
-     * @param request HTTP request
-     * @return success or not
-     */
-    @PostMapping(value = "/connect", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
-    public boolean connect(@RequestBody final EventTraceDataSourceConfiguration config, @Context final HttpServletRequest request) {
-        boolean isConnected = setDataSourceNameToSession(eventTraceDataSourceConfigurationService.find(config.getName(), eventTraceDataSourceConfigurationService.loadAll()), request.getSession());
-        if (isConnected) {
-            eventTraceDataSourceConfigurationService.load(config.getName());
-        }
-        return isConnected;
-    }
-    
-    private boolean setDataSourceNameToSession(final EventTraceDataSourceConfiguration dataSourceConfig, final HttpSession session) {
-        session.setAttribute(DATA_SOURCE_CONFIG_KEY, dataSourceConfig);
-        try {
-            EventTraceDataSourceFactory.createEventTraceDataSource(dataSourceConfig.getDriver(), dataSourceConfig.getUrl(), dataSourceConfig.getUsername(), dataSourceConfig.getPassword());
-            SessionEventTraceDataSourceConfiguration.setDataSourceConfiguration((EventTraceDataSourceConfiguration) session.getAttribute(DATA_SOURCE_CONFIG_KEY));
-        // CHECKSTYLE:OFF
-        } catch (final Exception ex) {
-        // CHECKSTYLE:ON
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/EventTraceHistoryController.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/EventTraceHistoryController.java
deleted file mode 100644
index 709c4f3..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/EventTraceHistoryController.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.controller;
-
-import org.apache.shardingsphere.elasticjob.lite.console.dto.request.FindJobExecutionEventsRequest;
-import org.apache.shardingsphere.elasticjob.lite.console.dto.request.FindJobStatusTraceEventsRequest;
-import org.apache.shardingsphere.elasticjob.lite.console.dto.response.BasePageResponse;
-import org.apache.shardingsphere.elasticjob.lite.console.service.EventTraceHistoryService;
-import org.apache.shardingsphere.elasticjob.tracing.event.JobExecutionEvent;
-import org.apache.shardingsphere.elasticjob.tracing.event.JobStatusTraceEvent;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.ws.rs.core.MediaType;
-
-/**
- * Event trace history RESTful API.
- */
-@RestController
-@RequestMapping("/event-trace")
-public final class EventTraceHistoryController {
-    
-    @Autowired
-    private EventTraceHistoryService eventTraceHistoryService;
-    
-    /**
-     * Find job execution events.
-     *
-     * @param requestParams query criteria
-     * @return job execution event trace result
-     */
-    @GetMapping(value = "/execution", produces = MediaType.APPLICATION_JSON)
-    public BasePageResponse<JobExecutionEvent> findJobExecutionEvents(final FindJobExecutionEventsRequest requestParams) {
-        Page<JobExecutionEvent> jobExecutionEvents = eventTraceHistoryService.findJobExecutionEvents(requestParams);
-        return BasePageResponse.of(jobExecutionEvents);
-    }
-    
-    /**
-     * Find job status trace events.
-     *
-     * @param requestParams query criteria
-     * @return job status trace result
-     */
-    @GetMapping(value = "/status", produces = MediaType.APPLICATION_JSON, consumes = MediaType.APPLICATION_JSON)
-    public BasePageResponse<JobStatusTraceEvent> findJobStatusTraceEvents(final FindJobStatusTraceEventsRequest requestParams) {
-        Page<JobStatusTraceEvent> jobStatusTraceEvents = eventTraceHistoryService.findJobStatusTraceEvents(requestParams);
-        return BasePageResponse.of(jobStatusTraceEvents);
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java
deleted file mode 100644
index 1c9937e..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobConfigController.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.controller;
-
-import org.apache.shardingsphere.elasticjob.lite.console.service.JobAPIService;
-import org.apache.shardingsphere.elasticjob.infra.pojo.JobConfigurationPOJO;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.ws.rs.core.MediaType;
-
-/**
- * Job configuration RESTful API.
- */
-@RestController
-@RequestMapping("/jobs/config")
-public final class JobConfigController {
-    
-    private JobAPIService jobAPIService;
-    
-    @Autowired
-    public JobConfigController(final JobAPIService jobAPIService) {
-        this.jobAPIService = jobAPIService;
-    }
-    
-    /**
-     * Get job configuration.
-     *
-     * @param jobName job name
-     * @return job configuration
-     */
-    @GetMapping(value = "/{jobName}", produces = MediaType.APPLICATION_JSON)
-    public JobConfigurationPOJO getJobConfig(@PathVariable("jobName") final String jobName) {
-        return jobAPIService.getJobConfigurationAPI().getJobConfiguration(jobName);
-    }
-    
-    /**
-     * Update job configuration.
-     *
-     * @param jobConfiguration job configuration
-     */
-    @PutMapping(consumes = MediaType.APPLICATION_JSON)
-    public void updateJobConfig(@RequestBody final JobConfigurationPOJO jobConfiguration) {
-        jobAPIService.getJobConfigurationAPI().updateJobConfiguration(jobConfiguration);
-    }
-    
-    /**
-     * Remove job configuration.
-     *
-     * @param jobName job name
-     */
-    @DeleteMapping("/{jobName}")
-    public void removeJob(@PathVariable("jobName") final String jobName) {
-        jobAPIService.getJobConfigurationAPI().removeJobConfiguration(jobName);
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobOperationController.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobOperationController.java
deleted file mode 100644
index f1bb7a7..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/JobOperationController.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.controller;
-
-import org.apache.shardingsphere.elasticjob.lite.console.service.JobAPIService;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobBriefInfo;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.ShardingInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.ws.rs.core.MediaType;
-import java.util.Collection;
-
-/**
- * Job operation RESTful API.
- */
-@RestController
-@RequestMapping("/jobs")
-public final class JobOperationController {
-    
-    private JobAPIService jobAPIService;
-    
-    @Autowired
-    public JobOperationController(final JobAPIService jobAPIService) {
-        this.jobAPIService = jobAPIService;
-    }
-    
-    /**
-     * Get jobs total count.
-     * 
-     * @return jobs total count
-     */
-    @GetMapping("/count")
-    public int getJobsTotalCount() {
-        return jobAPIService.getJobStatisticsAPI().getJobsTotalCount();
-    }
-    
-    /**
-     * Get all jobs brief info.
-     * 
-     * @return all jobs brief info
-     */
-    @GetMapping(produces = MediaType.APPLICATION_JSON)
-    public Collection<JobBriefInfo> getAllJobsBriefInfo() {
-        return jobAPIService.getJobStatisticsAPI().getAllJobsBriefInfo();
-    }
-    
-    /**
-     * Trigger job.
-     * 
-     * @param jobName job name
-     */
-    @PostMapping("/{jobName}/trigger")
-    public void triggerJob(@PathVariable("jobName") final String jobName) {
-        jobAPIService.getJobOperatorAPI().trigger(jobName);
-    }
-    
-    /**
-     * Disable job.
-     * 
-     * @param jobName job name
-     */
-    @PostMapping(value = "/{jobName}/disable")
-    public void disableJob(@PathVariable("jobName") final String jobName) {
-        jobAPIService.getJobOperatorAPI().disable(jobName, null);
-    }
-    
-    /**
-     * Enable job.
-     *
-     * @param jobName job name
-     */
-    @PostMapping(value = "/{jobName}/enable")
-    public void enableJob(@PathVariable("jobName") final String jobName) {
-        jobAPIService.getJobOperatorAPI().enable(jobName, null);
-    }
-    
-    /**
-     * Shutdown job.
-     * 
-     * @param jobName job name
-     */
-    @PostMapping(value = "/{jobName}/shutdown")
-    public void shutdownJob(@PathVariable("jobName") final String jobName) {
-        jobAPIService.getJobOperatorAPI().shutdown(jobName, null);
-    }
-    
-    /**
-     * Get sharding info.
-     * 
-     * @param jobName job name
-     * @return sharding info
-     */
-    @GetMapping(value = "/{jobName}/sharding", produces = MediaType.APPLICATION_JSON)
-    public Collection<ShardingInfo> getShardingInfo(@PathVariable("jobName") final String jobName) {
-        return jobAPIService.getShardingStatisticsAPI().getShardingInfo(jobName);
-    }
-    
-    /**
-     * Disable sharding.
-     *
-     * @param jobName job name
-     * @param item sharding item
-     */
-    @PostMapping(value = "/{jobName}/sharding/{item}/disable")
-    public void disableSharding(@PathVariable("jobName") final String jobName, @PathVariable("item") final String item) {
-        jobAPIService.getShardingOperateAPI().disable(jobName, item);
-    }
-    
-    /**
-     * Enable sharding.
-     *
-     * @param jobName job name
-     * @param item sharding item
-     */
-    @PostMapping(value = "/{jobName}/sharding/{item}/enable")
-    public void enableSharding(@PathVariable("jobName") final String jobName, @PathVariable("item") final String item) {
-        jobAPIService.getShardingOperateAPI().enable(jobName, item);
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/RegistryCenterController.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/RegistryCenterController.java
deleted file mode 100644
index 8ff766a..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/RegistryCenterController.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.controller;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.RegistryCenterConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.service.RegistryCenterConfigurationService;
-import org.apache.shardingsphere.elasticjob.lite.console.util.SessionRegistryCenterConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.reg.RegistryCenterFactory;
-import org.apache.shardingsphere.elasticjob.reg.exception.RegException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import java.util.Collection;
-
-/**
- * Registry center RESTful API.
- */
-@RestController
-@RequestMapping("/registry-center")
-public final class RegistryCenterController {
-    
-    public static final String REG_CENTER_CONFIG_KEY = "reg_center_config_key";
-    
-    private RegistryCenterConfigurationService regCenterService;
-    
-    @Autowired
-    public RegistryCenterController(final RegistryCenterConfigurationService regCenterService) {
-        this.regCenterService = regCenterService;
-    }
-    
-    /**
-     * Judge whether registry center is activated.
-     *
-     * @return registry center is activated or not
-     */
-    @GetMapping("/activated")
-    public boolean activated() {
-        return regCenterService.loadActivated().isPresent();
-    }
-    
-    /**
-     * Load configuration from registry center.
-     *
-     * @param request HTTP request
-     * @return registry center configurations
-     */
-    @GetMapping(produces = MediaType.APPLICATION_JSON)
-    public Collection<RegistryCenterConfiguration> load(final HttpServletRequest request) {
-        regCenterService.loadActivated().ifPresent(regCenterConfig -> setRegistryCenterNameToSession(regCenterConfig, request.getSession()));
-        return regCenterService.loadAll().getRegistryCenterConfiguration();
-    }
-    
-    /**
-     * Add registry center.
-     *
-     * @param config registry center configuration
-     * @return success to add or not
-     */
-    @PostMapping(produces = MediaType.APPLICATION_JSON)
-    public boolean add(@RequestBody final RegistryCenterConfiguration config) {
-        return regCenterService.add(config);
-    }
-    
-    /**
-     * Delete registry center.
-     *
-     * @param config registry center configuration
-     */
-    @DeleteMapping(consumes = MediaType.APPLICATION_JSON)
-    public void delete(@RequestBody final RegistryCenterConfiguration config) {
-        regCenterService.delete(config.getName());
-    }
-    
-    /**
-     * Connect to registry center.
-     *
-     * @param config  config of registry center
-     * @param request HTTP request
-     * @return connected or not
-     */
-    @PostMapping(value = "/connect", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON)
-    public boolean connect(@RequestBody final RegistryCenterConfiguration config, @Context final HttpServletRequest request) {
-        boolean isConnected = setRegistryCenterNameToSession(regCenterService.find(config.getName(), regCenterService.loadAll()), request.getSession());
-        if (isConnected) {
-            regCenterService.load(config.getName());
-        }
-        return isConnected;
-    }
-    
-    private boolean setRegistryCenterNameToSession(final RegistryCenterConfiguration regCenterConfig, final HttpSession session) {
-        session.setAttribute(REG_CENTER_CONFIG_KEY, regCenterConfig);
-        try {
-            RegistryCenterFactory.createCoordinatorRegistryCenter(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
-            SessionRegistryCenterConfiguration.setRegistryCenterConfiguration((RegistryCenterConfiguration) session.getAttribute(REG_CENTER_CONFIG_KEY));
-        } catch (final RegException ex) {
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/ServerOperationController.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/ServerOperationController.java
deleted file mode 100644
index 508635a..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/controller/ServerOperationController.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.controller;
-
-import org.apache.shardingsphere.elasticjob.lite.console.service.JobAPIService;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.JobBriefInfo;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.domain.ServerBriefInfo;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.ws.rs.core.MediaType;
-import java.util.Collection;
-
-/**
- * Server operation RESTful API.
- */
-@RestController
-@RequestMapping("/servers")
-public final class ServerOperationController {
-    
-    private JobAPIService jobAPIService;
-    
-    @Autowired
-    public ServerOperationController(final JobAPIService jobAPIService) {
-        this.jobAPIService = jobAPIService;
-    }
-    
-    /**
-     * Get servers total count.
-     * 
-     * @return servers total count
-     */
-    @GetMapping("/count")
-    public int getServersTotalCount() {
-        return jobAPIService.getServerStatisticsAPI().getServersTotalCount();
-    }
-    
-    /**
-     * Get all servers brief info.
-     * 
-     * @return all servers brief info
-     */
-    @GetMapping(produces = MediaType.APPLICATION_JSON)
-    public Collection<ServerBriefInfo> getAllServersBriefInfo() {
-        return jobAPIService.getServerStatisticsAPI().getAllServersBriefInfo();
-    }
-    
-    /**
-     * Disable server.
-     *
-     * @param serverIp server IP address
-     */
-    @PostMapping("/{serverIp}/disable")
-    public void disableServer(@PathVariable("serverIp") final String serverIp) {
-        jobAPIService.getJobOperatorAPI().disable(null, serverIp);
-    }
-    
-    /**
-     * Enable server.
-     *
-     * @param serverIp server IP address
-     */
-    @PostMapping("/{serverIp}/enable")
-    public void enableServer(@PathVariable("serverIp") final String serverIp) {
-        jobAPIService.getJobOperatorAPI().enable(null, serverIp);
-    }
-    
-    /**
-     * Shutdown server.
-     *
-     * @param serverIp server IP address
-     */
-    @PostMapping("/{serverIp}/shutdown")
-    public void shutdownServer(@PathVariable("serverIp") final String serverIp) {
-        jobAPIService.getJobOperatorAPI().shutdown(null, serverIp);
-    }
-    
-    /**
-     * Remove server.
-     *
-     * @param serverIp server IP address
-     */
-    @DeleteMapping("/{serverIp}")
-    public void removeServer(@PathVariable("serverIp") final String serverIp) {
-        jobAPIService.getJobOperatorAPI().remove(null, serverIp);
-    }
-    
-    /**
-     * Get jobs.
-     *
-     * @param serverIp server IP address
-     * @return Job brief info
-     */
-    @GetMapping(value = "/{serverIp}/jobs", produces = MediaType.APPLICATION_JSON)
-    public Collection<JobBriefInfo> getJobs(@PathVariable("serverIp") final String serverIp) {
-        return jobAPIService.getJobStatisticsAPI().getJobsBriefInfo(serverIp);
-    }
-    
-    /**
-     * Disable server job.
-     * 
-     * @param serverIp server IP address
-     * @param jobName job name
-     */
-    @PostMapping(value = "/{serverIp}/jobs/{jobName}/disable")
-    public void disableServerJob(@PathVariable("serverIp") final String serverIp, @PathVariable("jobName") final String jobName) {
-        jobAPIService.getJobOperatorAPI().disable(jobName, serverIp);
-    }
-    
-    /**
-     * Enable server job.
-     *
-     * @param serverIp server IP address
-     * @param jobName job name
-     */
-    @PostMapping("/{serverIp}/jobs/{jobName}/enable")
-    public void enableServerJob(@PathVariable("serverIp") final String serverIp, @PathVariable("jobName") final String jobName) {
-        jobAPIService.getJobOperatorAPI().enable(jobName, serverIp);
-    }
-    
-    /**
-     * Shutdown server job.
-     *
-     * @param serverIp server IP address
-     * @param jobName job name
-     */
-    @PostMapping("/{serverIp}/jobs/{jobName}/shutdown")
-    public void shutdownServerJob(@PathVariable("serverIp") final String serverIp, @PathVariable("jobName") final String jobName) {
-        jobAPIService.getJobOperatorAPI().shutdown(jobName, serverIp);
-    }
-    
-    /**
-     * Remove server job.
-     *
-     * @param serverIp server IP address
-     * @param jobName job name
-     */
-    @DeleteMapping("/{serverIp}/jobs/{jobName}")
-    public void removeServerJob(@PathVariable("serverIp") final String serverIp, @PathVariable("jobName") final String jobName) {
-        jobAPIService.getJobOperatorAPI().remove(jobName, serverIp);
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/search/JobExecutionLogRepository.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/search/JobExecutionLogRepository.java
deleted file mode 100644
index 7e0d8f8..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/search/JobExecutionLogRepository.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dao.search;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.JobExecutionLog;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-
-public interface JobExecutionLogRepository extends JpaRepository<JobExecutionLog, String>, JpaSpecificationExecutor<JobExecutionLog> {
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/search/JobStatusTraceLogRepository.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/search/JobStatusTraceLogRepository.java
deleted file mode 100644
index 302c4d9..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/search/JobStatusTraceLogRepository.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dao.search;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.JobStatusTraceLog;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-
-public interface JobStatusTraceLogRepository extends JpaRepository<JobStatusTraceLog, String>, JpaSpecificationExecutor<JobStatusTraceLog> {
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/JobRegisterStatisticsRepository.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/JobRegisterStatisticsRepository.java
deleted file mode 100644
index 873d35a..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/JobRegisterStatisticsRepository.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dao.statistics;
-
-import java.util.Date;
-import java.util.List;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.JobRegisterStatistics;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-import org.springframework.stereotype.Repository;
-
-/**
- * Job register statistics repository.
- */
-@Repository
-public interface JobRegisterStatisticsRepository extends JpaRepository<JobRegisterStatistics, Long> {
-    
-    /**
-     * Find job register statistics.
-     *
-     * @param fromTime from date to statistics
-     * @return job register statistics
-     */
-    @Query("FROM JobRegisterStatistics WHERE statisticsTime >= :fromTime")
-    List<JobRegisterStatistics> findJobRegisterStatistics(@Param("fromTime") Date fromTime);
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/JobRunningStatisticsRepository.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/JobRunningStatisticsRepository.java
deleted file mode 100644
index 057ba38..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/JobRunningStatisticsRepository.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dao.statistics;
-
-import java.util.Date;
-import java.util.List;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.JobRunningStatistics;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-import org.springframework.stereotype.Repository;
-
-/**
- * Job running statistics repository.
- */
-@Repository
-public interface JobRunningStatisticsRepository extends JpaRepository<JobRunningStatistics, Long> {
-    
-    /**
-     * Find job running statistics.
-     *
-     * @param fromTime from date to statistics
-     * @return job running statistics
-     */
-    @Query("FROM JobRunningStatistics WHERE statisticsTime >= :fromTime")
-    List<JobRunningStatistics> findJobRunningStatistics(@Param("fromTime") Date fromTime);
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/StatisticInterval.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/StatisticInterval.java
deleted file mode 100644
index 8342bb7..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/StatisticInterval.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dao.statistics;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-/**
- * Statistic interval.
- */
-@Getter
-@RequiredArgsConstructor
-public enum StatisticInterval {
-    
-    MINUTE("0 * * * * ?"),
-    
-    HOUR("0 0 * * * ?"), 
-    
-    DAY("0 0 0 * * ?");
-    
-    private final String cron;
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/TaskResultStatisticsRepository.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/TaskResultStatisticsRepository.java
deleted file mode 100644
index 837fbf9..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/TaskResultStatisticsRepository.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dao.statistics;
-
-import java.util.Date;
-import java.util.List;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.TaskResultStatistics;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-import org.springframework.stereotype.Repository;
-
-/**
- * Task result statistics repository.
- */
-@Repository
-public interface TaskResultStatisticsRepository extends JpaRepository<TaskResultStatistics, Long> {
-    
-    /**
-     * Find task result statistics.
-     *
-     * @param fromTime from date to statistics
-     * @param statisticInterval statistic interval
-     * @return task result statistics
-     */
-    @Query("FROM TaskResultStatistics WHERE statisticInterval = :statisticInterval AND statisticsTime >= :fromTime ORDER BY id ASC")
-    List<TaskResultStatistics> findTaskResultStatistics(@Param("fromTime") Date fromTime, @Param("statisticInterval") String statisticInterval);
-    
-    /**
-     * Get summed task result statistics.
-     *
-     * @param fromTime from date to statistics
-     * @param statisticInterval statistic interval
-     * @return summed task result statistics
-     */
-    @Query("SELECT new TaskResultStatistics(SUM(successCount), SUM(failedCount)) FROM TaskResultStatistics WHERE "
-        + "statisticInterval = :statisticInterval AND statisticsTime >= :fromTime")
-    TaskResultStatistics getSummedTaskResultStatistics(@Param("fromTime") Date fromTime, @Param("statisticInterval") String statisticInterval);
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/TaskRunningStatisticsRepository.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/TaskRunningStatisticsRepository.java
deleted file mode 100644
index 6302c80..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/TaskRunningStatisticsRepository.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dao.statistics;
-
-import java.util.Date;
-import java.util.List;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.TaskRunningStatistics;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-import org.springframework.stereotype.Repository;
-
-/**
- * Task running statistics repository.
- */
-@Repository
-public interface TaskRunningStatisticsRepository extends JpaRepository<TaskRunningStatistics, Long> {
-    
-    /**
-     * Find task running statistics.
-     *
-     * @param fromTime from date to statistics
-     * @return Task running statistics
-     */
-    @Query("FROM TaskRunningStatistics where statisticsTime >= :fromTime")
-    List<TaskRunningStatistics> findTaskRunningStatistics(@Param("fromTime") Date fromTime);
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/type/job/JobExecutionTypeStatistics.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/type/job/JobExecutionTypeStatistics.java
deleted file mode 100644
index 3905f9c..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/type/job/JobExecutionTypeStatistics.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dao.statistics.type.job;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * Job execution type statistics.
- */
-@Getter
-@AllArgsConstructor
-public final class JobExecutionTypeStatistics {
-    
-    private int transientJobCount;
-    
-    private int daemonJobCount;
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/type/job/JobTypeStatistics.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/type/job/JobTypeStatistics.java
deleted file mode 100644
index ab4d34f..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dao/statistics/type/job/JobTypeStatistics.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dao.statistics.type.job;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-/**
- * Job type statistics.
- */
-@Getter
-@AllArgsConstructor
-public final class JobTypeStatistics {
-    
-    private int scriptJobCount;
-    
-    private int simpleJobCount;
-    
-    private int dataflowJobCount;
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/DataSourceFactory.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/DataSourceFactory.java
deleted file mode 100644
index be9f284..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/DataSourceFactory.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import org.apache.commons.dbcp.BasicDataSource;
-import org.springframework.boot.jdbc.DataSourceBuilder;
-
-import javax.sql.DataSource;
-
-/**
- * Dynamic data source factory.
- */
-public final class DataSourceFactory {
-    
-    /**
-     * Create a DataSource.
-     * @param config event trace data source config
-     * @return data source
-     */
-    public static DataSource createDataSource(final EventTraceDataSourceConfiguration config) {
-        // Determine whether the data source is valid.
-        new EventTraceDataSource(config).init();
-        return DataSourceBuilder.create().type(BasicDataSource.class).driverClassName(config.getDriver()).url(config.getUrl())
-            .username(config.getUsername()).password(config.getPassword()).build();
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSource.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSource.java
deleted file mode 100644
index 06667b8..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSource.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.AccessLevel;
-import lombok.Getter;
-import lombok.extern.slf4j.Slf4j;
-
-import java.sql.DriverManager;
-import java.sql.SQLException;
-
-/**
- * Event tracing data source.
- */
-@Slf4j
-public final class EventTraceDataSource {
-    
-    @Getter(AccessLevel.PROTECTED)
-    private EventTraceDataSourceConfiguration eventTraceDataSourceConfiguration;
-    
-    public EventTraceDataSource(final EventTraceDataSourceConfiguration eventTraceDataSourceConfiguration) {
-        this.eventTraceDataSourceConfiguration = eventTraceDataSourceConfiguration;
-    }
-    
-    /**
-     * Initialize data source.
-     */
-    public void init() {
-        log.debug("Elastic job: data source init, connection url is: {}.", eventTraceDataSourceConfiguration.getUrl());
-        try {
-            Class.forName(eventTraceDataSourceConfiguration.getDriver());
-            DriverManager.getConnection(eventTraceDataSourceConfiguration.getUrl(), eventTraceDataSourceConfiguration.getUsername(), eventTraceDataSourceConfiguration.getPassword());
-        } catch (final ClassNotFoundException | SQLException ex) {
-            throw new RuntimeException(ex);
-        }
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSourceConfiguration.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSourceConfiguration.java
deleted file mode 100644
index 93e3d26..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSourceConfiguration.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.io.Serializable;
-
-/**
- * Event trace data source configuration.
- */
-@NoArgsConstructor
-@Getter
-@Setter
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public final class EventTraceDataSourceConfiguration implements Serializable {
-    
-    private static final long serialVersionUID = -5996257770767863699L;
-    
-    @XmlAttribute(required = true)
-    private String name;
-    
-    @XmlAttribute(required = true)
-    private String driver;
-    
-    @XmlAttribute
-    private String url;
-    
-    @XmlAttribute
-    private String username;
-    
-    @XmlAttribute
-    private String password;
-    
-    @XmlAttribute
-    private boolean activated;
-    
-    public EventTraceDataSourceConfiguration(final String driver, final String url, final String username, final String password) {
-        this.driver = driver;
-        this.url = url;
-        this.username = username;
-        this.password = password;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSourceConfigurations.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSourceConfigurations.java
deleted file mode 100644
index c349776..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSourceConfigurations.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.Getter;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-/**
- * Event trace data source configurations.
- */
-@Getter
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public final class EventTraceDataSourceConfigurations {
-    
-    private Set<EventTraceDataSourceConfiguration> eventTraceDataSourceConfiguration = new LinkedHashSet<>();
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSourceFactory.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSourceFactory.java
deleted file mode 100644
index a5dd6cd..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/EventTraceDataSourceFactory.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Strings;
-import com.google.common.hash.HashCode;
-import com.google.common.hash.Hasher;
-import com.google.common.hash.Hashing;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Event trace data source factory.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class EventTraceDataSourceFactory {
-    
-    private static final ConcurrentHashMap<HashCode, EventTraceDataSource> DATA_SOURCE_REGISTRY = new ConcurrentHashMap<>(); 
-    
-    /**
-     * Create event trace data source.
-     * 
-     * @param driverClassName database driver class name
-     * @param url database URL
-     * @param username database username
-     * @param password database password
-     * @return event trace data source
-     */
-    public static EventTraceDataSource createEventTraceDataSource(final String driverClassName, final String url, final String username, final String password) {
-        Hasher hasher = Hashing.sha256().newHasher().putString(driverClassName, Charsets.UTF_8).putString(url, Charsets.UTF_8);
-        if (!Strings.isNullOrEmpty(username)) {
-            hasher.putString(username, Charsets.UTF_8);
-        }
-        if (null != password) {
-            hasher.putString(password, Charsets.UTF_8);
-        }
-        HashCode hashCode = hasher.hash();
-        EventTraceDataSource result = DATA_SOURCE_REGISTRY.get(hashCode);
-        if (null != result) {
-            return result;
-        }
-        EventTraceDataSourceConfiguration eventTraceDataSourceConfiguration = new EventTraceDataSourceConfiguration(driverClassName, url, username, password);
-        result = new EventTraceDataSource(eventTraceDataSourceConfiguration);
-        result.init();
-        DATA_SOURCE_REGISTRY.put(hashCode, result);
-        return result;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/GlobalConfiguration.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/GlobalConfiguration.java
deleted file mode 100644
index 31e2dc4..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/GlobalConfiguration.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-
-/**
- * Global configuration.
- */
-@Getter
-@Setter
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public final class GlobalConfiguration {
-    
-    private RegistryCenterConfigurations registryCenterConfigurations;
-    
-    private EventTraceDataSourceConfigurations eventTraceDataSourceConfigurations;
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobExecutionLog.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobExecutionLog.java
deleted file mode 100644
index af0d520..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobExecutionLog.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.Data;
-import org.apache.shardingsphere.elasticjob.tracing.event.JobExecutionEvent;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import java.util.Date;
-
-@Data
-@Entity(name = "JOB_EXECUTION_LOG")
-public class JobExecutionLog {
-    
-    @Id
-    private String id;
-    
-    @Column(name = "job_name")
-    private String jobName;
-    
-    @Column(name = "task_id")
-    private String taskId;
-    
-    @Column(name = "hostname")
-    private String hostname;
-    
-    @Column(name = "ip")
-    private String ip;
-    
-    @Column(name = "sharding_item")
-    private Integer shardingItem;
-    
-    @Column(name = "execution_source")
-    private String executionSource;
-    
-    @Column(name = "failure_cause")
-    private String failureCause;
-    
-    @Column(name = "is_success")
-    private Boolean isSuccess;
-    
-    @Column(name = "start_time")
-    private Date startTime;
-    
-    @Column(name = "complete_time")
-    private Date completeTime;
-    
-    /**
-     * JobExecutionLog convert to JobExecutionEvent.
-     *
-     * @return JobExecutionEvent entity
-     */
-    public JobExecutionEvent toJobExecutionEvent() {
-        return new JobExecutionEvent(
-                id,
-                hostname,
-                ip,
-                taskId,
-                jobName,
-                JobExecutionEvent.ExecutionSource.valueOf(executionSource),
-                shardingItem,
-                startTime,
-                completeTime,
-                isSuccess,
-                failureCause
-        );
-    }
-    
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobRegisterStatistics.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobRegisterStatistics.java
deleted file mode 100644
index d0d215d..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobRegisterStatistics.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import java.util.Date;
-
-/**
- * Job register statistics.
- */
-@Getter
-@NoArgsConstructor
-@AllArgsConstructor
-@Entity
-@Table(name = "JOB_REGISTER_STATISTICS")
-public final class JobRegisterStatistics {
-    
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    
-    @Column(name = "registered_count", length = 11)
-    private Integer registeredCount;
-    
-    @Column(name = "statistics_time", nullable = false)
-    private Date statisticsTime;
-    
-    @Column(name = "creation_time", nullable = false)
-    private Date creationTime = new Date();
-    
-    public JobRegisterStatistics(final Integer registeredCount, final Date statisticsTime) {
-        this.registeredCount = registeredCount;
-        this.statisticsTime = statisticsTime;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobRunningStatistics.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobRunningStatistics.java
deleted file mode 100644
index c57bb37..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobRunningStatistics.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *  
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import java.util.Date;
-
-/**
- * Job running statistics.
- */
-@Getter
-@NoArgsConstructor
-@AllArgsConstructor
-@Entity
-@Table(name = "JOB_RUNNING_STATISTICS")
-public final class JobRunningStatistics {
-    
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    
-    @Column(name = "running_count", length = 11)
-    private Integer runningCount;
-    
-    @Column(name = "statistics_time", nullable = false)
-    private Date statisticsTime;
-    
-    @Column(name = "creation_time", nullable = false)
-    private Date creationTime = new Date();
-    
-    public JobRunningStatistics(final Integer runningCount, final Date statisticsTime) {
-        this.runningCount = runningCount;
-        this.statisticsTime = statisticsTime;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobStatusTraceLog.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobStatusTraceLog.java
deleted file mode 100644
index 14685be..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/JobStatusTraceLog.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.Data;
-import org.apache.shardingsphere.elasticjob.tracing.event.JobStatusTraceEvent;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import java.util.Date;
-
-@Data
-@Entity(name = "JOB_STATUS_TRACE_LOG")
-public class JobStatusTraceLog {
-    
-    @Id
-    private String id;
-    
-    @Column(name = "job_name")
-    private String jobName;
-    
-    @Column(name = "original_task_id")
-    private String originalTaskId;
-    
-    @Column(name = "task_id")
-    private String taskId;
-    
-    @Column(name = "slave_id")
-    private String slaveId;
-    
-    @Column(name = "source")
-    private String source;
-    
-    @Column(name = "execution_type")
-    private String executionType;
-    
-    @Column(name = "sharding_item")
-    private String shardingItem;
-    
-    @Column(name = "state")
-    private String state;
-    
-    @Column(name = "message")
-    private String message;
-    
-    @Column(name = "creation_time")
-    private Date creationTime;
-    
-    /**
-     * JobStatusTraceLog convert to JobStatusTraceEvent.
-     *
-     * @return JobStatusTraceEvent entity
-     */
-    public JobStatusTraceEvent toJobStatusTraceEvent() {
-        return new JobStatusTraceEvent(
-                id,
-                jobName,
-                originalTaskId,
-                taskId,
-                slaveId,
-                JobStatusTraceEvent.Source.valueOf(source),
-                executionType,
-                shardingItem,
-                JobStatusTraceEvent.State.valueOf(state),
-                message,
-                creationTime
-        );
-    }
-    
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/RegistryCenterConfiguration.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/RegistryCenterConfiguration.java
deleted file mode 100644
index f3a6f86..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/RegistryCenterConfiguration.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.io.Serializable;
-
-/**
- * Registry center configuration.
- */
-@Getter
-@Setter
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-@NoArgsConstructor
-public final class RegistryCenterConfiguration implements Serializable {
-    
-    private static final long serialVersionUID = -5996257770767863699L;
-    
-    @XmlAttribute(required = true)
-    private String name;
-    
-    @XmlAttribute(required = true)
-    private String zkAddressList;
-    
-    @XmlAttribute
-    private String namespace;
-    
-    @XmlAttribute
-    private String digest;
-    
-    @XmlAttribute
-    private boolean activated;
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/RegistryCenterConfigurations.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/RegistryCenterConfigurations.java
deleted file mode 100644
index a3c391f..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/RegistryCenterConfigurations.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.Getter;
-
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlRootElement;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-/**
- * Registry center configurations.
- */
-@Getter
-@XmlRootElement
-@XmlAccessorType(XmlAccessType.FIELD)
-public final class RegistryCenterConfigurations {
-    
-    private Set<RegistryCenterConfiguration> registryCenterConfiguration = new LinkedHashSet<>();
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/TaskResultStatistics.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/TaskResultStatistics.java
deleted file mode 100644
index 1e052b4..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/TaskResultStatistics.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import java.util.Date;
-
-/**
- * Task result statistics.
- */
-@Getter
-@AllArgsConstructor
-@NoArgsConstructor
-@Entity
-@Table(name = "TASK_RESULT_STATISTICS")
-public final class TaskResultStatistics {
-    
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    
-    @Column(name = "success_count", length = 11)
-    private Long successCount;
-    
-    @Column(name = "failed_count", length = 11)
-    private Long failedCount;
-    
-    @Column(name = "statistic_interval", length = 10)
-    private String statisticInterval;
-    
-    @Column(name = "statistics_time", nullable = false)
-    private Date statisticsTime;
-    
-    @Column(name = "creation_time", nullable = false)
-    private Date creationTime = new Date();
-    
-    public TaskResultStatistics(final Long successCount, final Long failedCount) {
-        this.successCount = successCount;
-        this.failedCount = failedCount;
-    }
-    
-    public TaskResultStatistics(final Long successCount, final Long failedCount, final String statisticInterval, final Date statisticsTime) {
-        this.successCount = successCount;
-        this.failedCount = failedCount;
-        this.statisticInterval = statisticInterval;
-        this.statisticsTime = statisticsTime;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/TaskRunningStatistics.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/TaskRunningStatistics.java
deleted file mode 100644
index 56a5db9..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/domain/TaskRunningStatistics.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.domain;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import java.util.Date;
-
-/**
- * Task running statistics.
- */
-@Getter
-@NoArgsConstructor
-@AllArgsConstructor
-@Entity
-@Table(name = "TASK_RUNNING_STATISTICS")
-public final class TaskRunningStatistics {
-    
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private Long id;
-    
-    @Column(name = "running_count", length = 11)
-    private Integer runningCount;
-    
-    @Column(name = "statistics_time", nullable = false)
-    private Date statisticsTime;
-    
-    @Column(name = "creation_time", nullable = false)
-    private Date creationTime = new Date();
-    
-    public TaskRunningStatistics(final Integer runningCount, final Date statisticsTime) {
-        this.runningCount = runningCount;
-        this.statisticsTime = statisticsTime;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/request/BasePageRequest.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/request/BasePageRequest.java
deleted file mode 100644
index 78fec7e..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/request/BasePageRequest.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dto.request;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-/**
- * Pageable request base request.
- */
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-public class BasePageRequest {
-    
-    public static final int DEFAULT_PAGE_SIZE = 10;
-    
-    /**
-     * Page size of request.
-     */
-    @JsonProperty("per_page")
-    private Integer pageSize = DEFAULT_PAGE_SIZE;
-    
-    /**
-     * Page number of request.
-     */
-    @JsonProperty("page")
-    private Integer pageNumber = 1;
-    
-    /**
-     * The field name for sort by.
-     */
-    @JsonProperty("sort")
-    private String sortBy;
-    
-    /**
-     * Order type, asc or desc.
-     */
-    @JsonProperty("order")
-    private String orderType;
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/request/FindJobExecutionEventsRequest.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/request/FindJobExecutionEventsRequest.java
deleted file mode 100644
index 29ea75e..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/request/FindJobExecutionEventsRequest.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dto.request;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import java.util.Date;
-
-/**
- * Request object of uri '/event-trace/execution'.
- */
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-public class FindJobExecutionEventsRequest extends BasePageRequest {
-    
-    private String jobName;
-    
-    private String ip;
-    
-    private Boolean isSuccess;
-    
-    @JsonProperty("startTime")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date start;
-    
-    @JsonProperty("endTime")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date end;
-    
-    /**
-     * Create new FindJobExecutionEventsRequest with pageSize and pageNumber.
-     * @param pageNumber page number
-     * @param pageSize page size
-     */
-    public FindJobExecutionEventsRequest(final Integer pageSize, final Integer pageNumber) {
-        super(pageSize, pageNumber, null, null);
-    }
-    
-    /**
-     * Create new FindJobExecutionEventsRequest with properties.
-     * @param pageNumber page number
-     * @param pageSize page size
-     * @param sortBy the field name sort by
-     * @param orderType order type, asc or desc
-     * @param startTime start time
-     * @param endTime end time
-     */
-    public FindJobExecutionEventsRequest(final Integer pageSize, final Integer pageNumber, final String sortBy,
-        final String orderType, final Date startTime, final Date endTime) {
-        super(pageSize, pageNumber, sortBy, orderType);
-        this.start = startTime;
-        this.end = endTime;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/request/FindJobStatusTraceEventsRequest.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/request/FindJobStatusTraceEventsRequest.java
deleted file mode 100644
index 95b97cc..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/request/FindJobStatusTraceEventsRequest.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dto.request;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-import java.util.Date;
-
-/**
- * Request object of uri '/event-trace/status'.
- */
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-public class FindJobStatusTraceEventsRequest extends BasePageRequest {
-    
-    private String jobName;
-    
-    private String source;
-    
-    private String executionType;
-    
-    private String state;
-    
-    @JsonProperty("startTime")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date start;
-    
-    @JsonProperty("endTime")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date end;
-    
-    public FindJobStatusTraceEventsRequest(final Integer pageSize, final Integer pageNumber) {
-        super(pageSize, pageNumber, null, null);
-    }
-    
-    public FindJobStatusTraceEventsRequest(final Integer pageSize, final Integer pageNumber, final String sortBy, final String orderType, final Date startTime, final Date endTime) {
-        super(pageSize, pageNumber, sortBy, orderType);
-        this.start = startTime;
-        this.end = endTime;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/response/BasePageResponse.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/response/BasePageResponse.java
deleted file mode 100644
index b3d5e8c..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/dto/response/BasePageResponse.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.dto.response;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import org.springframework.data.domain.Page;
-
-import java.io.Serializable;
-import java.util.List;
-
-@Getter
-@AllArgsConstructor
-@NoArgsConstructor
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class BasePageResponse<T> implements Serializable {
-    
-    /**
-     * Total count of rows.
-     */
-    private Long total;
-    
-    /**
-     * Rows data.
-     */
-    private List<T> rows;
-    
-    /**
-     * Create new BasePageResponse with total and data.
-     * @param total Total count of match data
-     * @param data Current page of data
-     * @param <T> Data type
-     * @return BasePageResponse
-     */
-    public static <T> BasePageResponse of(final Long total, final List<T> data) {
-        return new BasePageResponse(total, data);
-    }
-    
-    /**
-     * Create new BasePageResponse with Page.
-     * @param page match data info.
-     * @param <T> Data type
-     * @return BasePageResponse
-     */
-    public static <T> BasePageResponse of(final Page<T> page) {
-        return new BasePageResponse(page.getTotalElements(), page.getContent());
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/exception/JobConsoleException.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/exception/JobConsoleException.java
deleted file mode 100644
index 3911cc7..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/exception/JobConsoleException.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.exception;
-
-/**
- * Job console exception.
- */
-public final class JobConsoleException extends RuntimeException {
-    
-    private static final long serialVersionUID = 1393957353478034407L;
-    
-    public JobConsoleException(final Exception cause) {
-        super(cause);
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/filter/GlobalConfigurationFilter.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/filter/GlobalConfigurationFilter.java
deleted file mode 100644
index 674a94b..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/filter/GlobalConfigurationFilter.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.filter;
-
-import org.apache.shardingsphere.elasticjob.lite.console.controller.EventTraceDataSourceController;
-import org.apache.shardingsphere.elasticjob.lite.console.controller.RegistryCenterController;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.EventTraceDataSourceConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.EventTraceDataSourceFactory;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.RegistryCenterConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.service.EventTraceDataSourceConfigurationService;
-import org.apache.shardingsphere.elasticjob.lite.console.service.RegistryCenterConfigurationService;
-import org.apache.shardingsphere.elasticjob.lite.console.service.impl.EventTraceDataSourceConfigurationServiceImpl;
-import org.apache.shardingsphere.elasticjob.lite.console.service.impl.RegistryCenterConfigurationServiceImpl;
-import org.apache.shardingsphere.elasticjob.lite.console.util.SessionEventTraceDataSourceConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.util.SessionRegistryCenterConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.internal.reg.RegistryCenterFactory;
-import org.apache.shardingsphere.elasticjob.reg.exception.RegException;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import java.io.IOException;
-import java.util.Optional;
-
-/**
- * Global configuration filter.
- */
-public final class GlobalConfigurationFilter implements Filter {
-    
-    private final RegistryCenterConfigurationService regCenterService = new RegistryCenterConfigurationServiceImpl();
-    
-    private final EventTraceDataSourceConfigurationService rdbService = new EventTraceDataSourceConfigurationServiceImpl();
-    
-    @Override
-    public void init(final FilterConfig filterConfig) {
-    }
-    
-    @Override
-    public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
-        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
-        HttpSession httpSession = httpRequest.getSession();
-        if (null == httpSession.getAttribute(RegistryCenterController.REG_CENTER_CONFIG_KEY)) {
-            loadActivatedRegCenter(httpSession);
-        }
-        if (null == httpSession.getAttribute(EventTraceDataSourceController.DATA_SOURCE_CONFIG_KEY)) {
-            loadActivatedEventTraceDataSource(httpSession);
-        }
-        filterChain.doFilter(servletRequest, servletResponse);
-    }
-    
-    private void loadActivatedRegCenter(final HttpSession httpSession) {
-        Optional<RegistryCenterConfiguration> config = regCenterService.loadActivated();
-        if (config.isPresent()) {
-            String configName = config.get().getName();
-            boolean isConnected = setRegistryCenterNameToSession(regCenterService.find(configName, regCenterService.loadAll()), httpSession);
-            if (isConnected) {
-                regCenterService.load(configName);
-            }
-        }
-    }
-    
-    private boolean setRegistryCenterNameToSession(final RegistryCenterConfiguration regCenterConfig, final HttpSession session) {
-        session.setAttribute(RegistryCenterController.REG_CENTER_CONFIG_KEY, regCenterConfig);
-        try {
-            RegistryCenterFactory.createCoordinatorRegistryCenter(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
-            SessionRegistryCenterConfiguration.setRegistryCenterConfiguration((RegistryCenterConfiguration) session.getAttribute(RegistryCenterController.REG_CENTER_CONFIG_KEY));
-        } catch (final RegException ex) {
-            return false;
-        }
-        return true;
-    }
-    
-    private void loadActivatedEventTraceDataSource(final HttpSession httpSession) {
-        Optional<EventTraceDataSourceConfiguration> config = rdbService.loadActivated();
-        if (config.isPresent()) {
-            String configName = config.get().getName();
-            boolean isConnected = setEventTraceDataSourceNameToSession(rdbService.find(configName, rdbService.loadAll()), httpSession);
-            if (isConnected) {
-                rdbService.load(configName);
-            }
-        }
-    }
-    
-    private boolean setEventTraceDataSourceNameToSession(final EventTraceDataSourceConfiguration dataSourceConfig, final HttpSession session) {
-        session.setAttribute(EventTraceDataSourceController.DATA_SOURCE_CONFIG_KEY, dataSourceConfig);
-        try {
-            EventTraceDataSourceFactory.createEventTraceDataSource(dataSourceConfig.getDriver(), dataSourceConfig.getUrl(), dataSourceConfig.getUsername(), dataSourceConfig.getPassword());
-            SessionEventTraceDataSourceConfiguration.setDataSourceConfiguration((EventTraceDataSourceConfiguration) session.getAttribute(EventTraceDataSourceController.DATA_SOURCE_CONFIG_KEY));
-            // CHECKSTYLE:OFF
-        } catch (final Exception ex) {
-            // CHECKSTYLE:ON
-            return false;
-        }
-        return true;
-    }
-    
-    @Override
-    public void destroy() {
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/ConfigurationsXmlRepository.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/ConfigurationsXmlRepository.java
deleted file mode 100644
index 899d4c2..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/ConfigurationsXmlRepository.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.repository;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.GlobalConfiguration;
-
-/**
- * Configurations XML repository.
- */
-public interface ConfigurationsXmlRepository extends XmlRepository<GlobalConfiguration> {
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/XmlRepository.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/XmlRepository.java
deleted file mode 100644
index 7618fd6..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/XmlRepository.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.repository;
-
-/**
- * XML repository.
- *
- * @param <E> type of data
- */
-public interface XmlRepository<E> {
-    
-    /**
-     * Load data.
-     * 
-     * @return load result
-     */
-    E load();
-    
-    /**
-     * Save data.
-     * 
-     * @param entity entity
-     */
-    void save(E entity);
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/impl/AbstractXmlRepositoryImpl.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/impl/AbstractXmlRepositoryImpl.java
deleted file mode 100644
index 1d80f1b..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/impl/AbstractXmlRepositoryImpl.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.repository.impl;
-
-import org.apache.shardingsphere.elasticjob.lite.console.exception.JobConsoleException;
-import org.apache.shardingsphere.elasticjob.lite.console.repository.XmlRepository;
-import org.apache.shardingsphere.elasticjob.lite.console.util.HomeFolderUtils;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import java.io.File;
-
-/**
- * Abstract XML repository implementation.
- *
- * @param <E> type of data
- */
-public abstract class AbstractXmlRepositoryImpl<E> implements XmlRepository<E> {
-    
-    private final File file;
-    
-    private final Class<E> clazz;
-    
-    private JAXBContext jaxbContext;
-    
-    protected AbstractXmlRepositoryImpl(final String fileName, final Class<E> clazz) {
-        file = new File(HomeFolderUtils.getFilePathInHomeFolder(fileName));
-        this.clazz = clazz;
-        HomeFolderUtils.createHomeFolderIfNotExisted();
-        try {
-            jaxbContext = JAXBContext.newInstance(clazz);
-        } catch (final JAXBException ex) {
-            throw new JobConsoleException(ex);
-        }
-    }
-    
-    @SuppressWarnings("unchecked")
-    @Override
-    public synchronized E load() {
-        if (!file.exists()) {
-            try {
-                return clazz.newInstance();
-            } catch (final InstantiationException | IllegalAccessException ex) {
-                throw new JobConsoleException(ex);
-            }
-        }
-        try {
-            return (E) jaxbContext.createUnmarshaller().unmarshal(file);
-        } catch (final JAXBException ex) {
-            throw new JobConsoleException(ex);
-        }
-    }
-    
-    @Override
-    public synchronized void save(final E entity) {
-        try {
-            Marshaller marshaller = jaxbContext.createMarshaller();
-            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
-            marshaller.marshal(entity, file);
-        } catch (final JAXBException ex) {
-            throw new JobConsoleException(ex);
-        }
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/impl/ConfigurationsXmlRepositoryImpl.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/impl/ConfigurationsXmlRepositoryImpl.java
deleted file mode 100644
index 2568fd7..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/repository/impl/ConfigurationsXmlRepositoryImpl.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.repository.impl;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.GlobalConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.repository.ConfigurationsXmlRepository;
-
-/**
- * Configurations XML repository implementation.
- */
-public final class ConfigurationsXmlRepositoryImpl extends AbstractXmlRepositoryImpl<GlobalConfiguration> implements ConfigurationsXmlRepository {
-    
-    public ConfigurationsXmlRepositoryImpl() {
-        super("Configurations.xml", GlobalConfiguration.class);
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/security/AuthenticationResult.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/security/AuthenticationResult.java
deleted file mode 100644
index 67b8df5..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/security/AuthenticationResult.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.security;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-
-/**
- * Authentication result.
- **/
-@Getter
-@Setter
-@RequiredArgsConstructor
-public final class AuthenticationResult {
-    
-    private final boolean success;
-    
-    private final boolean isGuest;
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/security/UserAuthenticationService.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/security/UserAuthenticationService.java
deleted file mode 100644
index 0dfb998..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/security/UserAuthenticationService.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.security;
-
-import com.google.common.base.Splitter;
-import com.google.common.hash.Hashing;
-import lombok.Getter;
-import lombok.Setter;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * User authentication service.
- **/
-@Component
-@ConfigurationProperties(prefix = "auth")
-@Getter
-@Setter
-public class UserAuthenticationService {
-    
-    private String rootUsername;
-    
-    private String rootPassword;
-    
-    private String guestUsername;
-    
-    private String guestPassword;
-    
-    /**
-     * Check user.
-     *
-     * @param authorization authorization
-     * @param method method
-     * @return authorization result
-     */
-    public AuthenticationResult checkUser(final String authorization, final String method) {
-        Map<String, String> authorizationMap = parseAuthorizationMap(authorization);
-        String username = authorizationMap.get("username");
-        String realm = authorizationMap.get("realm");
-        String uri = authorizationMap.get("uri");
-        String nonce = authorizationMap.get("nonce");
-        String nc = authorizationMap.get("nc");
-        String cnonce = authorizationMap.get("cnonce");
-        String qop = authorizationMap.get("qop");
-        String response = authorizationMap.get("response");
-        String password;
-        AuthenticationResult authenticationResult;
-        if (rootUsername.equals(username)) {
-            password = rootPassword;
-            authenticationResult = new AuthenticationResult(true, false);
-        } else if (guestUsername.equals(username)) {
-            password = guestPassword;
-            authenticationResult = new AuthenticationResult(true, true);
-        } else {
-            return new AuthenticationResult(false, false);
-        }
-        String hash1 = Hashing.md5().hashBytes((username + ":" + realm + ":" + password).getBytes()).toString();
-        String hash2 = Hashing.md5().hashBytes((method + ":" + uri).getBytes()).toString();
-        String exceptResponse = Hashing.md5().hashBytes((hash1 + ":" + nonce + ":" + nc + ":" + cnonce + ":" + qop + ":" + hash2).getBytes()).toString();
-        
-        if (StringUtils.equals(response, exceptResponse)) {
-            return authenticationResult;
-        }
-        return new AuthenticationResult(false, false);
-    }
-
-    private static Map<String, String> parseAuthorizationMap(final String authority) {
-        if (StringUtils.isBlank(authority)) {
-            return Collections.emptyMap();
-        }
-        String authorityWithoutPrefix = authority.substring(authority.indexOf(" ") + 1);
-        List<String> keyValueList = Splitter.on(",").omitEmptyStrings().trimResults().splitToList(authorityWithoutPrefix);
-        Map<String, String> result = new HashMap<>();
-        for (String keyValue : keyValueList) {
-            int index = keyValue.indexOf("=");
-            if (-1 != index) {
-                String key = keyValue.substring(0, index);
-                String value = keyValue.substring(index + 1).replaceAll("\"", "").trim();
-                result.put(key, value);
-            }
-        }
-        return result;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/security/WwwAuthFilter.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/security/WwwAuthFilter.java
deleted file mode 100644
index b89768b..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/security/WwwAuthFilter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.security;
-
-import lombok.Setter;
-import lombok.extern.slf4j.Slf4j;
-
-import javax.servlet.FilterChain;
-import javax.servlet.Filter;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.UUID;
-
-/**
- * WWW auth filter.
- */
-@Slf4j
-public final class WwwAuthFilter implements Filter {
-
-    private static final String AUTH_PREFIX = "Basic ";
-
-    private static final String ROOT_IDENTIFY = "root";
-
-    private static final String GUEST_IDENTIFY = "guest";
-
-    private static final String DIGEST_REALM = "127.0.0.1";
-
-    private static final String DIGEST_QOP = "AUTH";
-
-    private static final String DIGEST_OPAQUE = "740faacf85fd450e90f57e9b16d0725c";
-
-    private static final String DIGEST_ALGORITHM = "MD5";
-
-    @Setter
-    private UserAuthenticationService userAuthenticationService;
-
-    @Override
-    public void init(final FilterConfig filterConfig) {
-    }
-
-    @Override
-    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
-        HttpServletRequest httpRequest = (HttpServletRequest) request;
-        HttpServletResponse httpResponse = (HttpServletResponse) response;
-        String authorization = httpRequest.getHeader("authorization");
-        if (null != authorization && authorization.length() > AUTH_PREFIX.length()) {
-            authorization = authorization.substring(AUTH_PREFIX.length());
-            AuthenticationResult authenticationResult = userAuthenticationService.checkUser(authorization, ((HttpServletRequest) request).getMethod());
-            if (authenticationResult.isSuccess()) {
-                authenticateSuccess(httpResponse, authenticationResult.isGuest());
-                chain.doFilter(httpRequest, httpResponse);
-            } else {
-                needAuthenticate(httpResponse);
-            }
-        } else {
-            needAuthenticate(httpResponse);
-        }
-    }
-
-    private void authenticateSuccess(final HttpServletResponse response, final boolean isGuest) {
-        response.setStatus(200);
-        response.setHeader("Pragma", "No-cache");
-        response.setHeader("Cache-Control", "no-store");
-        response.setDateHeader("Expires", 0);
-        response.setHeader("identify", isGuest ? GUEST_IDENTIFY : ROOT_IDENTIFY);
-    }
-    
-    private void needAuthenticate(final HttpServletResponse response) {
-        response.setStatus(401);
-        response.setHeader("Cache-Control", "no-store");
-        response.setDateHeader("Expires", 0);
-        String nonce = UUID.randomUUID().toString();
-        String authorization = String.format("Digest realm=\"%s\", qop=\"%s\", nonce=\"%s\", opaque=\"%s\", algorithm=\"%s\"",
-                DIGEST_REALM, DIGEST_QOP, nonce, DIGEST_OPAQUE, DIGEST_ALGORITHM);
-        response.setHeader("WWW-authenticate", authorization);
-    }
-    
-    @Override
-    public void destroy() {
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/EventTraceDataSourceConfigurationService.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/EventTraceDataSourceConfigurationService.java
deleted file mode 100644
index bf68f9f..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/EventTraceDataSourceConfigurationService.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.service;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.EventTraceDataSourceConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.EventTraceDataSourceConfigurations;
-
-import java.util.Optional;
-
-/**
- * Event trace data source configuration service.
- */
-public interface EventTraceDataSourceConfigurationService {
-    
-    /**
-     * Load all event trace data source configurations.
-     *
-     * @return all event trace data source configuration
-     */
-    EventTraceDataSourceConfigurations loadAll();
-    
-    /**
-     * Load event trace data source configuration.
-     * 
-     * @param name name of event trace data source configuration
-     * @return event trace data source configuration
-     */
-    EventTraceDataSourceConfiguration load(String name);
-    
-    /**
-     * Find event trace data source configuration.
-     *
-     * @param name name of event trace data source configuration
-     * @param configs event trace data source configurations
-     * @return event trace data source configuration
-     */
-    EventTraceDataSourceConfiguration find(String name, EventTraceDataSourceConfigurations configs);
-    
-    /**
-     * Load activated event trace data source configuration.
-     * 
-     * @return activated event trace data source configuration
-     */
-    Optional<EventTraceDataSourceConfiguration> loadActivated();
-    
-    /**
-     * Add event trace data source configuration.
-     * 
-     * @param config event trace data source configuration
-     * @return success to add or not
-     */
-    boolean add(EventTraceDataSourceConfiguration config);
-    
-    /**
-     * Delete event trace data source configuration.
-     *
-     * @param name name of event trace data source configuration
-     */
-    void delete(String name);
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/EventTraceHistoryService.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/EventTraceHistoryService.java
deleted file mode 100644
index 881a862..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/EventTraceHistoryService.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.service;
-
-import org.apache.shardingsphere.elasticjob.lite.console.dto.request.FindJobExecutionEventsRequest;
-import org.apache.shardingsphere.elasticjob.lite.console.dto.request.FindJobStatusTraceEventsRequest;
-import org.apache.shardingsphere.elasticjob.tracing.event.JobExecutionEvent;
-import org.apache.shardingsphere.elasticjob.tracing.event.JobStatusTraceEvent;
-import org.springframework.data.domain.Page;
-
-/**
- * Event trace history service.
- */
-public interface EventTraceHistoryService {
-    
-    /**
-     * Find job execution events.
-     *
-     * @param findJobExecutionEventsRequest query params
-     * @return job execution events
-     */
-    Page<JobExecutionEvent> findJobExecutionEvents(FindJobExecutionEventsRequest findJobExecutionEventsRequest);
-    
-    /**
-     * Find job status trace events.
-     *
-     * @param findJobStatusTraceEventsRequest query params
-     * @return job status trace events
-     */
-    Page<JobStatusTraceEvent> findJobStatusTraceEvents(FindJobStatusTraceEventsRequest findJobStatusTraceEventsRequest);
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java
deleted file mode 100644
index 3e5e48b..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/JobAPIService.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.service;
-
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobOperateAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobConfigurationAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobStatisticsAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ServerStatisticsAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ShardingOperateAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ShardingStatisticsAPI;
-
-public interface JobAPIService {
-    
-    /**
-     * Job configuration API.
-     *
-     * @return job configuration API
-     */
-    JobConfigurationAPI getJobConfigurationAPI();
-    
-    /**
-     * Job operate API.
-     *
-     * @return Job operate API
-     */
-    JobOperateAPI getJobOperatorAPI();
-    
-    /**
-     * Sharding operate API.
-     *
-     * @return sharding operate API
-     */
-    ShardingOperateAPI getShardingOperateAPI();
-    
-    /**
-     * Job statistics API.
-     *
-     * @return job statistics API
-     */
-    JobStatisticsAPI getJobStatisticsAPI();
-    
-    /**
-     * Servers statistics API.
-     *
-     * @return server statistics API
-     */
-    ServerStatisticsAPI getServerStatisticsAPI();
-    
-    /**
-     * Sharding statistics API.
-     *
-     * @return sharding statistics API
-     */
-    ShardingStatisticsAPI getShardingStatisticsAPI();
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/RegistryCenterConfigurationService.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/RegistryCenterConfigurationService.java
deleted file mode 100644
index 6a27401..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/RegistryCenterConfigurationService.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.service;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.RegistryCenterConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.RegistryCenterConfigurations;
-
-import java.util.Optional;
-
-/**
- * Registry center configuration service.
- */
-public interface RegistryCenterConfigurationService {
-    
-    /**
-     * Load all registry center configurations.
-     *
-     * @return all registry center configurations
-     */
-    RegistryCenterConfigurations loadAll();
-    
-    /**
-     * Load registry center configuration.
-     *
-     * @param name name of registry center configuration
-     * @return registry center configuration
-     */
-    RegistryCenterConfiguration load(String name);
-    
-    /**
-     * Find registry center configuration.
-     * 
-     * @param name name of registry center configuration
-     * @param configs registry center configurations
-     * @return registry center configuration
-     */
-    RegistryCenterConfiguration find(String name, RegistryCenterConfigurations configs);
-    
-    /**
-     * Load activated registry center configuration.
-     *
-     * @return activated registry center configuration
-     */
-    Optional<RegistryCenterConfiguration> loadActivated();
-    
-    /**
-     * Add registry center configuration.
-     *
-     * @param config registry center configuration
-     * @return success to add or not
-     */
-    boolean add(RegistryCenterConfiguration config);
-    
-    /**
-     * Delete registry center configuration.
-     *
-     * @param name name of registry center configuration
-     */
-    void delete(String name);
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/EventTraceDataSourceConfigurationServiceImpl.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/EventTraceDataSourceConfigurationServiceImpl.java
deleted file mode 100644
index c631ad4..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/EventTraceDataSourceConfigurationServiceImpl.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.service.impl;
-
-import org.apache.shardingsphere.elasticjob.lite.console.config.DynamicDataSourceConfig.DynamicDataSource;
-import org.apache.shardingsphere.elasticjob.lite.console.config.DynamicDataSourceConfig.DynamicDataSourceContextHolder;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.DataSourceFactory;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.EventTraceDataSourceConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.EventTraceDataSourceConfigurations;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.GlobalConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.repository.ConfigurationsXmlRepository;
-import org.apache.shardingsphere.elasticjob.lite.console.repository.impl.ConfigurationsXmlRepositoryImpl;
-import org.apache.shardingsphere.elasticjob.lite.console.service.EventTraceDataSourceConfigurationService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import javax.sql.DataSource;
-import java.util.Optional;
-
-/**
- * Event trace data source configuration service implementation.
- */
-@Service
-public final class EventTraceDataSourceConfigurationServiceImpl implements EventTraceDataSourceConfigurationService {
-    
-    private ConfigurationsXmlRepository configurationsXmlRepository = new ConfigurationsXmlRepositoryImpl();
-    
-    @Autowired
-    private DynamicDataSource dynamicDataSource;
-    
-    @Override
-    public EventTraceDataSourceConfigurations loadAll() {
-        return loadGlobal().getEventTraceDataSourceConfigurations();
-    }
-    
-    @Override
-    public EventTraceDataSourceConfiguration load(final String name) {
-        GlobalConfiguration configs = loadGlobal();
-        EventTraceDataSourceConfiguration result = find(name, configs.getEventTraceDataSourceConfigurations());
-        setActivated(configs, result);
-        // Activate the dataSource by data source name for spring boot
-        DynamicDataSourceContextHolder.setDataSourceName(name);
-        return result;
-    }
-    
-    @Override
-    public EventTraceDataSourceConfiguration find(final String name, final EventTraceDataSourceConfigurations configs) {
-        for (EventTraceDataSourceConfiguration each : configs.getEventTraceDataSourceConfiguration()) {
-            if (name.equals(each.getName())) {
-                return each;
-            }
-        }
-        return null;
-    }
-    
-    private void setActivated(final GlobalConfiguration configs, final EventTraceDataSourceConfiguration toBeConnectedConfig) {
-        EventTraceDataSourceConfiguration activatedConfig = findActivatedDataSourceConfiguration(configs);
-        if (!toBeConnectedConfig.equals(activatedConfig)) {
-            if (null != activatedConfig) {
-                activatedConfig.setActivated(false);
-            }
-            toBeConnectedConfig.setActivated(true);
-            configurationsXmlRepository.save(configs);
-        }
-    }
-    
-    @Override
-    public Optional<EventTraceDataSourceConfiguration> loadActivated() {
-        return Optional.ofNullable(findActivatedDataSourceConfiguration(loadGlobal()));
-    }
-    
-    private EventTraceDataSourceConfiguration findActivatedDataSourceConfiguration(final GlobalConfiguration configs) {
-        for (EventTraceDataSourceConfiguration each : configs.getEventTraceDataSourceConfigurations().getEventTraceDataSourceConfiguration()) {
-            if (each.isActivated()) {
-                return each;
-            }
-        }
-        return null;
-    }
-    
-    @Override
-    public boolean add(final EventTraceDataSourceConfiguration config) {
-        GlobalConfiguration configs = loadGlobal();
-        boolean result = configs.getEventTraceDataSourceConfigurations().getEventTraceDataSourceConfiguration().add(config);
-        if (result) {
-            configurationsXmlRepository.save(configs);
-        }
-        DataSource dataSource = DataSourceFactory.createDataSource(config);
-        dynamicDataSource.addDataSource(config.getName(), dataSource);
-        return result;
-    }
-    
-    @Override
-    public void delete(final String name) {
-        GlobalConfiguration configs = loadGlobal();
-        EventTraceDataSourceConfiguration toBeRemovedConfig = find(name, configs.getEventTraceDataSourceConfigurations());
-        if (null != toBeRemovedConfig) {
-            configs.getEventTraceDataSourceConfigurations().getEventTraceDataSourceConfiguration().remove(toBeRemovedConfig);
-            configurationsXmlRepository.save(configs);
-        }
-    }
-    
-    private GlobalConfiguration loadGlobal() {
-        GlobalConfiguration result = configurationsXmlRepository.load();
-        if (null == result.getEventTraceDataSourceConfigurations()) {
-            result.setEventTraceDataSourceConfigurations(new EventTraceDataSourceConfigurations());
-        }
-        return result;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/EventTraceHistoryServiceImpl.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/EventTraceHistoryServiceImpl.java
deleted file mode 100644
index 76397cf..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/EventTraceHistoryServiceImpl.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.service.impl;
-
-import com.google.common.base.Strings;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.shardingsphere.elasticjob.lite.console.dao.search.JobExecutionLogRepository;
-import org.apache.shardingsphere.elasticjob.lite.console.dao.search.JobStatusTraceLogRepository;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.JobExecutionLog;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.JobStatusTraceLog;
-import org.apache.shardingsphere.elasticjob.lite.console.dto.request.BasePageRequest;
-import org.apache.shardingsphere.elasticjob.lite.console.dto.request.FindJobExecutionEventsRequest;
-import org.apache.shardingsphere.elasticjob.lite.console.dto.request.FindJobStatusTraceEventsRequest;
-import org.apache.shardingsphere.elasticjob.lite.console.service.EventTraceHistoryService;
-import org.apache.shardingsphere.elasticjob.lite.console.util.BeanUtils;
-import org.apache.shardingsphere.elasticjob.tracing.event.JobExecutionEvent;
-import org.apache.shardingsphere.elasticjob.tracing.event.JobStatusTraceEvent;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Example;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.jpa.convert.QueryByExamplePredicateBuilder;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Component;
-
-import javax.persistence.criteria.Predicate;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * Event trace history service implementation.
- */
-@Slf4j
-@Component
-public final class EventTraceHistoryServiceImpl implements EventTraceHistoryService {
-    
-    @Autowired
-    private JobExecutionLogRepository jobExecutionLogRepository;
-    
-    @Autowired
-    private JobStatusTraceLogRepository jobStatusTraceLogRepository;
-    
-    @Override
-    public Page<JobExecutionEvent> findJobExecutionEvents(final FindJobExecutionEventsRequest findJobExecutionEventsRequest) {
-        Example<JobExecutionLog> jobExecutionLogExample = getExample(findJobExecutionEventsRequest, JobExecutionLog.class);
-        Specification<JobExecutionLog> specification = getSpecWithExampleAndDate(jobExecutionLogExample, findJobExecutionEventsRequest.getStart(),
-            findJobExecutionEventsRequest.getEnd(), "startTime");
-
-        Page<JobExecutionLog> page = jobExecutionLogRepository.findAll(specification, getPageable(findJobExecutionEventsRequest, JobExecutionLog.class));
-        return new PageImpl<>(page.get().map(JobExecutionLog::toJobExecutionEvent).collect(Collectors.toList()), page.getPageable(), page.getTotalElements());
-    }
-    
-    @Override
-    public Page<JobStatusTraceEvent> findJobStatusTraceEvents(final FindJobStatusTraceEventsRequest findJobStatusTraceEventsRequest) {
-        Example<JobStatusTraceLog> jobStatusTraceLogExample = getExample(findJobStatusTraceEventsRequest, JobStatusTraceLog.class);
-        Specification<JobStatusTraceLog> specification = getSpecWithExampleAndDate(jobStatusTraceLogExample, findJobStatusTraceEventsRequest.getStart(),
-            findJobStatusTraceEventsRequest.getEnd(), "creationTime");
-        Page<JobStatusTraceLog> page = jobStatusTraceLogRepository.findAll(specification, getPageable(findJobStatusTraceEventsRequest, JobStatusTraceLog.class));
-        return new PageImpl<>(page.get().map(JobStatusTraceLog::toJobStatusTraceEvent).collect(Collectors.toList()), page.getPageable(), page.getTotalElements());
-    }
-    
-    private <T> Pageable getPageable(final BasePageRequest pageRequest, final Class<T> clazz) {
-        int page = 0;
-        int perPage = BasePageRequest.DEFAULT_PAGE_SIZE;
-        if (pageRequest.getPageNumber() > 0 && pageRequest.getPageSize() > 0) {
-            page = pageRequest.getPageNumber() - 1;
-            perPage = pageRequest.getPageSize();
-        }
-        return PageRequest.of(page, perPage, getSort(pageRequest, clazz));
-    }
-    
-    private <T> Sort getSort(final BasePageRequest pageRequest, final Class<T> clazz) {
-        Sort sort = Sort.unsorted();
-        boolean sortFieldIsPresent = Arrays.stream(clazz.getDeclaredFields())
-            .map(Field::getName)
-            .anyMatch(e -> e.equals(pageRequest.getSortBy()));
-        if (!sortFieldIsPresent) {
-            return sort;
-        }
-        if (!Strings.isNullOrEmpty(pageRequest.getSortBy())) {
-            Sort.Direction order = Sort.Direction.ASC;
-            try {
-                order = Sort.Direction.valueOf(pageRequest.getOrderType());
-            } catch (IllegalArgumentException ignored) {
-            }
-            sort = Sort.by(order, pageRequest.getSortBy());
-        }
-        return sort;
-    }
-    
-    private <T> Specification<T> getSpecWithExampleAndDate(final Example<T> example, final Date from, final Date to, final String field) {
-        return (Specification<T>) (root, query, builder) -> {
-            final List<Predicate> predicates = new ArrayList<>();
-            if (from != null) {
-                predicates.add(builder.greaterThan(root.get(field), from));
-            }
-            if (to != null) {
-                predicates.add(builder.lessThan(root.get(field), to));
-            }
-            predicates.add(QueryByExamplePredicateBuilder.getPredicate(root, builder, example));
-            return builder.and(predicates.toArray(new Predicate[0]));
-        };
-    }
-    
-    private <T> Example<T> getExample(final Object source, final Class<T> clazz) {
-        T instance = BeanUtils.newInstance(clazz);
-        BeanUtils.copyProperties(source, instance);
-        return Example.of(instance);
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java
deleted file mode 100644
index 231333b..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/JobAPIServiceImpl.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.service.impl;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.RegistryCenterConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.service.JobAPIService;
-import org.apache.shardingsphere.elasticjob.lite.console.util.SessionRegistryCenterConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobAPIFactory;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobOperateAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobConfigurationAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.JobStatisticsAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ServerStatisticsAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ShardingOperateAPI;
-import org.apache.shardingsphere.elasticjob.lite.lifecycle.api.ShardingStatisticsAPI;
-import org.springframework.stereotype.Service;
-
-/**
- * Job API service implementation.
- */
-@Service
-public final class JobAPIServiceImpl implements JobAPIService {
-    
-    @Override
-    public JobConfigurationAPI getJobConfigurationAPI() {
-        RegistryCenterConfiguration regCenterConfig = SessionRegistryCenterConfiguration.getRegistryCenterConfiguration();
-        return JobAPIFactory.createJobConfigurationAPI(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
-    }
-    
-    @Override
-    public JobOperateAPI getJobOperatorAPI() {
-        RegistryCenterConfiguration regCenterConfig = SessionRegistryCenterConfiguration.getRegistryCenterConfiguration();
-        return JobAPIFactory.createJobOperateAPI(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
-    }
-    
-    @Override
-    public ShardingOperateAPI getShardingOperateAPI() {
-        RegistryCenterConfiguration regCenterConfig = SessionRegistryCenterConfiguration.getRegistryCenterConfiguration();
-        return JobAPIFactory.createShardingOperateAPI(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
-    }
-    
-    @Override
-    public JobStatisticsAPI getJobStatisticsAPI() {
-        RegistryCenterConfiguration regCenterConfig = SessionRegistryCenterConfiguration.getRegistryCenterConfiguration();
-        return JobAPIFactory.createJobStatisticsAPI(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
-    }
-    
-    @Override
-    public ServerStatisticsAPI getServerStatisticsAPI() {
-        RegistryCenterConfiguration regCenterConfig = SessionRegistryCenterConfiguration.getRegistryCenterConfiguration();
-        return JobAPIFactory.createServerStatisticsAPI(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
-    }
-    
-    @Override
-    public ShardingStatisticsAPI getShardingStatisticsAPI() {
-        RegistryCenterConfiguration regCenterConfig = SessionRegistryCenterConfiguration.getRegistryCenterConfiguration();
-        return JobAPIFactory.createShardingStatisticsAPI(regCenterConfig.getZkAddressList(), regCenterConfig.getNamespace(), regCenterConfig.getDigest());
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/RegistryCenterConfigurationServiceImpl.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/RegistryCenterConfigurationServiceImpl.java
deleted file mode 100644
index 0932b04..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/service/impl/RegistryCenterConfigurationServiceImpl.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.service.impl;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.GlobalConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.RegistryCenterConfiguration;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.RegistryCenterConfigurations;
-import org.apache.shardingsphere.elasticjob.lite.console.repository.ConfigurationsXmlRepository;
-import org.apache.shardingsphere.elasticjob.lite.console.repository.impl.ConfigurationsXmlRepositoryImpl;
-import org.apache.shardingsphere.elasticjob.lite.console.service.RegistryCenterConfigurationService;
-import org.springframework.stereotype.Service;
-
-import java.util.Optional;
-
-/**
- * Registry center configuration service implementation.
- */
-@Service
-public final class RegistryCenterConfigurationServiceImpl implements RegistryCenterConfigurationService {
-    
-    private ConfigurationsXmlRepository configurationsXmlRepository = new ConfigurationsXmlRepositoryImpl();
-    
-    @Override
-    public RegistryCenterConfigurations loadAll() {
-        return loadGlobal().getRegistryCenterConfigurations();
-    }
-    
-    @Override
-    public RegistryCenterConfiguration load(final String name) {
-        GlobalConfiguration configs = loadGlobal();
-        RegistryCenterConfiguration result = find(name, configs.getRegistryCenterConfigurations());
-        setActivated(configs, result);
-        return result;
-    }
-    
-    @Override
-    public RegistryCenterConfiguration find(final String name, final RegistryCenterConfigurations configs) {
-        for (RegistryCenterConfiguration each : configs.getRegistryCenterConfiguration()) {
-            if (name.equals(each.getName())) {
-                return each;
-            }
-        }
-        return null;
-    }
-    
-    private void setActivated(final GlobalConfiguration configs, final RegistryCenterConfiguration toBeConnectedConfig) {
-        RegistryCenterConfiguration activatedConfig = findActivatedRegistryCenterConfiguration(configs);
-        if (!toBeConnectedConfig.equals(activatedConfig)) {
-            if (null != activatedConfig) {
-                activatedConfig.setActivated(false);
-            }
-            toBeConnectedConfig.setActivated(true);
-            configurationsXmlRepository.save(configs);
-        }
-    }
-    
-    @Override
-    public Optional<RegistryCenterConfiguration> loadActivated() {
-        return Optional.ofNullable(findActivatedRegistryCenterConfiguration(loadGlobal()));
-    }
-    
-    private RegistryCenterConfiguration findActivatedRegistryCenterConfiguration(final GlobalConfiguration configs) {
-        for (RegistryCenterConfiguration each : configs.getRegistryCenterConfigurations().getRegistryCenterConfiguration()) {
-            if (each.isActivated()) {
-                return each;
-            }
-        }
-        return null;
-    }
-    
-    @Override
-    public boolean add(final RegistryCenterConfiguration config) {
-        GlobalConfiguration configs = loadGlobal();
-        boolean result = configs.getRegistryCenterConfigurations().getRegistryCenterConfiguration().add(config);
-        if (result) {
-            configurationsXmlRepository.save(configs);
-        }
-        return result;
-    }
-    
-    @Override
-    public void delete(final String name) {
-        GlobalConfiguration configs = loadGlobal();
-        RegistryCenterConfiguration toBeRemovedConfig = find(name, configs.getRegistryCenterConfigurations());
-        if (null != toBeRemovedConfig) {
-            configs.getRegistryCenterConfigurations().getRegistryCenterConfiguration().remove(toBeRemovedConfig);
-            configurationsXmlRepository.save(configs);
-        }
-    }
-    
-    private GlobalConfiguration loadGlobal() {
-        GlobalConfiguration result = configurationsXmlRepository.load();
-        if (null == result.getRegistryCenterConfigurations()) {
-            result.setRegistryCenterConfigurations(new RegistryCenterConfigurations());
-        }
-        return result;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/BeanUtils.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/BeanUtils.java
deleted file mode 100644
index f8953fe..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/BeanUtils.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.util;
-
-import org.springframework.cglib.beans.BeanMap;
-
-import java.util.Map;
-import java.util.Objects;
-
-public class BeanUtils extends org.springframework.beans.BeanUtils {
-    
-    /**
-     * return a new instance by specified java type.
-     *
-     * @param clazz java type class
-     * @param <T>   java type
-     * @return new instance
-     */
-    public static <T> T newInstance(final Class<T> clazz) {
-        return instantiateClass(clazz);
-    }
-    
-    /**
-     * map to java object.
-     *
-     * @param map  source map
-     * @param type class
-     * @param <T>  target java type
-     * @return java object
-     */
-    public static <T> T toBean(final Map<String, Object> map, final Class<T> type) {
-        if (Objects.isNull(map)) {
-            return null;
-        }
-        T bean = newInstance(type);
-        BeanMap beanMap = BeanMap.create(bean);
-        beanMap.putAll(map);
-        return bean;
-    }
-    
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/HomeFolderUtils.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/HomeFolderUtils.java
deleted file mode 100644
index 208ad82..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/HomeFolderUtils.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.util;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-
-import java.io.File;
-
-/**
- * Home folder Utils.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class HomeFolderUtils {
-    
-    private static final String USER_HOME = System.getProperty("user.home");
-    
-    private static final String CONSOLE_ROOT_FOLDER = ".elasticjob-console";
-    
-    /**
-     * Get file path in home folder.
-     * 
-     * @param fileName file name
-     * @return file path in home folder
-     */
-    public static String getFilePathInHomeFolder(final String fileName) {
-        return String.format("%s%s", getHomeFolder(), fileName);
-    }
-    
-    /**
-     * Create home folder if not existed.
-     */
-    public static void createHomeFolderIfNotExisted() {
-        File file = new File(getHomeFolder());
-        if (!file.exists()) {
-            file.mkdirs();
-        }
-    }
-    
-    private static String getHomeFolder() {
-        return String.format("%s%s%s%s", USER_HOME, File.separator, CONSOLE_ROOT_FOLDER, File.separator);
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/SessionEventTraceDataSourceConfiguration.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/SessionEventTraceDataSourceConfiguration.java
deleted file mode 100644
index 812338a..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/SessionEventTraceDataSourceConfiguration.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.util;
-
-import org.apache.shardingsphere.elasticjob.lite.console.config.DynamicDataSourceConfig.DynamicDataSourceContextHolder;
-import org.apache.shardingsphere.elasticjob.lite.console.domain.EventTraceDataSourceConfiguration;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-
-/**
- * Event trace data source configuration in session.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SessionEventTraceDataSourceConfiguration {
-    
-    private static EventTraceDataSourceConfiguration eventTraceDataSourceConfiguration;
-    
-    /**
-     * Set event trace data source configuration.
-     *
-     * @param eventTraceDataSourceConfiguration event trace data source configuration
-     */
-    public static void setDataSourceConfiguration(final EventTraceDataSourceConfiguration eventTraceDataSourceConfiguration) {
-        DynamicDataSourceContextHolder.setDataSourceName(eventTraceDataSourceConfiguration.getName());
-        SessionEventTraceDataSourceConfiguration.eventTraceDataSourceConfiguration = eventTraceDataSourceConfiguration;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/SessionRegistryCenterConfiguration.java b/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/SessionRegistryCenterConfiguration.java
deleted file mode 100644
index 5be187c..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/java/org/apache/shardingsphere/elasticjob/lite/console/util/SessionRegistryCenterConfiguration.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.elasticjob.lite.console.util;
-
-import org.apache.shardingsphere.elasticjob.lite.console.domain.RegistryCenterConfiguration;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-
-/**
- * Registry center configuration configuration.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SessionRegistryCenterConfiguration {
-    
-    private static RegistryCenterConfiguration regCenterConfig;
-    
-    /**
-     * Get registry center configuration.
-     *
-     * @return registry center configuration
-     */
-    public static RegistryCenterConfiguration getRegistryCenterConfiguration() {
-        return regCenterConfig;
-    }
-    
-    /**
-     * Set registry center configuration.
-     * 
-     * @param regCenterConfig registry center configuration
-     */
-    public static void setRegistryCenterConfiguration(final RegistryCenterConfiguration regCenterConfig) {
-        SessionRegistryCenterConfiguration.regCenterConfig = regCenterConfig;
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/application.properties b/elasticjob-lite/elasticjob-lite-console/src/main/resources/application.properties
deleted file mode 100644
index 6c493e8..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/application.properties
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Default web server port
-server.port=8899
-
-auth.root_username=root
-auth.root_password=root
-auth.guest_username=guest
-auth.guest_password=guest
-
-spring.datasource.default.driver-class-name=org.h2.Driver
-spring.datasource.default.url=jdbc:h2:mem:
-spring.datasource.default.username=sa
-spring.datasource.default.password=
-spring.jpa.database-platform=org.hibernate.dialect.HSQLDialect
-spring.jpa.show-sql=false
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/assembly/assembly.xml b/elasticjob-lite/elasticjob-lite-console/src/main/resources/assembly/assembly.xml
deleted file mode 100644
index b0d2683..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/assembly/assembly.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<assembly>
-    <id>console-bin</id>
-    <formats>
-        <format>tar.gz</format>
-    </formats>
-    <fileSets>
-        <fileSet>
-            <directory>src/main/resources</directory>
-            <includes>
-                <include>application.properties</include>
-                <include>logback.xml</include>
-            </includes>
-            <outputDirectory>conf</outputDirectory>
-            <directoryMode>0755</directoryMode>
-            <fileMode>0644</fileMode>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/resources/bin</directory>
-            <outputDirectory>bin</outputDirectory>
-            <directoryMode>0755</directoryMode>
-            <fileMode>0755</fileMode>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/resources/ext-lib</directory>
-            <outputDirectory>ext-lib</outputDirectory>
-            <directoryMode>0755</directoryMode>
-            <fileMode>0755</fileMode>
-        </fileSet>
-    </fileSets>
-    
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>lib</outputDirectory>
-            <directoryMode>0755</directoryMode>
-        </dependencySet>
-    </dependencySets>
-</assembly>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/bin/start.bat b/elasticjob-lite/elasticjob-lite-console/src/main/resources/bin/start.bat
deleted file mode 100644
index ffbd50e..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/bin/start.bat
+++ /dev/null
@@ -1,39 +0,0 @@
-@rem
-@rem Licensed to the Apache Software Foundation (ASF) under one or more
-@rem contributor license agreements.  See the NOTICE file distributed with
-@rem this work for additional information regarding copyright ownership.
-@rem The ASF licenses this file to You under the Apache License, Version 2.0
-@rem (the "License"); you may not use this file except in compliance with
-@rem the License.  You may obtain a copy of the License at
-@rem
-@rem     http://www.apache.org/licenses/LICENSE-2.0
-@rem
-@rem Unless required by applicable law or agreed to in writing, software
-@rem distributed under the License is distributed on an "AS IS" BASIS,
-@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@rem See the License for the specific language governing permissions and
-@rem limitations under the License.
-@rem
-
-@echo off
-if ""%1"" == ""-p"" goto doSetPort
-if ""%1"" == """" goto doStart
-
-echo Usage:  %0 [OPTIONS]
-echo   -p [port]          Server port (default: 8899)
-goto end
-
-:doSetPort
-shift
-set PORT=%1
-
-:doStart
-set CFG_DIR=%~dp0%..
-set CLASSPATH=%CFG_DIR%
-set CLASSPATH=%~dp0..\lib\*;%~dp0..\ext-lib\*;%~dp0..\conf;%CLASSPATH%
-set CONSOLE_MAIN=org.apache.shardingsphere.elasticjob.lite.console.ConsoleBootstrap
-echo on
-if ""%PORT%"" == """" set PORT=8899
-java  -cp "%CLASSPATH%" %CONSOLE_MAIN% %PORT%
-
-:end
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/bin/start.sh b/elasticjob-lite/elasticjob-lite-console/src/main/resources/bin/start.sh
deleted file mode 100644
index 5e6bbc7..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/bin/start.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/bash
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-show_usage() {
-    echo "Usage: $0 [OPTIONS]"
-    echo "  -p <port>          Server port (default: 8899)"
-    exit 1
-}
-
-if [ $# -ne 0 ] && [ $# -ne 2 ]; then
-  show_usage
-fi
-
-port="8899"
-
-if [ $# -eq 2 ]; then
-  while getopts p: arg
-  do    case "$arg" in
-          p) port="$OPTARG";;
-          [?]) show_usage;;
-        esac
-  done
-fi
-
-if [ "$port" = "" ]; then
-  show_usage
-fi
-
-cd `dirname $0`
-cd ..
-DEPLOY_DIR=`pwd`
-CLASS_PATH=.:${DEPLOY_DIR}/conf:${DEPLOY_DIR}/lib/*:${DEPLOY_DIR}/ext-lib/*
-CONSOLE_MAIN=org.apache.shardingsphere.elasticjob.lite.console.ConsoleBootstrap
-
-exec java -classpath ${CLASS_PATH}:. ${CONSOLE_MAIN} ${port}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/css/index.css b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/css/index.css
deleted file mode 100644
index 11c0498..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/css/index.css
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-.index-content{
-    min-height:670px;
-    background-color: #ecf0f5;
-    z-index: 800;
-    margin-left: 230px;
-}
-.form-group.toolbar label {
-    float: left;
-    width: 90px;
-    height: 52px;
-    padding-left: 20px;
-    text-align: center;
-}
-.form-group.toolbar span {
-    float: left;
-    width: 40px;
-    height: 52px;
-    text-align: center;
-}
-.update-model-size{
-    width:210%;
-    margin-left:-290px;
-}
-#control-sidebar-theme-demo-options-tab li {
-    float:left; 
-    width: 33.33333%; 
-    padding: 5px;
-}
-
-#control-sidebar-theme-demo-options-tab li a {
-    display: block; 
-    box-shadow: 0 0 3px rgba(0,0,0,0.4);
-}
-
-.top-span {
-    display:block; 
-    width: 100%; 
-    float: left; 
-    height: 7px; 
-}
-#span-black{
-    background: #fefefe;
-}
-
-.down-span-left {
-    display:block; 
-    width: 20%; 
-    float: left; 
-    height: 20px; 
-    background: #222d32;
-}
-.down-span-right {
-    display:block; 
-    width: 80%; 
-    float: left; 
-    height: 20px; 
-    background: #f4f5f7;
-}
-#modal-dialog-width{
-    width: 60%;
-}
-#execute-result {
-    float: top;
-    padding-left: 20px;
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/favicon.ico b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/favicon.ico
deleted file mode 100644
index f771152..0000000
Binary files a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/favicon.ico and /dev/null differ
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/global/event_trace_data_source.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/global/event_trace_data_source.html
deleted file mode 100644
index 9ac35ac..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/global/event_trace_data_source.html
+++ /dev/null
@@ -1,83 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<div class="index-content">
-    <section class="content-header">
-        <h4 data-lang="sidebar-event-trace-data-source"></h4>
-        <ol class="breadcrumb">
-            <li class="active"><i class="fa fa-cogs" data-lang="sidebar-global-settings"></i></li>
-            <li class="active" data-lang="sidebar-event-trace-data-source"></li>
-        </ol>
-    </section>
-    <section class="content">
-        <table id="data-sources" data-pagination="true" data-page-list="[10, 20, 50, 100]" data-search="true" data-show-refresh="true" data-show-toggle="true" data-striped="true">
-            <thead>
-            <tr>
-                <th data-field="name" data-sortable="true"><span data-lang="event-trace-data-source-name"></span></th>
-                <th data-field="driver" data-sortable="true"><span data-lang="event-trace-data-source-driver"></span></th>
-                <th data-field="url" data-sortable="true"><span data-lang="event-trace-data-source-url"></span></th>
-                <th data-field="username"><span data-lang="event-trace-data-source-username"></span></th>
-                <th data-field="operation" data-formatter="generateOperationButtons"><span data-lang="operation"></span></th>
-            </tr>
-            </thead>
-        </table>
-        <button type="button" class="btn-xs btn-success" data-toggle="modal" id="add-data-source" data-lang="operation-add"></button>
-    </section>
-</div>
-<div id="add-data-source-center" class="modal" tabindex="-1" role="dialog">
-    <div class="modal-dialog" role="document">
-        <div class="modal-content">
-            <div class="modal-header">
-                <button type="button" id="close-add-data-source-form" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
-                <h4 class="modal-title" data-lang="add-event-trace-data-source"></h4>
-            </div>
-            <form id="data-source-form">
-                <div class="modal-body">
-                    <div class="form-group">
-                        <label for="name" class="control-label" data-lang="event-trace-data-source-name"></label>
-                        <input type="text" class="form-control" id="name" name="name" required autofocus>
-                    </div>
-                    <div class="form-group">
-                        <label for="driver" class="control-label" data-lang="event-trace-data-source-driver"></label>
-                        <input type="text" class="form-control" id="driver" name="driver" required>
-                    </div>
-                    <div class="form-group">
-                        <label for="url" class="control-label" data-lang="event-trace-data-source-url"></label>
-                        <input type="text" class="form-control" id="url" name="url" required>
-                    </div>
-                    <div class="form-group">
-                        <label for="username" class="control-label" data-lang="event-trace-data-source-username"></label>
-                        <input type="text" class="form-control" id="username" name="username" required>
-                    </div>
-                    <div class="form-group">
-                        <label for="password" class="control-label" data-lang="event-trace-data-source-password"></label>
-                        <input type="password" class="form-control" id="password" name="password">
-                    </div>
-                </div>
-                <div class="modal-footer">
-                    <button id="connect-test" type="button" class="btn-xs btn-info" data-lang="operation-test-connect"></button>
-                    <button id="add-data-source-btn" type="button" class="btn-xs btn-primary" data-lang="operation-submit"></button>
-                </div>
-            </form>
-        </div>
-    </div>
-</div>
-<script src="lib/bootstrap-table/bootstrap-table.js"></script>
-<script src="lib/BootstrapValidator/js/bootstrapValidator.js"></script>
-<script src="lib/BootstrapValidator/js/bootstrapValidator_zh_CN.js"></script>
-<script src="js/util/common.js"></script>
-<script src="js/global/event_trace_data_source.js"></script>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/global/registry_center.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/global/registry_center.html
deleted file mode 100644
index 211f9ca..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/global/registry_center.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<div class="index-content">
-    <section class="content-header">
-        <h4 data-lang="sidebar-registry-center"></h4>
-        <ol class="breadcrumb">
-            <li class="active"><i class="fa fa-cogs" data-lang="sidebar-global-settings"></i></li>
-            <li class="active" data-lang="sidebar-registry-center"></li>
-        </ol>
-    </section>
-    <section class="content">
-        <table id="reg-centers" data-pagination="true" data-page-list="[10, 20, 50, 100]" data-search="true" data-show-refresh="true" data-show-toggle="true" data-striped="true">
-            <thead>
-            <tr>
-                <th data-field="name" data-sortable="true"><span data-lang="registry-center-name"></span></th>
-                <th data-field="zkAddressList" data-sortable="true"><span data-lang="registry-center-zk-address"></span></th>
-                <th data-field="namespace" data-sortable="true"><span data-lang="registry-center-namespace"></span></th>
-                <th data-field="operation" data-formatter="generateOperationButtons"><span data-lang="operation"></span></th>
-            </tr>
-            </thead>
-        </table>
-        <button type="button" class="btn-xs btn-success" data-toggle="modal" id="add-register" data-lang="operation-add"></button>
-    </section>
-</div>
-<div id="add-reg-center" class="modal" tabindex="-1" role="dialog">
-    <div class="modal-dialog" role="document">
-        <div class="modal-content">
-            <div class="modal-header">
-                <button type="button" id="close-add-reg-form" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
-                <h4 class="modal-title" data-lang="add-registry-center"></h4>
-            </div>
-            <form id="reg-center-form">
-                <div class="modal-body">
-                    <div class="form-group">
-                        <label for="name" class="control-label" data-lang="registry-center-name"></label>
-                        <input type="text" class="form-control" id="name" name="name" required autofocus>
-                    </div>
-                    <div class="form-group">
-                        <label for="zk-address-list" class="control-label" data-lang="registry-center-zk-address"></label>
-                        <input type="text" class="form-control" id="zk-address-list" name="zkAddressList" placeholder="localhost:2181" required>
-                    </div>
-                    <div class="form-group">
-                        <label for="namespace" class="control-label" data-lang="registry-center-namespace"></label>
-                        <input type="text" class="form-control" id="namespace" name="namespace">
-                    </div>
-                    <div class="form-group">
-                        <label for="digest" class="control-label" data-lang="registry-center-digest"></label>
-                        <input type="password" class="form-control" id="digest" name="digest">
-                    </div>
-                </div>
-                <div class="modal-footer">
-                    <button id="add-reg-center-btn" type="submit" class="btn-xs btn-primary" data-lang="operation-submit"></button>
-                </div>
-            </form>
-        </div>
-    </div>
-</div>
-<script src="lib/bootstrap-table/bootstrap-table.js"></script>
-<script src="lib/BootstrapValidator/js/bootstrapValidator.js"></script>
-<script src="lib/BootstrapValidator/js/bootstrapValidator_zh_CN.js"></script>
-<script src="js/util/common.js"></script>
-<script src="js/global/registry_center.js"></script>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/help/help.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/help/help.html
deleted file mode 100644
index 3847e27..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/help/help.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<div class="index-content">
-    <section class="content-header">
-        <ol class="breadcrumb">
-            <li class="active"><i class="fa fa-book" data-lang="sidebar-help"></i></li>
-        </ol>
-    </section>
-    <section class="content">
-        <h2 data-lang="design-concept-title"></h2>
-        <ol>
-            <li data-lang="design-concept-info-1"></li>
-            <li data-lang="design-concept-info-2"></li>
-        </ol>
-        <h2 data-lang="major-features-title"></h2>
-        <ol>
-            <li data-lang="major-features-info-1"></li>
-            <li data-lang="major-features-info-2"></li>
-            <li data-lang="major-features-info-3"></li>
-            <li data-lang="major-features-info-4"></li>
-            <li data-lang="major-features-info-5"></li>
-        </ol>
-        <h2 data-lang="unsupported-title"></h2>
-        <ol>
-            <li data-lang="unsupported-info"></li>
-        </ol>
-    </section>
-</div>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/history/job_event_trace_history.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/history/job_event_trace_history.html
deleted file mode 100644
index ce8f12e..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/history/job_event_trace_history.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<div class="index-content">
-    <section class="content-header">
-        <h4 data-lang="sidebar-job-trace"></h4>
-        <ol class="breadcrumb">
-            <li class="active"><i class="fa fa-history" data-lang="sidebar-job-history"></i></li>
-            <li class="active" data-lang="sidebar-job-trace"></li>
-        </ol>
-    </section>
-    <section class="content">
-        <div id="jobExecDetailToolbar">
-            <div class="form-inline" role="form">
-                <div class="form-group toolbar">
-                    <label for="job-name" data-lang="job-name"></label>
-                    <input type="text" class="form-control" id="job-name" placeholder="">
-                </div>
-                <div class="form-group toolbar">
-                    <label for="ip" data-lang="server-ip"></label>
-                    <input type="text" class="form-control" data-inputmask="'alias': 'ip'" data-mask="" id="ip">
-                </div>
-                <br/>
-                <div class="form-group toolbar">
-                    <label for="start-time" data-lang="start-time"></label>
-                    <input type="text" class="form-control custom-datepicker" id="start-time">
-                </div>
-                <div class="form-group toolbar">
-                    <label for="end-time" data-lang="complete-time"></label>
-                    <input type="text" class="form-control custom-datepicker" id="end-time">
-                </div>
-                <div class="form-group">
-                    <div id="execute-result">
-                        <label data-lang="execute-result"></label>:
-                        <input type="radio" name="isSuccess" value="1"><label data-lang="execute-result-success"></label>
-                        <input type="radio" name="isSuccess" value="0"><label data-lang="execute-result-failure"></label>
-                        <input type="radio" name="isSuccess" value="" checked="checked"><label data-lang="execute-result-all"></label>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <table id="job-exec-details-table"
-            data-show-refresh="true"
-            data-show-toggle="true"
-            data-striped="true"
-            data-toggle="table"
-            data-url="/api/event-trace/execution"
-            data-flat="true"
-            data-click-to-select="true"
-            data-row-style="rowStyle"
-            data-query-params="queryParams"
-            data-query-params-type="notLimit"
-            data-side-pagination="server"
-            data-pagination="true"
-            data-page-list="[10, 20, 50, 100]"
-            data-show-columns="true"
-            data-toolbar="#jobExecDetailToolbar">
-            <thead>
-                <tr>
-                    <th data-field="jobName" data-sortable="true"><span data-lang="job-name"></span></th>
-                    <th data-field="ip" data-sortable="true"><span data-lang="server-ip"></span></th>
-                    <th data-field="shardingItem"><span data-lang="job-sharding-item"></span></th>
-                    <th data-field="success" data-sortable="true" data-formatter="successFormatter"><span data-lang="execute-result"></span></th>
-                    <th data-field="failureCause.plainText" data-formatter="splitFormatter"><span data-lang="failure-reason"></span></th>
-                    <th data-field="startTime" data-sortable="true" data-formatter="dateTimeFormatter"><span data-lang="start-time"></span></th>
-                    <th data-field="completeTime" data-sortable="true" data-formatter="dateTimeFormatter"><span data-lang="complete-time"></span></th>
-                </tr>
-            </thead>
-        </table>
-    </section>
-</div>
-<script src="lib/bootstrap-table/bootstrap-table.js"></script>
-<script src="lib/daterangepicker/moment.min.js"></script>
-<script src="lib/daterangepicker/daterangepicker.js"></script>
-<script src="lib/input-mask/jquery.inputmask.js"></script>
-<script src="lib/input-mask/jquery.inputmask.date.extensions.js"></script>
-<script src="lib/input-mask/jquery.inputmask.extensions.js"></script>
-<script src="js/util/formatter.js"></script>
-<script src="js/history/job_event_trace_history.js"></script>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/history/job_status_history.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/history/job_status_history.html
deleted file mode 100644
index a52534e..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/history/job_status_history.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<div class="index-content">
-    <section class="content-header">
-        <h4 data-lang="sidebar-history-status"></h4>
-        <ol class="breadcrumb">
-            <li class="active"><i class="fa fa-history" data-lang="sidebar-job-history"></i></li>
-            <li class="active" data-lang="sidebar-history-status"></li>
-        </ol>
-    </section>
-    <section class="content">
-        <div id="jobExecStatusToolbar">
-            <div class="form-inline" role="form">
-                <div class="form-group toolbar">
-                    <label for="job-name" data-lang="job-name"></label>
-                    <input type="text" class="form-control" id="job-name" placeholder="">
-                </div>
-                <div class="form-group toolbar">
-                    <label for="state" data-lang="status"></label>
-                    <select id="state" name="state" class="form-control" data-toggle="tooltip" data-placement="bottom" >
-                        <option value="" data-lang="execute-result-all"></option>
-                        <option value="TASK_STAGING" data-lang="status-staging"></option>
-                        <option value="TASK_FAILED" data-lang="status-task-failed"></option>
-                        <option value="TASK_FINISHED" data-lang="status-task-finished"></option>
-                        <option value="TASK_RUNNING" data-lang="status-running"></option>
-                        <option value="TASK_ERROR" data-lang="status-task-error"></option>
-                        <option value="TASK_KILLED" data-lang="status-task-killed"></option>
-                    </select>
-                </div>
-                <br/>
-                <div class="form-group toolbar">
-                    <label for="start-time" data-lang="creation-start-time"></label>
-                    <input type="text" class="form-control pull-right custom-datepicker" id="start-time">
-                </div>
-                <div class="form-group toolbar">
-                    <label for="end-time" data-lang="creation-end-time"></label>
-                    <input type="text" class="form-control pull-right custom-datepicker" id="end-time">
-                </div>
-            </div>
-        </div>
-        <table id="job-exec-status-table"
-               data-show-refresh="true"
-               data-show-toggle="true"
-               data-striped="true"
-               data-toggle="table"
-               data-url="/api/event-trace/status"
-               data-flat="true"
-               data-click-to-select="true"
-               data-row-style="rowStyle"
-               data-query-params="queryParams"
-               data-query-params-type="notLimit"
-               data-side-pagination="server"
-               data-pagination="true"
-               data-page-list="[10, 20, 50, 100]"
-               data-show-columns="true"
-               data-toolbar="#jobExecStatusToolbar">
-            <thead>
-                <tr>
-                    <th data-field="jobName" data-sortable="true"><span data-lang="job-name"></span></th>
-                    <th data-field="shardingItems"><span data-lang="job-sharding-item"></span></th>
-                    <th data-field="state" data-sortable="true" data-formatter="stateFormatter"><span data-lang="status"></span></th>
-                    <th data-field="creationTime" data-sortable="true" data-formatter="dateTimeFormatter"><span data-lang="creation-time"></span></th>
-                    <th data-field="message" data-formatter="splitRemarkFormatter"><span data-lang="comments"></span></th>
-                </tr>
-            </thead>
-        </table>
-    </section>
-</div>
-<script src="lib/bootstrap-table/bootstrap-table.js"></script>
-<script src="lib/daterangepicker/moment.min.js"></script>
-<script src="lib/daterangepicker/daterangepicker.js"></script>
-<script src="lib/input-mask/jquery.inputmask.js"></script>
-<script src="lib/input-mask/jquery.inputmask.date.extensions.js"></script>
-<script src="lib/input-mask/jquery.inputmask.extensions.js"></script>
-<script src="js/util/formatter.js"></script>
-<script src="js/history/job_status_history.js"></script>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/job/job_config.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/job/job_config.html
deleted file mode 100644
index 97632a4..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/job/job_config.html
+++ /dev/null
@@ -1,158 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<div class="box-body">
-    <div role="tabpanel" class="tab-pane active" onsubmit="return false;">
-        <form id="job-config-form" class="form-horizontal">
-                <div class="row">
-                    <div class="col-sm-4">
-                        <div class="form-group">
-                            <label for="job-name" class="col-sm-6 control-label" data-lang="job-name"></label>
-                            <div class="col-sm-6">
-                                <input type="text" id="job-name" name="jobName" class="form-control" disabled />
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="row">
-                    <div class="col-sm-4">
-                        <div class="form-group">
-                            <label for="cron" class="col-sm-6 control-label" data-lang="job-cron"></label>
-                            <div class="col-sm-6">
-                                <input type="text" id="cron" name="cron" class="form-control" data-toggle="tooltip" data-placement="bottom" title="作业启动时间的cron表达式" required />
-                            </div>
-                        </div>
-                    </div>
-                    <div class="col-sm-3">
-                        <div class="form-group">
-                            <label for="sharding-total-count" class="col-sm-6 control-label" data-lang="job-sharding-total-count"></label>
-                            <div class="col-sm-6">
-                                <input type="number" min=1 id="sharding-total-count" name="shardingTotalCount" class="form-control" data-toggle="tooltip" data-placement="bottom" title="作业分片总数"/>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="col-sm-4">
-                        <div class="form-group">
-                            <label for="job-parameter" class="col-sm-6 control-label" data-lang="job-parameter"></label>
-                            <div class="col-sm-6">
-                                <input type="text" id="job-parameter" name="jobParameter" class="form-control" data-toggle="tooltip" data-placement="bottom" title="可以配置多个相同的作业,但是用不同的参数作为不同的调度实例" />
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="row">
-                    <div class="col-sm-4">
-                        <div class="form-group">
-                            <label for="max-time-diff-seconds" class="col-sm-6 control-label" data-lang="job-max-time-diff-seconds"></label>
-                            <div class="col-sm-6">
-                                <input type="number" id="max-time-diff-seconds" name="maxTimeDiffSeconds" class="form-control" data-toggle="tooltip" data-placement="bottom" title="如果时间误差超过配置秒数则作业启动时将抛异常。配置为-1表示不检查时间误差。" />
-                            </div>
-                        </div>
-                    </div>
-                    <div class="col-sm-3">
-                        <div class="form-group">
-                            <label for="reconcile-interval-minutes" class="col-sm-6 control-label" data-lang="job-reconcile-interval-minutes"></label>
-                            <div class="col-sm-6">
-                                <input type="number" id="reconcile-interval-minutes" name="reconcileIntervalMinutes" class="form-control" data-toggle="tooltip" data-placement="bottom" title="修复错误状态的作业服务器扫描修复周期。配置为-1表示不启用修复动作。" />
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="row">
-                    <div class="col-sm-4">
-                        <div class="form-group">
-                            <label for="monitor-execution" class="col-sm-6 control-label" data-lang="job-monitor-execution"></label>
-                            <div class="col-sm-6">
-                                <input type="checkbox" id="monitor-execution" name="monitorExecution" data-toggle="tooltip" data-placement="bottom" title="每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率,因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。也无法实现作业失效转移。每次作业执行时间和间隔时间均较长短的情况,建议监控作业运行时状态,可保证数据不会重复选取。" />
-                            </div>
-                        </div>
-                    </div>
-                    <div class="col-sm-3">
-                        <div class="form-group">
-                            <label for="failover" class="col-sm-6 control-label" data-lang="job-failover"></label>
-                            <div class="col-sm-6">
-                                <input type="checkbox" id="failover" name="failover" data-toggle="tooltip" data-placement="bottom" title="是否开启任务执行失效转移,开启表示如果作业在一次任务执行中途宕机,允许将该次未完成的任务在另一作业节点上补偿执行。" />
-                            </div>
-                        </div>
-                    </div>
-                    <div class="col-sm-4">
-                        <div class="form-group">
-                            <label for="misfire" class="col-sm-6 control-label" data-lang="job-misfire"></label>
-                            <div class="col-sm-6">
-                                <input type="checkbox" id="misfire" name="misfire" data-toggle="tooltip" data-placement="bottom" title="是否开启任务错过重新执行" />
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="row">
-                    <div class="col-sm-4">
-                        <div class="form-group">
-                            <div id="streaming-process-group" hidden="hidden">
-                                <label for="streaming-process" class="col-sm-6 control-label" data-lang="job-streaming-process"></label>
-                                <div class="col-sm-6">
-                                    <input type="checkbox" id="streaming-process" name="streamingProcess" data-toggle="tooltip" data-placement="bottom" title="如果流式处理数据, 则fetchData不返回空结果将持续执行作业; 如果非流式处理数据, 则处理数据完成后作业结束" />
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label for="sharding-item-parameters" class="col-sm-2 control-label" data-lang="job-sharding-item-parameters"></label>
-                    <div class="col-sm-9">
-                        <textarea id="sharding-item-parameters" name="shardingItemParameters" class="form-control" data-toggle="tooltip" data-placement="bottom" title="分片序列号和参数用等号分隔,多个键值对用逗号分隔,类似map。分片序列号从0开始,不可大于或等于作业分片总数。如:0=a,1=b,2=c"></textarea>
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label for="job-sharding-strategy-type" class="col-sm-2 control-label" data-lang="job-sharding-strategy-type"></label>
-                    <div class="col-sm-9">
-                        <input type="text" id="job-sharding-strategy-type" name="jobShardingStrategyType" class="form-control" data-toggle="tooltip" data-placement="bottom" title="默认使用按照IP地址顺序分片策略,可参照文档定制化分片策略" />
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label for="job-executor-service-handler-type" class="col-sm-2 control-label" data-lang="job-executor-service-handler-type"></label>
-                    <div class="col-sm-9">
-                        <input type="text" id="job-executor-service-handler-type" name="jobExecutorServiceHandlerType" class="form-control" data-toggle="tooltip" data-placement="bottom" title="扩展`ExecutorServiceHandler`接口,定制线程池。" />
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label for="job-error-handler-type" class="col-sm-2 control-label" data-lang="job-error-handler-type"></label>
-                    <div class="col-sm-9">
-                        <input type="text" id="job-error-handler-type" name="jobErrorHandlerType" class="form-control" data-toggle="tooltip" data-placement="bottom" title="扩展`JobErrorHandler`接口,定制异常处理流程,默认实现是记录日志但不抛出异常。" />
-                    </div>
-                </div>
-                <div class="form-group">
-                    <label for="description" class="col-sm-2 control-label" data-lang="job-description"></label>
-                    <div class="col-sm-9">
-                        <textarea id="description" name="description" class="form-control"></textarea>
-                    </div>
-                </div>
-                <div class="form-group" id="script-command-line-group" hidden="hidden">
-                    <label for="script-command-line" class="col-sm-2 control-label" data-lang="job-script-command-line"></label>
-                    <div class="col-sm-9">
-                        <input type="text" id="script-command-line" name="scriptCommandLine" class="form-control" data-toggle="tooltip" data-placement="bottom" title="执行脚本的全路径名称,可以包含参数" />
-                    </div>
-                </div>
-                <button type="reset" class="btn-xs btn-inverse" id="reset" data-lang="operation-reset"></button>
-                <button id="update-job-info-btn" type="submit" class="btn-xs btn-primary" data-lang="operation-submit"></button>
-            </form>
-    </div>
-</div>
-<script src="lib/bootstrap-table/bootstrap-table.js"></script>
-<script src="lib/BootstrapValidator/js/bootstrapValidator.js"></script>
-<script src="lib/BootstrapValidator/js/bootstrapValidator_zh_CN.js"></script>
-<script src="js/util/common.js"></script>
-<script src="js/status/job/job_config.js"></script>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/job/job_status_detail.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/job/job_status_detail.html
deleted file mode 100644
index 13d3478..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/job/job_status_detail.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<div class="index-content">
-    <section class="content-header">
-        <h4><span data-lang="job-name"></span>:<span id="job-name"></span></h4>
-        <ol class="breadcrumb">
-            <li class="active"><i class="fa fa-tasks" data-lang="sidebar-job-operation"></i></li>
-            <li><a href="#" id="breadcrumb-job" data-lang="sidebar-job-dimension"></a></li>
-            <li class="active" data-lang="job-shardings-detail"></li>
-        </ol>
-    </section>
-    <section class="content">
-        <table id="sharding" data-pagination="true" data-page-list="[10, 20, 50, 100]" data-search="true" data-show-refresh="true" data-show-toggle="true" data-striped="true">
-            <thead>
-            <tr>
-                <th data-field="item" data-sortable="true"><span data-lang="job-sharding-item"></span></th>
-                <th data-field="serverIp" data-sortable="true"><span data-lang="server-ip"></span></th>
-                <th data-field="instanceId" data-sortable="true"><span data-lang="job-pid"></span></th>
-                <th data-field="status" data-formatter="shardingStatusFormatter"><span data-lang="status"></span></th>
-                <th data-field="failover" data-formatter="failoverFormatter"><span data-lang="job-failover"></span></th>
-                <th data-field="operation" data-formatter="generateOperationButtons"><span data-lang="operation"></span></th>
-            </tr>
-            </thead>
-        </table>
-    </section>
-</div>
-
-<script src="lib/bootstrap-table/bootstrap-table.js"></script>
-<script src="lib/BootstrapValidator/js/bootstrapValidator.js"></script>
-<script src="lib/BootstrapValidator/js/bootstrapValidator_zh_CN.js"></script>
-<script src="js/util/common.js"></script>
-<script src="js/status/job/job_status_detail.js"></script>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/job/jobs_status_overview.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/job/jobs_status_overview.html
deleted file mode 100644
index f355778..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/job/jobs_status_overview.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<div class="index-content">
-    <section class="content-header">
-        <h4 data-lang="sidebar-job-dimension"></h4>
-        <ol class="breadcrumb">
-            <li class="active"><i class="fa fa-tasks" data-lang="sidebar-job-operation"></i></li>
-            <li class="active" data-lang="sidebar-job-dimension"></li>
-        </ol>
-    </section>
-    <section class="content">
-        <table id="jobs-status-overview-tbl" data-pagination="true" data-page-list="[10, 20, 50, 100]" data-search="true" data-show-refresh="true" data-show-toggle="true" data-striped="true">
-            <thead>
-            <tr>
-                <th data-field="jobName" data-sortable="true"><span data-lang="job-name"></span></th>
-                <th data-field="shardingTotalCount" data-sortable="true"><span data-lang="job-sharding-total-count"></span></th>
-                <th data-field="cron" data-sortable="true"><span data-lang="job-cron"></span></th>
-                <th data-field="description" data-sortable="true"><span data-lang="job-description"></span></th>
-                <th data-field="status" data-sortable="true" data-formatter="statusFormatter"><span data-lang="status"></span></th>
-                <th data-field="operation" data-formatter="generateOperationButtons"><span data-lang="operation"></span></th>
-            </tr>
-            </thead>
-        </table>
-    </section>
-</div>
-<div class="modal" id="data-update-job" tabindex="-1" role="dialog" aria-labelledby="detailModalLabel" aria-hidden="true">
-    <div class="modal-dialog">
-        <div class="update-model-size">
-            <div class="modal-content">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
-                    <h2 class="modal-title" data-lang="update-job"></h2>
-                    <div id="job-overviews-name" hidden="hidden"></div>
-                </div>
-                <div class="modal-body" id="update-job-body">
-                </div>
-            </div>
-        </div>
-    </div>
-</div>
-<script src="lib/bootstrap-table/bootstrap-table.js"></script>
-<script src="js/util/common.js"></script>
-<script src="js/status/job/jobs_status_overview.js"></script>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/server/server_status_detail.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/server/server_status_detail.html
deleted file mode 100644
index 5e603e7..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/server/server_status_detail.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<div class="index-content">
-    <section class="content-header">
-        <h4><span data-lang="server-ip"></span>:<label id="server-ip"></label></h4>
-        <ol class="breadcrumb">
-            <li class="active"><i class="fa fa-tasks" data-lang="sidebar-job-operation"></i></li>
-            <li><a href="#" id="breadcrumb-server" data-lang="sidebar-server-dimension"></a></li>
-            <li class="active" data-lang="server-detail"></li>
-        </ol>
-    </section>
-    <section class="content">
-        <table id="server-jobs-tbl" data-pagination="true" data-page-list="[10, 20, 50, 100]" data-search="true" data-show-refresh="true" data-show-toggle="true" data-striped="true">
-            <thead>
-            <tr>
-                <th data-field="jobName" data-sortable="true"><span data-lang="job-name"></span></th>
-                <th data-field="instanceCount"><span data-lang="server-instance-count"></span></th>
-                <th data-field="status" data-sortable="true" data-formatter="statusFormatter"><span data-lang="status"></span></th>
-                <th data-field="operation" data-formatter="generateOperationButtons"><span data-lang="operation"></span></th>
-            </tr>
-            </thead>
-        </table>
-        <span id="chosen-job-name" class="hide"></span>
-    </section>
-</div>
-<script src="lib/bootstrap-table/bootstrap-table.js"></script>
-<script src="js/util/common.js"></script>
-<script src="js/status/server/server_status_detail.js"></script>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/server/servers_status_overview.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/server/servers_status_overview.html
deleted file mode 100644
index d3e25ae..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/html/status/server/servers_status_overview.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<div class="index-content">
-    <section class="content-header">
-        <h4 data-lang="sidebar-server-dimension"></h4>
-        <ol class="breadcrumb">
-            <li class="active"><i class="fa fa-tasks" data-lang="sidebar-job-operation"></i></li>
-            <li class="active" data-lang="sidebar-server-dimension"></li>
-        </ol>
-    </section>
-    <section class="content">
-        <table id="servers-overview-tbl" data-pagination="true" data-page-list="[10, 20, 50, 100]" data-search="true" data-show-refresh="true" data-show-toggle="true" data-striped="true">
-            <thead>
-            <tr>
-                <th data-field="serverIp" data-sortable="true"><span data-lang="server-ip"></span></th>
-                <th data-field="instancesNum" data-sortable="true"><span data-lang="server-instance-count"></span></th>
-                <th data-field="jobsNum" data-sortable="true"><span data-lang="server-job-num"></span></th>
-                <th data-field="disabledJobsNum" data-sortable="true"><span data-lang="server-disabled-jobs-num"></span></th>
-                <th data-field="operation" data-formatter="generateOperationButtons"><span data-lang="operation"></span></th>
-            </tr>
-            </thead>
-        </table>
-    </section>
-</div>
-<script src="lib/bootstrap-table/bootstrap-table.js"></script>
-<script src="js/util/common.js"></script>
-<script src="js/status/server/servers_status_overview.js"></script>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/i18n/message.properties b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/i18n/message.properties
deleted file mode 100644
index 03a8ee2..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/i18n/message.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/i18n/message_en.properties b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/i18n/message_en.properties
deleted file mode 100644
index 0c2d7a6..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/i18n/message_en.properties
+++ /dev/null
@@ -1,195 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-sidebar-global-settings=Global settings
-sidebar-registry-center=Registry center
-sidebar-event-trace-data-source=Event trace data source
-sidebar-job-operation=Job operation
-sidebar-job-dimension=Job dimension
-sidebar-server-dimension=Server dimension
-sidebar-job-history=Job history
-sidebar-job-trace=Job trace
-sidebar-history-status=History status
-sidebar-help=Help
-
-switch-language=Switch language
-language-zh=中文
-language-en=English
-
-
-switch-theme-title=Switch theme
-switch-theme-blue=Blue
-switch-theme-white=White
-switch-theme-purple=Purple
-switch-theme-green=Green
-switch-theme-yellow=Yellow
-switch-theme-red=Red
-switch-theme-blue-light=Blue Light
-switch-theme-white-light=White Light
-switch-theme-purple-light=Purple Light
-switch-theme-green-light=Green Light
-switch-theme-yellow-light=Yellow Light
-switch-theme-red-light=Red Light
-
-registry-center-dimension=Switch registry center
-add-registry-center=Add registry center
-registry-center-name=Name
-registry-center-zk-address=Zookeeper address
-registry-center-namespace=Namespace
-registry-center-digest=Digest
-registry-center-name-not-null=Registry center name cannot be null
-registry-center-name-length-limit=Registry center name should less than 50 characters
-registry-center-existed=Registry center already exists
-registry-center-zk-address-not-null=Registry center zookeeper address cannot be null
-registry-center-zk-address-length-limit=Registry center zookeeper address should less than 100 characters
-registry-center-namespace-length-limit=Registry center namespace should less than 50 characters
-registry-center-digest-length-limit=Registry center digest should less than 20 characters
-registry-center-connect-failed=The operation is unsuccessful, for the reason: the connection failed, please check the registry center configuration
-
-event-trace-data-source-dimension=Switch event trace data source
-add-event-trace-data-source=Add event trace data source
-event-trace-data-source-name=Name
-event-trace-data-source-driver=Driver
-event-trace-data-source-url=Url
-event-trace-data-source-username=Username
-event-trace-data-source-password=Password
-event-trace-data-source-name-not-null=Event trace data source name cannot be null
-event-trace-data-source-name-length-limit=Event trace data source name should less than 50 characters
-event-trace-data-source-existed=Event trace data source already exists
-event-trace-data-source-url-not-null=Event trace data source url cannot be null
-event-trace-data-source-url-length-limit=Event trace data source url should less than 200 characters
-event-trace-data-source-username-not-null=Event trace data source username cannot be null
-event-trace-data-source-username-length-limit=Event trace data source username should less than 50 characters
-event-trace-data-source-password-length-limit=Event trace data source password should less than 50 characters
-event-trace-data-source-test-fail=Event trace data source test connection failed!
-event-trace-data-source-test-succeed=Event trace data source test connection succeeded!
-event-trace-data-source-connect-failed=The operation is unsuccessful, for the reason: the connection failed, please check the event trace data source configuration
-
-job-detail=Job detail
-update-job=Update job
-job-name=Job name
-job-shardings-detail=Job shardings detail
-job-parameter=Job parameter
-job-sharding-strategy-type=Job sharding strategy type
-job-error-handler-type=Job error handler
-job-cron=Crontab
-job-sharding-total-count=Sharding total count
-job-max-time-diff-seconds=Max time diff seconds
-job-reconcile-interval-minutes=Reconcile interval minutes
-job-monitor-execution=Monitor execution
-job-failover=Failover
-job-misfire=Misfire
-job-streaming-process=Streaming process
-job-sharding-item-parameters=Sharding item parameters
-job-executor-service-handler-type=Executor service handler
-job-description=Description
-job-script-command-line=Script command line
-job-sharding-item=Sharding item
-job-pid=PID
-job-sharding-count-not-null=Sharding count cannot be null
-job-sharding-count-should-be-integer=Sharding count should be integer
-job-cron-length-limit=Job crontab should less than 40 characters
-job-cron-not-null=Job crontab cannot be null
-job-monitor-port-should-be-integer=Job monitor port should be integer
-job-monitor-port-not-null=Job monitor port cannot be null
-job-monitor-port-range-limit=The monitoring port range must be between 1000 ~ 65535, and -1 indicates that port monitoring is not enabled
-
-placeholder-cron=The cron expression for the job start time
-placeholder-sharding-total-count=Sharding total count
-placeholder-job-parameter=You can configure multiple identical jobs, but use different parameters as different scheduling instances
-placeholder-max-time-diff-seconds=If the time error exceeds the number of configured seconds, the problem will be thrown when the job starts. The configuration is -1 for not checking the time error.
-placeholder-reconcile-interval-minutes=Fix the error-state job server scan repair cycle. The configuration is -1 indicating that the fix action is not enabled.
-placeholder-monitor-execution=Each job execution time and interval time is very short, suggest not to monitor homework runtime state in order to enhance efficiency, because it is a transient state, so no need to monitor. Users will be asked to increase their own data accumulation monitoring. There is no guarantee that the data will be repeated, which should be achieved in the operation. It also fails to implement the job failure transfer. It is recommended that the monitoring operation s [...]
-placeholder-failover=Whether open task execution failure, open said if the job tasks performed in a halfway down, allowing the time unfinished task on the node of another job compensation is carried out.
-placeholder-misfire=Whether the task is open misses the re-execution
-placeholder-streaming-process=If the data is processed, fetch data will not return empty results and will continue to perform the work. If the data is not flowing, the data is processed and the job is finished
-placeholder-sharding-item-parameters=Separate serial Numbers and parameters are separated by equals, and multiple key values are separated by commas, similar to map. The serial serial Numbers start from 0, not greater than or equal to the total number of assignments. For example, 0 = a, 1 = b, 2 = c
-placeholder-job-sharding-strategy-type=By default, you can customize the share-chip strategy based on IP address sequentially
-placeholder-job-executor-service-handler-type=Extension 'JobExecutorServiceHandler' interface, custom thread pool.
-placeholder-job-error-handler-type=Extension 'JobErrorHandler' interface, custom exception handling process, the default implementation is log but not throw an exception.
-placeholder-script-command-line=The full path name of the execution script can contain parameters
-
-server-detail=Server detail
-server-ip=Server IP
-server-job-num=Job num
-server-disabled-jobs-num=Disabled jobs num
-server-instance-count=Instance count
-
-operation=Operation
-operation-add=Add
-operation-submit=Submit
-operation-confirm=Confirm
-operation-cancel=Cancel
-operation-delete=Delete
-operation-trigger=Trigger
-operation-shutdown=Shutdown
-operation-remove=Remove
-operation-reset=Reset
-operation-test-connect=Test connect
-operation-connect=Connect
-operation-enable=Enable
-operation-disable=Disable
-operation-detail=Detail
-operation-update=Update
-
-status=Status
-status-running=Running
-status-sharding-flag=Sharding flag
-status-staging=Staging
-status-crashed=Crashed
-status-ok=OK
-status-task-failed=Failed
-status-task-finished=Finished
-status-task-error=Error
-status-task-killed=Killed
-status-connected=Connected
-status-enabled=Enabled
-status-disabled=Disabled
-status-offline=Offline
-
-creation-start-time=Creation start time
-creation-end-time=Creation end time
-creation-time=Creation time
-start-time=Start time
-complete-time=Complete time
-failure-reason=Failure reason
-comments=Comments
-
-execute-result=Execute result
-execute-result-all=All
-execute-result-success=success
-execute-result-failure=failure
-execute-result-null=Null
-
-design-concept-title=Design concept
-design-concept-info-1=Console is not related to Elastic Job, it just reading data from registry center and showing the status of jobs, or updating data to registry center which will change the configuration.
-design-concept-info-2=Console can operate lifecycle for jobs, such as enable and disable, but can not the start and stop job's process, because of console server and job servers are completely distributed, console can not control the job servers.
-
-major-features-title=Major features
-major-features-info-1=View status of jobs and servers
-major-features-info-2=Quick update and delete jobs
-major-features-info-3=Disable and enable Jobs
-major-features-info-4=Multiple registry centers supported
-major-features-info-5=Trace jobs execute history
-
-unsupported-title=Unsupported
-unsupported-info=Add job. Because of job is added at first running time automatically, it is unnecessary to add job from console. So just start the job app.
-
-update-job-confirm-info=It will affect the running job by updating these fields are monitor execution, failover and misfire. please be careful!
-confirm-to-close=Are you sure to close it?
-confirm-to-delete=Are you sure to delete it?
-operation-succeed=Operation complete successfully
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/i18n/message_zh.properties b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/i18n/message_zh.properties
deleted file mode 100644
index 964d881..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/i18n/message_zh.properties
+++ /dev/null
@@ -1,195 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-sidebar-global-settings=全局配置
-sidebar-registry-center=注册中心配置
-sidebar-event-trace-data-source=事件追踪数据源配置
-sidebar-job-operation=作业操作
-sidebar-job-dimension=作业维度
-sidebar-server-dimension=服务器维度
-sidebar-job-history=作业历史
-sidebar-job-trace=历史轨迹
-sidebar-history-status=历史状态
-sidebar-help=帮助
-
-switch-language=选择语言
-language-zh=中文
-language-en=English
-
-
-switch-theme-title=更改主题
-switch-theme-blue=蓝色
-switch-theme-white=白色
-switch-theme-purple=紫色
-switch-theme-green=绿色
-switch-theme-yellow=黄色
-switch-theme-red=红色
-switch-theme-blue-light=蓝色高亮
-switch-theme-white-light=白色高亮
-switch-theme-purple-light=紫色高亮
-switch-theme-green-light=绿色高亮
-switch-theme-yellow-light=黄色高亮
-switch-theme-red-light=红色高亮
-
-registry-center-dimension=切换注册中心
-add-registry-center=添加注册中心
-registry-center-name=注册中心名称
-registry-center-zk-address=注册中心地址
-registry-center-namespace=命名空间
-registry-center-digest=登录凭证
-registry-center-name-not-null=注册中心名称不能为空
-registry-center-name-length-limit=注册中心名称长度不能超过50字符大小
-registry-center-existed=注册中心已经存在
-registry-center-zk-address-not-null=注册中心地址不能为空
-registry-center-zk-address-length-limit=注册中心地址长度不能超过100字符大小
-registry-center-namespace-length-limit=命名空间长度不能超过50字符大小
-registry-center-digest-length-limit=登录凭证长度不能超过20字符大小
-registry-center-connect-failed=操作未成功,原因:连接失败,请检查注册中心配置
-
-event-trace-data-source-dimension=切换事件追踪数据源
-add-event-trace-data-source=添加事件追踪数据源
-event-trace-data-source-name=事件追踪数据源名称
-event-trace-data-source-driver=事件追踪数据源驱动
-event-trace-data-source-url=事件追踪数据源连接地址
-event-trace-data-source-username=事件追踪数据源用户名
-event-trace-data-source-password=事件追踪数据源密码
-event-trace-data-source-name-not-null=数据源名称不能为空
-event-trace-data-source-name-length-limit=数据源名称长度不能超过50字符大小
-event-trace-data-source-existed=数据源已经存在
-event-trace-data-source-url-not-null=数据库URL不能为空
-event-trace-data-source-url-length-limit=数据库URL长度不能超过200字符大小
-event-trace-data-source-username-not-null=数据库用户名不能为空
-event-trace-data-source-username-length-limit=数据库用户名不能超过50字符大小
-event-trace-data-source-password-length-limit=数据库口令不能超过50字符大小
-event-trace-data-source-test-fail=事件追踪数据源测试连接失败!
-event-trace-data-source-test-succeed=事件追踪数据源测试连接成功!
-event-trace-data-source-connect-failed=操作未成功,原因:连接失败,请检查事件追踪数据源配置
-
-job-detail=分片状态
-update-job=修改作业
-job-name=作业名称
-job-shardings-detail=作业分片详情
-job-parameter=自定义参数
-job-sharding-strategy-type=作业分片策略类型
-job-error-handler-type=定制异常处理类全路径
-job-cron=Cron表达式
-job-sharding-total-count=作业分片总数
-job-max-time-diff-seconds=最大容忍本机与注册中心的时间误差秒数
-job-reconcile-interval-minutes=作业服务器状态修复周期
-job-monitor-execution=监控作业执行时状态
-job-failover=支持自动失效转移
-job-misfire=支持错过重执行
-job-streaming-process=是否流式处理数据
-job-sharding-item-parameters=分片序列号/参数对照表
-job-executor-service-handler-type=定制线程池全路径
-job-description=作业描述信息
-job-script-command-line=脚本作业全路径
-job-sharding-item=分片项
-job-pid=进程ID
-job-sharding-count-not-null=分片数量不能为空
-job-sharding-count-should-be-integer=分片数量只能是整数
-job-cron-length-limit=cron表达式不能超过40字符大小
-job-cron-not-null=cron表达式不能为空
-job-monitor-port-should-be-integer=监控端口只能是整数
-job-monitor-port-not-null=监控端口不能为空
-job-monitor-port-range-limit=监控端口范围必须在1000~65535之间,-1表示不启用端口监控
-
-placeholder-cron=作业启动时间的cron表达式
-placeholder-sharding-total-count=作业分片总数
-placeholder-job-parameter=可以配置多个相同的作业,但是用不同的参数作为不同的调度实例
-placeholder-max-time-diff-seconds=如果时间误差超过配置秒数则作业启动时将抛异常。配置为-1表示不检查时间误差。
-placeholder-reconcile-interval-minutes=修复错误状态的作业服务器扫描修复周期。配置为-1表示不启用修复动作。
-placeholder-monitor-execution=每次作业执行时间和间隔时间均非常短的情况,建议不监控作业运行时状态以提升效率,因为是瞬时状态,所以无必要监控。请用户自行增加数据堆积监控。并且不能保证数据重复选取,应在作业中实现幂等性。也无法实现作业失效转移。每次作业执行时间和间隔时间均较长短的情况,建议监控作业运行时状态,可保证数据不会重复选取。
-placeholder-failover=是否开启任务执行失效转移,开启表示如果作业在一次任务执行中途宕机,允许将该次未完成的任务在另一作业节点上补偿执行。
-placeholder-misfire=是否开启任务错过重新执行
-placeholder-streaming-process=如果流式处理数据, 则fetchData不返回空结果将持续执行作业; 如果非流式处理数据, 则处理数据完成后作业结束
-placeholder-sharding-item-parameters=分片序列号和参数用等号分隔,多个键值对用逗号分隔,类似map。分片序列号从0开始,不可大于或等于作业分片总数。如:0=a,1=b,2=c
-placeholder-job-sharding-strategy-type=默认使用按照IP地址顺序分片策略,可参照文档定制化分片策略
-placeholder-job-executor-service-handler-type=扩展 `JobExecutorServiceHandler` 接口,定制线程池
-placeholder-job-error-handler-type=扩展 `JobErrorHandler` 接口,定制异常处理流程,默认实现是记录日志但不抛出异常
-placeholder-script-command-line=执行脚本的全路径名称,可以包含参数
-
-server-detail=服务器详情
-server-ip=服务器IP
-server-job-num=作业总数
-server-disabled-jobs-num=禁用作业数
-server-instance-count=运行实例数
-
-operation=操作
-operation-add=添加
-operation-submit=提交
-operation-confirm=确认
-operation-cancel=关闭
-operation-delete=删除
-operation-trigger=触发
-operation-shutdown=终止
-operation-remove=删除
-operation-reset=重置
-operation-test-connect=测试连接
-operation-connect=连接
-operation-enable=生效
-operation-disable=失效
-operation-detail=详情
-operation-update=修改
-
-status=状态
-status-running=运行中
-status-sharding-flag=分片待调整
-status-staging=等待运行
-status-crashed=已下线
-status-ok=正常
-status-task-failed=运行失败
-status-task-finished=已完成
-status-task-error=启动失败
-status-task-killed=主动终止
-status-connected=已连
-status-enabled=已启用
-status-disabled=已失效
-status-offline=已下线
-
-creation-start-time=创建开始时间
-creation-end-time=创建结束时间
-creation-time=创建时间
-start-time=开始时间
-complete-time=完成时间
-failure-reason=失败原因
-comments=备注
-
-execute-result=执行结果
-execute-result-all=全部
-execute-result-success=成功
-execute-result-failure=失败
-execute-result-null=空
-
-design-concept-title=设计理念
-design-concept-info-1=本控制台和Elastic Job并无直接关系,是通过读取Elastic Job的注册中心数据展现作业状态,或更新注册中心数据修改全局配置。
-design-concept-info-2=控制台只能控制作业本身是否运行,但不能控制作业进程的启停,因为控制台和作业本身服务器是完全分布式的,控制台并不能控制作业服务器。
-
-major-features-title=主要功能
-major-features-info-1=查看作业以及服务器状态
-major-features-info-2=快捷的修改以及删除作业设置
-major-features-info-3=启用和禁用作业
-major-features-info-4=跨注册中心查看作业
-major-features-info-5=查看作业运行轨迹和运行状态
-
-unsupported-title=不支持项
-unsupported-info=添加作业。因为作业都是在首次运行时自动添加,使用控制台添加作业并无必要。直接在作业服务器启动包含Elastic Job的作业进程即可。
-
-update-job-confirm-info=更新监控作业执行时状态、支持自动失效转移、支持misfire会对运行中的作业造成影响,请慎重操作!
-confirm-to-close=确认要关闭吗?
-confirm-to-delete=确认要删除吗?
-operation-succeed=操作已成功完成
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/index.html b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/index.html
deleted file mode 100644
index f2a9042..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/index.html
+++ /dev/null
@@ -1,319 +0,0 @@
-<!--
-  ~ Licensed to the Apache Software Foundation (ASF) under one or more
-  ~ contributor license agreements.  See the NOTICE file distributed with
-  ~ this work for additional information regarding copyright ownership.
-  ~ The ASF licenses this file to You under the Apache License, Version 2.0
-  ~ (the "License"); you may not use this file except in compliance with
-  ~ the License.  You may obtain a copy of the License at
-  ~
-  ~     http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License.
-  -->
-
-<!DOCTYPE html>
-
-<html>
-    <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge">
-    <title>Elastic Job Lite Console</title>
-    <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
-    <link rel="stylesheet" href="lib/bootstrap/css/bootstrap.min.css">
-    <link rel="stylesheet" href="lib/AdminLTE/css/AdminLTE.min.css">
-    <link rel="stylesheet" href="lib/AdminLTE/css/skins/_all-skins.min.css">
-    <link rel="stylesheet" href="lib/font-awesome-4.5.0/css/font-awesome.min.css">
-    <link rel="stylesheet" href="lib/bootstrap-table/bootstrap-table.min.css">
-    <link rel="stylesheet" href="lib/daterangepicker/daterangepicker.css">
-    <link rel="stylesheet" href="css/index.css">
-    <script src="lib/jquery/jquery-2.1.4.min.js"></script>
-    <script src="lib/jquery/jquery.i18n.properties-min.js"></script>
-    <script src="lib/bootstrap/js/bootstrap.min.js"></script>
-    <script src="lib/AdminLTE/js/app.min.js"></script>
-    <script src="js/util/common.js"></script>
-    <script src="js/util/dashboard.js"></script>
-    <script src="js/index.js"></script>
-    </head>
-    <body class="hold-transition skin-blue-light sidebar-mini">
-        <div class="wrapper">
-            <header class="main-header">
-            <a class="logo">
-                <span class="logo-lg">Elastic Job Lite v3.0.0</span>
-            </a>
-            <span id="index-job-name" hidden="hidden"></span>
-            <span id="index-server-ip" hidden="hidden"></span>
-            <nav class="navbar navbar-static-top" role="navigation">
-                <div id="navbar" class="navbar-custom-menu">
-                    <ul class="nav navbar-nav">
-                        <li class="dropdown"><a id="registry-center-dimension-link" href="#" class="dropdown-toggle" data-toggle="dropdown" data-lang="registry-center-dimension"><span class="caret"></span></a>
-                            <ul id="registry-center-dimension" class="dropdown-menu"></ul>
-                        </li>
-                        <li class="dropdown"><a id="data-source-dimension-link" href="#" class="dropdown-toggle" data-toggle="dropdown" data-lang="event-trace-data-source-dimension"><span class="caret"></span></a>
-                            <ul id="data-source-dimension" class="dropdown-menu"></ul>
-                        </li>
-                        <li class="dropdown">
-                            <a href="#" class="dropdown-toggle">
-                                <i class="fa fa-user"></i>
-                                <span id="authority"></span>
-                            </a>
-                        </li>
-                        <li><a href="#" data-toggle="control-sidebar"><i class="fa fa-flag"></i></a></li>
-                        <li class="dropdown">
-                            <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-lang="switch-language"></a>
-                            <ul class="dropdown-menu">
-                                <li><a href="#" id="lang-zh" data-lang="language-zh"></a></li>
-                                <li><a href="#" id="lang-en" data-lang="language-en"></a></li>
-                            </ul>
-                        </li>
-                    </ul>
-                </div>
-            </nav>
-        </header>
-        <aside class="main-sidebar">
-            <section class="sidebar">
-                <ul class="sidebar-menu">
-                    <li class="treeview" id="settings">
-                        <a href="#">
-                            <i class="fa fa-cogs" data-lang="sidebar-global-settings"></i><i class="pull-right fa fa-angle-left "></i>
-                            <div class="pull-right">
-                                <span id="reg-nav-tag" class="label label-primary"></span>
-                                <span id="event-trace-nav-tag" class="label label-primary"></span>
-                            </div>
-                        </a>
-                        <ul class="treeview-menu">
-                            <li><a href="#" id="reg-center" class="sub-menu"><i class="fa fa-circle-o" data-lang="sidebar-registry-center"></i></a></li>
-                            <li><a href="#" id="event-trace-data-source" class="sub-menu"><i class="fa fa-circle-o" data-lang="sidebar-event-trace-data-source"></i></a></li>
-                        </ul>
-                    </li>
-                    <li class="treeview" id="server">
-                        <a href="#">
-                            <i class="fa fa-tasks" data-lang="sidebar-job-operation"></i><i class="pull-right fa fa-angle-left "></i>
-                            <div class="pull-right">
-                                <span id="job-nav-tag" class="label label-primary"></span>
-                                <span id="server-nav-tag" class="label label-primary"></span>
-                            </div>
-                        </a>
-                        <ul class="treeview-menu">
-                            <li><a href="#" id="job-status" class="sub-menu"><i class="fa fa-circle-o" data-lang="sidebar-job-dimension"></i></a></li>
-                            <li><a href="#" id="server-status" class="sub-menu"><i class="fa fa-circle-o" data-lang="sidebar-server-dimension"></i></a></li>
-                        </ul>
-                    </li>
-                    <li class="treeview" id="history">
-                        <a href="#">
-                            <i class="fa fa-history" data-lang="sidebar-job-history"></i><i class="pull-right fa fa-angle-left "></i>
-                        </a>
-                        <ul class="treeview-menu">
-                            <li><a href="#" id="event-trace-history" class="sub-menu"><i class="fa fa-circle-o" data-lang="sidebar-job-trace"></i></a></li>
-                            <li><a href="#" id="status-history" class="sub-menu"><i class="fa fa-circle-o" data-lang="sidebar-history-status"></i></a></li>
-                        </ul>
-                    </li>
-                    <li class="treeview">
-                        <a href="#" id="help" class="sub-menu">
-                            <i class="fa fa-book" data-lang="sidebar-help"></i>
-                        </a>
-                    </li>
-                </ul>
-            </section>
-        </aside>
-        <div id="content" class="lang-en">
-        </div>
-        <footer class="main-footer">
-            <strong>Copyright &copy; 2018-2020 <a href="http://elaticjob.shardingsphere.apache.org" data-lang="apache"></a>.</strong> All rights reserved.
-        </footer>
-        <aside class="control-sidebar control-sidebar-dark">
-            <div class="tab-content">
-                <div id="control-sidebar-theme-demo-options-tab" class="tab-pane active">
-                    <h4 class="control-sidebar-heading" data-lang="switch-theme-title"></h4>
-                    <ul class="list-unstyled clearfix">
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-blue" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="bg-blue top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-blue"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-black" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-white"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-purple" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="bg-purple top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-purple"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-green" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="bg-green top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-green"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-yellow" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="bg-yellow top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-yellow"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-red" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="bg-red top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-red"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-blue-light" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="bg-light-blue top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-blue-light"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-black-light" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-white-light"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-purple-light" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="bg-purple top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-purple-light"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-green-light" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="bg-green top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-green-light"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-yellow-light" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="bg-yellow top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-yellow-light"></p>
-                    </li>
-                    <li>
-                        <a href="javascript:void(0);" data-skin="skin-red-light" class="clearfix full-opacity-hover">
-                            <div>
-                                <span class="bg-red top-span"></span>
-                            </div>
-                            <div>
-                                <span class="down-span-left"></span>
-                                <span class="down-span-right"></span>
-                            </div>
-                        </a>
-                        <p class="text-center no-margin" data-lang="switch-theme-red-light"></p>
-                    </li>
-                    </ul>
-                </div>
-            </div>
-        </aside>
-        </div>
-        <div id="message-dialog" class="modal">
-            <div class="modal-dialog">
-                <div class="modal-content">
-                    <div class="modal-body">
-                        <h4 id="message-info"></h4>
-                    </div>
-                    <div class="modal-footer">
-                        <button type="button" class="btn-xs btn-primary" data-dismiss="modal" data-lang="operation-cancel"></button>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div id="history-message-modal" class="modal">
-            <div class="modal-dialog" id="modal-dialog-width">
-                <div class="modal-content">
-                    <div class="modal-body">
-                        <h5 id="history-message"></h5>
-                    </div>
-                    <div class="modal-footer">
-                        <button type="button" class="btn-xs btn-danger" data-dismiss="modal" data-lang="operation-cancel"></button>
-                    </div>
-                </div>
-            </div>
-        </div>
-        <div id="confirm-dialog" class="modal">
-            <div class="modal-dialog">
-                <div class="modal-content">
-                    <div class="modal-body">
-                        <h4 id="confirm-info"></h4>
-                    </div>
-                    <div class="modal-footer">
-                        <button id="confirm-btn" type="button" class="btn-xs btn-danger" data-lang="operation-confirm"></button>
-                        <button type="button" class="btn-xs btn-success" data-dismiss="modal" data-lang="operation-cancel"></button>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </body>
-</html>
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/global/event_trace_data_source.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/global/event_trace_data_source.js
deleted file mode 100644
index ca3e129..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/global/event_trace_data_source.js
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    doLocale();
-    authorityControl();
-    renderDataSources();
-    validate();
-    dealDataSourceModal();
-    handleFieldValidator();
-    submitDataSource();
-    bindButtons();
-    bindConnectionTest();
-});
-
-function renderDataSources() {
-    $("#data-sources").bootstrapTable({
-        url: "api/data-source",
-        cache: false,
-        search: true,
-        showRefresh: true,
-        showColumns: true
-    }).on("all.bs.table", function() {
-        doLocale();
-    });
-    renderDataSourceForDashboardNav();
-}
-
-function generateOperationButtons(val, row) {
-    var operationTd;
-    var name = row.name;
-    if (row.activated) {
-        operationTd = "<button disabled operation='connect-datasource' class='btn-xs' dataSourceName='" + name + "' data-lang='status-connected'></button>&nbsp;<button operation='delete-datasource' class='btn-xs btn-danger' data-toggle='modal' id='delete-dialog' dataSourceName='" + name + "' data-lang='operation-delete'></button>";
-    } else {
-        operationTd = "<button operation='connect-datasource' class='btn-xs btn-info' dataSourceName='" + name + "' data-loading-text='loading...' data-lang='operation-connect'></button>&nbsp;<button operation='delete-datasource' class='btn-xs btn-danger' data-toggle='modal' id='delete-dialog' dataSourceName='" + name + "' data-lang='operation-delete'></button>";
-    }
-    return operationTd;
-}
-
-function bindButtons() {
-    bindConnectButtons();
-    bindDeleteButtons();
-}
-
-function bindConnectButtons() {
-    $(document).off("click", "button[operation='connect-datasource']");
-    $(document).on("click", "button[operation='connect-datasource']", function(event) {
-        var btn = $(this).button("loading");
-        var dataSourceName = $(event.currentTarget).attr("dataSourceName");
-        $.ajax({
-            url: "api/data-source/connect",
-            type: "POST",
-            data: JSON.stringify({"name" : dataSourceName}),
-            contentType: "application/json",
-            dataType: "json",
-            success: function(data) {
-                if (data) {
-                    $("#data-sources").bootstrapTable("refresh");
-                    renderDataSourceForDashboardNav();
-                    showSuccessDialog();
-                } else {
-                    showDataSourceFailureDialog();
-                }
-                btn.button("reset");
-            }
-        });
-    });
-}
-
-function bindDeleteButtons() {
-    $(document).off("click", "button[operation='delete-datasource']");
-    $(document).on("click", "button[operation='delete-datasource']", function(event) {
-        showDeleteConfirmModal();
-        var dataSourceName = $(event.currentTarget).attr("dataSourceName");
-        $(document).off("click", "#confirm-btn");
-        $(document).on("click", "#confirm-btn", function() {
-            $.ajax({
-                url: "api/data-source",
-                type: "DELETE",
-                data: JSON.stringify({"name" : dataSourceName}),
-                contentType: "application/json",
-                dataType: "json",
-                success: function() {
-                    $("#data-sources").bootstrapTable("refresh");
-                    $("#confirm-dialog").modal("hide");
-                    $(".modal-backdrop").remove();
-                    $("body").removeClass("modal-open");
-                    renderDataSourceForDashboardNav();
-                    refreshEventTraceNavTag();
-                }
-            });
-        });
-    });
-}
-
-function dealDataSourceModal() {
-    $("#add-data-source").click(function() {
-        $("#add-data-source-center").modal({backdrop: 'static', keyboard: true});
-    });
-    $("#close-add-data-source-form").click(function() {
-        $("#add-data-source-center").on("hide.bs.modal", function () {
-            $("#data-source-form")[0].reset();
-        });
-        $("#data-source-form").data("bootstrapValidator").resetForm();
-    });
-}
-
-function handleFieldValidator() {
-    $("#password").focus(function() {
-        $("#data-source-form").data("bootstrapValidator").enableFieldValidators("password", true);
-    });
-    $("#password").blur(function() {
-        $("#data-source-form").data("bootstrapValidator").enableFieldValidators("password", "" === $("#password").val() ? false : true);
-    });
-}
-
-function submitDataSource() {
-    $("#add-data-source-btn").on("click", function(event) {
-        if ("" === $("#password").val()) {
-            $("#data-source-form").data("bootstrapValidator").enableFieldValidators("password", false);
-        }
-        var bootstrapValidator = $("#data-source-form").data("bootstrapValidator");
-        bootstrapValidator.validate();
-        if(bootstrapValidator.isValid()) {
-            var name = $("#name").val();
-            var driver = $("#driver").val();
-            var url = $("#url").val();
-            var username = $("#username").val();
-            var password = $("#password").val();
-            $.ajax({
-                url: "api/data-source",
-                type: "POST",
-                data: JSON.stringify({"name": name, "driver": driver, "url": url, "username": username, "password": password}),
-                contentType: "application/json",
-                dataType: "json",
-                success: function(data) {
-                    if (data) {
-                        $("#add-data-source-center").on("hide.bs.modal", function() {
-                            $("#data-source-form")[0].reset();
-                        });
-                        $("#data-source-form").data("bootstrapValidator").resetForm();
-                        $("#add-data-source-center").modal("hide");
-                        $("#data-sources").bootstrapTable("refresh");
-                        $(".modal-backdrop").remove();
-                        $("body").removeClass("modal-open");
-                        renderDataSourceForDashboardNav();
-                        refreshEventTraceNavTag();
-                    }
-                }
-            });
-        }
-    });
-}
-
-function validate() {
-    $("#data-source-form").bootstrapValidator({
-        message: "This value is not valid",
-        feedbackIcons: {
-            valid: "glyphicon glyphicon-ok",
-            invalid: "glyphicon glyphicon-remove",
-            validating: "glyphicon glyphicon-refresh"
-        },
-        fields: {
-            name: {
-                validators: {
-                    notEmpty: {
-                        message: $.i18n.prop("event-trace-data-source-name-not-null")
-                    },
-                    stringLength: {
-                        max: 50,
-                        message: $.i18n.prop("event-trace-data-source-name-length-limit")
-                    },
-                    callback: {
-                        message: $.i18n.prop("event-trace-data-source-existed"),
-                        callback: function() {
-                            var dataSourceName = $("#name").val();
-                            var result = true;
-                            $.ajax({
-                                url: "api/data-source",
-                                contentType: "application/json",
-                                async: false,
-                                success: function(data) {
-                                    for (var index = 0; index < data.length; index++) {
-                                        if (dataSourceName === data[index].name) {
-                                            result = false;
-                                        }
-                                    }
-                                }
-                            });
-                            return result;
-                        }
-                    }
-                }
-            },
-            url: {
-                validators: {
-                    notEmpty: {
-                        message: $.i18n.prop("event-trace-data-source-url-not-null")
-                    },
-                    stringLength: {
-                        max: 200,
-                        message: $.i18n.prop("event-trace-data-source-url-length-limit")
-                    }
-                }
-            },
-            username: {
-                validators: {
-                    notEmpty: {
-                        message: $.i18n.prop("event-trace-data-source-username-not-null")
-                    },
-                    stringLength: {
-                        max: 50,
-                        message: $.i18n.prop("event-trace-data-source-username-length-limit")
-                    }
-                }
-            },
-            password: {
-                validators: {
-                    stringLength: {
-                        max: 50,
-                        message: $.i18n.prop("event-trace-data-source-password-length-limit")
-                    }
-                }
-            }
-        }
-    });
-    $("#data-source-form").submit(function(event) {
-        event.preventDefault();
-    });
-}
-
-function bindConnectionTest() {
-    $("#connect-test").on("click", function() {
-        var name = $("#name").val();
-        var driver = $("#driver").val();
-        var url = $("#url").val();
-        var username = $("#username").val();
-        var password = $("#password").val();
-        $.ajax({
-            url: "api/data-source/connectTest",
-            type: "POST",
-            data: JSON.stringify({"name": name, "driver": driver, "url": url, "username": username, "password": password}),
-            contentType: "application/json",
-            dataType: "json",
-            success: function(data) {
-                if (data) {
-                    showDataSourceTestConnectionSuccessDialog();
-                } else {
-                    showDataSourceTestConnectionFailureDialog();
-                }
-            }
-        });
-    });
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/global/registry_center.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/global/registry_center.js
deleted file mode 100644
index 6b5280a..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/global/registry_center.js
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    doLocale();
-    authorityControl();
-    renderRegCenters();
-    validate();
-    dealRegCenterModal();
-    handleFieldValidator();
-    submitRegCenter();
-    bindButtons();
-});
-
-function renderRegCenters() {
-    $("#reg-centers").bootstrapTable({
-        url: "api/registry-center",
-        cache: false,
-        search: true,
-        showRefresh: true,
-        showColumns: true
-    }).on("all.bs.table", function() {
-        doLocale();
-    });
-    renderRegCenterForDashboardNav();
-}
-
-function generateOperationButtons(val, row) {
-    var operationTd;
-    var name = row.name;
-    if (row.activated) {
-        operationTd = "<button disabled operation='connect-reg-center' class='btn-xs' regName='" + name + "' data-lang='status-connected'></button>&nbsp;<button operation='delete-reg-center' class='btn-xs btn-danger' data-toggle='modal' id='delete-dialog' regName='" + name + "' data-lang='operation-delete'></button>";
-    } else {
-        operationTd = "<button operation='connect-reg-center' class='btn-xs btn-info' regName='" + name + "' data-loading-text='loading...' data-lang='operation-connect'></button>&nbsp;<button operation='delete-reg-center' class='btn-xs btn-danger' data-toggle='modal' id='delete-dialog' regName='" + name + "' data-lang='operation-delete'></button>";
-    }
-    return operationTd;
-}
-
-function bindButtons() {
-    bindConnectButtons();
-    bindDeleteButtons();
-}
-
-function bindConnectButtons() {
-    $(document).off("click", "button[operation='connect-reg-center']");
-    $(document).on("click", "button[operation='connect-reg-center']", function(event) {
-        var btn = $(this).button("loading");
-        var regName = $(event.currentTarget).attr("regName");
-        $.ajax({
-            url: "api/registry-center/connect",
-            type: "POST",
-            data: JSON.stringify({"name" : regName}),
-            contentType: "application/json",
-            dataType: "json",
-            success: function(data) {
-                if (data) {
-                    $("#reg-centers").bootstrapTable("refresh");
-                    renderRegCenterForDashboardNav();
-                    refreshJobNavTag();
-                    refreshServerNavTag();
-                    showSuccessDialog();
-                } else {
-                    showRegCenterFailureDialog();
-                }
-                btn.button("reset");
-            }
-        });
-    });
-}
-
-function bindDeleteButtons() {
-    $(document).off("click", "button[operation='delete-reg-center']");
-    $(document).on("click", "button[operation='delete-reg-center']", function(event) {
-        showDeleteConfirmModal();
-        var regName = $(event.currentTarget).attr("regName");
-        $(document).off("click", "#confirm-btn");
-        $(document).on("click", "#confirm-btn", function() {
-            $.ajax({
-                url: "api/registry-center",
-                type: "DELETE",
-                data: JSON.stringify({"name" : regName}),
-                contentType: "application/json",
-                dataType: "json",
-                success: function() {
-                    $("#reg-centers").bootstrapTable("refresh");
-                    $("#confirm-dialog").modal("hide");
-                    $(".modal-backdrop").remove();
-                    $("body").removeClass("modal-open");
-                    renderRegCenterForDashboardNav();
-                    refreshRegCenterNavTag();
-                }
-            });
-        });
-    });
-}
-
-function dealRegCenterModal() {
-    $("#add-register").click(function() {
-        $("#add-reg-center").modal({backdrop: 'static', keyboard: true});
-    });
-    $("#close-add-reg-form").click(function() {
-        $("#add-reg-center").on("hide.bs.modal", function () {
-            $("#reg-center-form")[0].reset();
-        });
-        $("#reg-center-form").data("bootstrapValidator").resetForm();
-    });
-}
-
-function handleFieldValidator() {
-    $("#digest").focus(function() {
-        $("#reg-center-form").data("bootstrapValidator").enableFieldValidators("digest", true);
-    });
-    $("#digest").blur(function() {
-        $("#reg-center-form").data("bootstrapValidator").enableFieldValidators("digest", "" !== $("#digest").val());
-    });
-    $("#namespace").focus(function() {
-        $("#reg-center-form").data("bootstrapValidator").enableFieldValidators("namespace", true);
-    });
-    $("#namespace").blur(function() {
-        $("#reg-center-form").data("bootstrapValidator").enableFieldValidators("namespace", "" !== $("#namespace").val());
-    });
-}
-
-function submitRegCenter() {
-    $("#add-reg-center-btn").on("click", function(event) {
-        if ("" === $("#digest").val()) {
-            $("#reg-center-form").data("bootstrapValidator").enableFieldValidators("digest", false);
-        }
-        if ("" === $("#namespace").val()) {
-            $("#reg-center-form").data("bootstrapValidator").enableFieldValidators("namespace", false);
-        }
-        var bootstrapValidator = $("#reg-center-form").data("bootstrapValidator");
-        bootstrapValidator.validate();
-        if(bootstrapValidator.isValid()) {
-            var name = $("#name").val();
-            var zkAddressList = $("#zk-address-list").val();
-            var namespace = $("#namespace").val();
-            var digest = $("#digest").val();
-            $.ajax({
-                url: "api/registry-center",
-                type: "POST",
-                data: JSON.stringify({"name": name, "zkAddressList": zkAddressList, "namespace": namespace, "digest": digest}),
-                contentType: "application/json",
-                dataType: "json",
-                success: function(data) {
-                    if (data) {
-                        $("#add-reg-center").on("hide.bs.modal", function() {
-                            $("#reg-center-form")[0].reset();
-                        });
-                        $("#reg-center-form").data("bootstrapValidator").resetForm();
-                        $("#add-reg-center").modal("hide");
-                        $("#reg-centers").bootstrapTable("refresh");
-                        $(".modal-backdrop").remove();
-                        $("body").removeClass("modal-open");
-                        renderRegCenterForDashboardNav();
-                        refreshRegCenterNavTag();
-                    }
-                }
-            });
-        }
-    });
-}
-
-function validate() {
-    $("#reg-center-form").bootstrapValidator({
-        message: "This value is not valid",
-        feedbackIcons: {
-            valid: "glyphicon glyphicon-ok",
-            invalid: "glyphicon glyphicon-remove",
-            validating: "glyphicon glyphicon-refresh"
-        },
-        fields: {
-            name: {
-                validators: {
-                    notEmpty: {
-                        message: $.i18n.prop("registry-center-name-not-null")
-                    },
-                    stringLength: {
-                        max: 50,
-                        message: $.i18n.prop("registry-center-name-length-limit")
-                    },
-                    callback: {
-                        message: $.i18n.prop("registry-center-existed"),
-                        callback: function() {
-                            var regName = $("#name").val();
-                            var result = true;
-                            $.ajax({
-                                url: "api/registry-center",
-                                contentType: "application/json",
-                                async: false,
-                                success: function(data) {
-                                    for (var index = 0; index < data.length; index++) {
-                                        if (regName === data[index].name) {
-                                            result = false;
-                                        }
-                                    }
-                                }
-                            });
-                            return result;
-                        }
-                    }
-                }
-            },
-            zkAddressList: {
-                validators: {
-                    notEmpty: {
-                        message: $.i18n.prop("registry-center-zk-address-not-null")
-                    },
-                    stringLength: {
-                        max: 100,
-                        message: $.i18n.prop("registry-center-zk-address-length-limit")
-                    }
-                }
-            },
-            namespace: {
-                validators: {
-                    stringLength: {
-                        max: 50,
-                        message: $.i18n.prop("registry-center-namespace-length-limit")
-                    }
-                }
-            },
-            digest: {
-                validators: {
-                    stringLength: {
-                        max: 20,
-                        message: $.i18n.prop("registry-center-digest-length-limit")
-                    }
-                }
-            }
-        }
-    });
-    $("#reg-center-form").submit(function(event) {
-        event.preventDefault();
-    });
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/history/job_event_trace_history.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/history/job_event_trace_history.js
deleted file mode 100644
index a293c98..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/history/job_event_trace_history.js
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    $("[data-mask]").inputmask();
-    $(".toolbar input").bind("keypress", function(event) {
-        if("13" == event.keyCode) {
-            $("#job-exec-details-table").bootstrapTable("refresh", {silent: true});
-        }
-    });
-    $("#job-exec-details-table").on("all.bs.table", function() {
-        doLocale();
-    });
-});
-
-function queryParams(params) {
-    var sortName = "success" === params.sortName ? "isSuccess" : params.sortName;
-    return {
-        per_page: params.pageSize,
-        page: params.pageNumber,
-        q: params.searchText,
-        sort: sortName,
-        order: params.sortOrder,
-        jobName: $("#job-name").val(),
-        startTime: $("#start-time").val(),
-        endTime: $("#end-time").val(),
-        ip: $("#ip").val(),
-        isSuccess: $('input[name = "isSuccess"]:checked ').val()
-    };
-}
-
-function successFormatter(value) {
-    switch(value)
-    {
-    case true:
-        return "<span class='label label-success' data-lang='execute-result-success'></span>";
-      case false:
-          return "<span class='label label-danger' data-lang='execute-result-failure'></span>";
-      default:
-        return "<span class='label label-danger' data-lang='execute-result-null'></span>";
-    }
-}
-
-function splitFormatter(value) {
-    var maxLength = 50;
-    var replacement = "...";
-    if(null != value && value.length > maxLength) {
-        var vauleDetail = value.substring(0 , maxLength - replacement.length) + replacement;
-        value = value.replace(/\r\n/g,"<br/>").replace(/\n/g,"<br/>").replace(/\'/g, "\\'");
-        return '<a href="javascript: void(0);" style="color:#FF0000;" onClick="showHistoryMessage(\'' + value + '\')">' + vauleDetail + '</a>';
-    }
-    return value;
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/history/job_status_history.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/history/job_status_history.js
deleted file mode 100644
index 1619af2..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/history/job_status_history.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    $(".toolbar input").bind("keypress", function(event) {
-        if("13" == event.keyCode) {
-            $("#job-exec-status-table").bootstrapTable("refresh", {silent: true});
-        }
-    });
-    $("#job-exec-status-table").on("all.bs.table", function() {
-        doLocale();
-    });
-});
-
-function queryParams(params) {
-    var sortName = "success" === params.sortName ? "isSuccess" : params.sortName;
-    return {
-        per_page: params.pageSize,
-        page: params.pageNumber,
-        q: params.searchText,
-        sort: sortName,
-        order: params.sortOrder,
-        jobName: $("#job-name").val(),
-        state: $("#state").val(),
-        startTime: $("#start-time").val(),
-        endTime: $("#end-time").val()
-    };
-}
-
-function splitRemarkFormatter(value, row) {
-    var maxLength = 50;
-    var replacement = "...";
-    if(null != value && value.length > maxLength) {
-        var valueDetail = value.substring(0 , maxLength - replacement.length) + replacement;
-        value = value.replace(/\r\n/g,"<br/>").replace(/\n/g,"<br/>").replace(/\'/g, "\\'");
-        var remarkHtml;
-        if ("TASK_FAILED" === row.state || "TASK_ERROR" === row.state) {
-            remarkHtml = '<a href="javascript: void(0);" style="color:#FF0000;" onClick="showHistoryMessage(\'' + value + '\')">' + valueDetail + '</a>';
-        } else {
-            remarkHtml = '<a href="javascript: void(0);" style="color:black;" onClick="showHistoryMessage(\'' + value + '\')">' + valueDetail + '</a>';
-        }
-        return remarkHtml;
-    }
-    return value;
-}
-
-function stateFormatter(value) {
-    switch(value)
-    {
-        case "TASK_STAGING":
-            return "<span class='label label-default' data-lang='status-staging'></span>";
-        case "TASK_FAILED":
-            return "<span class='label label-danger' data-lang='status-task-failed'></span>";
-        case "TASK_FINISHED":
-            return "<span class='label label-success' data-lang='status-task-finished'></span>";
-        case "TASK_RUNNING":
-            return "<span class='label label-primary' data-lang='status-running'></span>";
-        case "TASK_ERROR":
-            return "<span class='label label-danger' data-lang='status-task-error'></span>";
-        case "TASK_KILLED":
-            return "<span class='label label-warning' data-lang='status-task-killed'></span>";
-        default:
-            return "-";
-    }
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/index.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/index.js
deleted file mode 100644
index 34f32ba..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/index.js
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    $("#content").load("html/global/registry_center.html");
-    $("#reg-center").click(function() {
-        $("#content").load("html/global/registry_center.html");
-    });
-    $("#event-trace-data-source").click(function() {
-        $("#content").load("html/global/event_trace_data_source.html");
-    });
-    $("#job-status").click(function() {
-        $("#content").load("html/status/job/jobs_status_overview.html");
-    });
-    $("#server-status").click(function() {
-        $("#content").load("html/status/server/servers_status_overview.html");
-    });
-    $("#event-trace-history").click(function() {
-        $("#content").load("html/history/job_event_trace_history.html");
-    });
-    $("#status-history").click(function() {
-        $("#content").load("html/history/job_status_history.html");
-    });
-    $("#help").click(function() {
-        $("#content").load("html/help/help.html", null, function(){
-            doLocale();
-        });
-    });
-    switchLanguage();
-
-    //初始化显示语言
-    initLanguage();
-});
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/job/job_config.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/job/job_config.js
deleted file mode 100644
index 328e43b..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/job/job_config.js
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    tooltipLocale();
-    validate();
-    bindSubmitJobConfigurationForm();
-    bindResetForm();
-});
-
-function tooltipLocale(){
-    for (var i = 0; i < $("[data-toggle='tooltip']").length; i++) {
-        var object = $("[data-toggle='tooltip']")[i];
-        $(object).attr('title',$.i18n.prop("placeholder-" + object.getAttribute("id"))).tooltip('fixTitle');
-    }
-}
-
-function getJobParams() {
-    var jobName = $("#job-overviews-name").text();
-    var jobParams;
-    $.ajax({
-        url: "/api/jobs/config/" + jobName,
-        async: false,
-        success: function(data) {
-            jobParams = data;
-        }
-    });
-    return jobParams;
-}
-
-function bindSubmitJobConfigurationForm() {
-    $("#update-job-info-btn").on("click", function(){
-        var bootstrapValidator = $("#job-config-form").data("bootstrapValidator");
-        bootstrapValidator.validate();
-        if (bootstrapValidator.isValid()) {
-            var jobName = $("#job-name").val();
-            var shardingTotalCount = $("#sharding-total-count").val();
-            var jobParameter = $("#job-parameter").val();
-            var cron = $("#cron").val();
-            var streamingProcess = $("#streaming-process").prop("checked");
-            var maxTimeDiffSeconds = $("#max-time-diff-seconds").val();
-            var monitorExecution = $("#monitor-execution").prop("checked");
-            var failover = $("#failover").prop("checked");
-            var misfire = $("#misfire").prop("checked");
-            var driver = $("#driver").val();
-            var url = $("#url").val();
-            var username = $("#username").val();
-            var password = $("#password").val();
-            var logLevel = $("#logLevel").val();
-            var shardingItemParameters = $("#sharding-item-parameters").val();
-            var jobShardingStrategyType = $("#job-sharding-strategy-type").val();
-            var scriptCommandLine = $("#script-command-line").val();
-            var jobExecutorServiceHandlerType = $("#job-executor-service-handler-type").val();
-            var jobErrorHandlerType = $("#job-error-handler-type").val();
-            var description = $("#description").val();
-            var reconcileIntervalMinutes = $("#reconcile-interval-minutes").val();
-            var postJson = {
-                jobName: jobName,
-                shardingTotalCount: shardingTotalCount,
-                jobParameter: jobParameter,
-                cron: cron,
-                shardingItemParameters: shardingItemParameters,
-                maxTimeDiffSeconds: maxTimeDiffSeconds,
-                monitorExecution: monitorExecution,
-                failover: failover,
-                misfire: misfire,
-                reconcileIntervalMinutes: reconcileIntervalMinutes,
-                jobShardingStrategyType: jobShardingStrategyType,
-                jobExecutorServiceHandlerType: jobExecutorServiceHandlerType,
-                jobErrorHandlerType: jobErrorHandlerType,
-                description: description,
-                props: {'streaming.process': streamingProcess, 'script.command.line': scriptCommandLine}
-            };
-            var jobParams = getJobParams();
-            if (jobParams.monitorExecution !== monitorExecution || jobParams.failover !== failover || jobParams.misfire !== misfire) {
-                showUpdateConfirmModal();
-                $(document).off("click", "#confirm-btn");
-                $(document).on("click", "#confirm-btn", function() {
-                    $("#confirm-dialog").modal("hide");
-                    submitAjax(postJson);
-                });
-            } else {
-                submitAjax(postJson);
-            }
-        }
-    });
-}
-
-function submitAjax(postJson) {
-    $.ajax({
-        url: "/api/jobs/config",
-        type: "PUT",
-        data: JSON.stringify(postJson),
-        contentType: "application/json",
-        dataType: "json",
-        success: function() {
-            $("#data-update-job").modal("hide");
-            $("#jobs-status-overview-tbl").bootstrapTable("refresh");
-            showSuccessDialog();
-        }
-    });
-}
-
-function validate() {
-    $("#job-config-form").bootstrapValidator({
-        message: "This value is not valid",
-        feedbackIcons: {
-            valid: "glyphicon glyphicon-ok",
-            invalid: "glyphicon glyphicon-remove",
-            validating: "glyphicon glyphicon-refresh"
-        },
-        fields: {
-            shardingTotalCount: {
-                validators: {
-                    notEmpty: {
-                        message: $.i18n.prop("job-sharding-count-not-null")
-                    },
-                    regexp: {
-                        regexp: /^(-?\d+)?$/,
-                        message: $.i18n.prop("job-sharding-count-should-be-integer")
-                    }
-                }
-            },
-            cron: {
-                validators: {
-                    stringLength: {
-                        max: 40,
-                        message: $.i18n.prop("job-cron-length-limit")
-                    },
-                    notEmpty: {
-                        message: $.i18n.prop("job-cron-not-null")
-                    }
-                }
-            }
-        }
-    });
-    $("#job-config-form").submit(function(event) {
-        event.preventDefault();
-    });
-}
-
-function bindResetForm() {
-    $("#reset").click(function() {
-        $("#job-config-form").data("bootstrapValidator").resetForm();
-    });
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/job/job_status_detail.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/job/job_status_detail.js
deleted file mode 100644
index 9855e76..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/job/job_status_detail.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    $("#job-name").text($("#index-job-name").text());
-    authorityControl();
-    renderShardingTable();
-    renderBreadCrumbMenu();
-    bindButtons();
-});
-
-function renderShardingTable() {
-    var jobName = $("#job-name").text();
-    $("#sharding").bootstrapTable({
-        url: "/api/jobs/" + jobName + "/sharding",
-        cache: false,
-        search: true,
-        showRefresh: true,
-        showColumns: true
-    }).on("all.bs.table", function() {
-        doLocale();
-    });
-}
-
-function shardingStatusFormatter(value, row) {
-    switch(value) {
-        case "DISABLED":
-            return "<span class='label label-warning' data-lang='status-disabled'></span>";
-            break;
-        case "RUNNING":
-            return "<span class='label label-primary' data-lang='status-running'></span>";
-            break;
-        case "SHARDING_FLAG":
-            return "<span class='label label-info' data-lang='' data-lang='status-sharding-flag'></span>";
-            break;
-        default:
-            return "<span class='label label-default' data-lang='status-staging'></span>";
-            break;
-    }
-}
-
-function failoverFormatter(value, row) {
-    return value ? "Y" : "-";
-}
-
-function generateOperationButtons(val, row) {
-    var disableButton = "<button operation='disable-sharding' class='btn-xs btn-warning' job-name='" + row.jobName + "' item='" + row.item + "' data-lang='operation-disable'></button>";
-    var enableButton = "<button operation='enable-sharding' class='btn-xs btn-success' job-name='" + row.jobName + "' item='" + row.item + "' data-lang='operation-enable'></button>";
-    if ("DISABLED" === row.status) {
-        return enableButton;
-    } else {
-        return disableButton;
-    }
-}
-
-function bindButtons() {
-    bindDisableButton();
-    bindEnableButton();
-}
-
-function bindDisableButton() {
-    $(document).off("click", "button[operation='disable-sharding']");
-    $(document).on("click", "button[operation='disable-sharding']", function(event) {
-        var jobName = $("#index-job-name").text();
-        var item = $(event.currentTarget).attr("item");
-        $.ajax({
-            url: "/api/jobs/" + jobName + "/sharding/" + item + "/disable",
-            type: "POST",
-            success: function() {
-                showSuccessDialog();
-                $("#sharding").bootstrapTable("refresh");
-            }
-        });
-    });
-}
-
-function bindEnableButton() {
-    $(document).off("click", "button[operation='enable-sharding']");
-    $(document).on("click", "button[operation='enable-sharding']", function(event) {
-        var jobName = $("#index-job-name").text();
-        var item = $(event.currentTarget).attr("item");
-        $.ajax({
-            url: "/api/jobs/" + jobName + "/sharding/" + item + "/enable",
-            type: "POST",
-            success: function () {
-                showSuccessDialog();
-                $("#sharding").bootstrapTable("refresh");
-            }
-        });
-    });
-}
-
-function renderBreadCrumbMenu() {
-    $("#breadcrumb-job").click(function() {
-        $("#content").load("html/status/job/jobs_status_overview.html", null, function(){
-            doLocale();
-        });
-    });
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
deleted file mode 100644
index 708520d..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/job/jobs_status_overview.js
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    authorityControl();
-    renderJobsOverview();
-    bindButtons();
-});
-
-function renderJobsOverview() {
-    var jsonData = {
-        cache: false,
-        search: true,
-        showRefresh: true,
-        showColumns: true
-    };
-    var activated = false;
-    $.ajax({
-        url: "/api/registry-center/activated",
-        async: false,
-        success: function(data) {
-            activated = data;
-        }
-    });
-    if (activated) {
-        jsonData.url = "/api/jobs";
-    }
-    $("#jobs-status-overview-tbl").bootstrapTable({
-        columns: jsonData.columns,
-        url: jsonData.url,
-        cache: jsonData.cache
-    }).on("all.bs.table", function() {
-        doLocale();
-    });
-}
-
-function statusFormatter(value, row) {
-    switch(value) {
-        case "OK":
-            return "<span class='label label-success' data-lang='status-ok'></span>";
-            break;
-        case "DISABLED":
-            return "<span class='label label-warning' data-lang='status-disabled'></span>";
-            break;
-        case "SHARDING_FLAG":
-            return "<span class='label label-info' data-lang='status-sharding-flag'></span>";
-            break;
-        case "CRASHED":
-            return "<span class='label label-default' data-lang='status-crashed'></span>";
-            break;
-    }
-}
-
-function generateOperationButtons(val, row) {
-    var modifyButton = "<button operation='modify-job' class='btn-xs btn-primary' job-name='" + row.jobName + "' data-lang='operation-update'></button>";
-    var shardingStatusButton = "<button operation='job-detail' class='btn-xs btn-info' job-name='" + row.jobName + "' data-lang='operation-detail'></button>";
-    var triggerButton = "<button operation='trigger-job' class='btn-xs btn-success' job-name='" + row.jobName + "' data-lang='operation-trigger'></button>";
-    var disableButton = "<button operation='disable-job' class='btn-xs btn-warning' job-name='" + row.jobName + "' data-lang='operation-disable'></button>";
-    var enableButton = "<button operation='enable-job' class='btn-xs btn-success' job-name='" + row.jobName + "' data-lang='operation-enable'></button>";
-    var shutdownButton = "<button operation='shutdown-job' class='btn-xs btn-danger' job-name='" + row.jobName + "' data-lang='operation-shutdown'></button>";
-    var removeButton = "<button operation='remove-job' class='btn-xs btn-danger' job-name='" + row.jobName + "' data-lang='operation-remove'></button>";
-    var operationTd = modifyButton + "&nbsp;" + shardingStatusButton  + "&nbsp;";
-    if ("OK" === row.status) {
-        operationTd = operationTd + triggerButton + "&nbsp;" + disableButton + "&nbsp;" + shutdownButton;
-    }
-    if ("DISABLED" === row.status) {
-        operationTd = operationTd + enableButton + "&nbsp;" + shutdownButton;
-    }
-    if ("SHARDING_FLAG" === row.status) {
-        operationTd = operationTd + "&nbsp;" + shutdownButton;
-    }
-    if ("CRASHED" === row.status) {
-        operationTd = modifyButton + "&nbsp;" + removeButton;
-    }
-    return operationTd;
-}
-
-function bindButtons() {
-    bindModifyButton();
-    bindShardingStatusButton();
-    bindTriggerButton();
-    bindShutdownButton();
-    bindDisableButton();
-    bindEnableButton();
-    bindRemoveButton();
-}
-
-function bindModifyButton() {
-    $(document).off("click", "button[operation='modify-job'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='modify-job'][data-toggle!='modal']", function(event) {
-        var jobName = $(event.currentTarget).attr("job-name");
-        $.ajax({
-            url: "/api/jobs/config/" + jobName,
-            success: function(data) {
-                if (null !== data) {
-                    $(".box-body").remove();
-                    $('#update-job-body').load('html/status/job/job_config.html', null, function() {
-                        doLocale();
-                        $('#data-update-job').modal({backdrop : 'static', keyboard : true});
-                        renderJob(data);
-                        $("#job-overviews-name").text(jobName);
-                    });
-                }
-            }
-        });
-    });
-}
-
-function bindShardingStatusButton() {
-    $(document).off("click", "button[operation='job-detail'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='job-detail'][data-toggle!='modal']", function(event) {
-        var jobName = $(event.currentTarget).attr("job-name");
-        $("#index-job-name").text(jobName);
-        $("#content").load("html/status/job/job_status_detail.html", null, function(){
-            doLocale();
-        });
-    });
-}
-
-function bindTriggerButton() {
-    $(document).off("click", "button[operation='trigger-job'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='trigger-job'][data-toggle!='modal']", function(event) {
-        var jobName = $(event.currentTarget).attr("job-name");
-        $.ajax({
-            url: "/api/jobs/" + jobName + "/trigger",
-            type: "POST",
-            success: function() {
-                showSuccessDialog();
-                $("#jobs-status-overview-tbl").bootstrapTable("refresh");
-            }
-        });
-    });
-}
-
-function bindDisableButton() {
-    $(document).off("click", "button[operation='disable-job'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='disable-job'][data-toggle!='modal']", function(event) {
-        var jobName = $(event.currentTarget).attr("job-name");
-        $.ajax({
-            url: "/api/jobs/" + jobName + "/disable",
-            type: "POST",
-            success: function() {
-                showSuccessDialog();
-                $("#jobs-status-overview-tbl").bootstrapTable("refresh");
-            }
-        });
-    });
-}
-
-function bindEnableButton() {
-    $(document).off("click", "button[operation='enable-job'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='enable-job'][data-toggle!='modal']", function(event) {
-        var jobName = $(event.currentTarget).attr("job-name");
-        $.ajax({
-            url: "/api/jobs/" + jobName + "/enable",
-            type: "POST",
-            success: function() {
-                showSuccessDialog();
-                $("#jobs-status-overview-tbl").bootstrapTable("refresh");
-            }
-        });
-    });
-}
-
-function bindShutdownButton() {
-    $(document).off("click", "button[operation='shutdown-job'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='shutdown-job'][data-toggle!='modal']", function(event) {
-        showShutdownConfirmModal();
-        var jobName = $(event.currentTarget).attr("job-name");
-        $(document).off("click", "#confirm-btn");
-        $(document).on("click", "#confirm-btn", function() {
-            $.ajax({
-                url: "/api/jobs/" + jobName + "/shutdown",
-                type: "POST",
-                success: function () {
-                    $("#confirm-dialog").modal("hide");
-                    $(".modal-backdrop").remove();
-                    $("body").removeClass("modal-open");
-                    $("#jobs-status-overview-tbl").bootstrapTable("refresh");
-                }
-            });
-        });
-    });
-}
-
-function bindRemoveButton() {
-    $(document).off("click", "button[operation='remove-job'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='remove-job'][data-toggle!='modal']", function(event) {
-        var jobName = $(event.currentTarget).attr("job-name");
-        showDeleteConfirmModal();
-        $(document).off("click", "#confirm-btn");
-        $(document).on("click", "#confirm-btn", function() {
-            $.ajax({
-                url: "/api/jobs/config/" + jobName,
-                type: "DELETE",
-                success: function() {
-                    $("#confirm-dialog").modal("hide");
-                    $(".modal-backdrop").remove();
-                    $("body").removeClass("modal-open");
-                    refreshJobNavTag();
-                    refreshServerNavTag();
-                    $("#jobs-status-overview-tbl").bootstrapTable("refresh");
-                }
-            });
-        });
-    });
-}
-
-function renderJob(data) {
-    $("#job-name").attr("value", data.jobName);
-    $("#sharding-total-count").attr("value", data.shardingTotalCount);
-    $("#cron").attr("value", data.cron);
-    $("#sharding-item-parameters").text(data.shardingItemParameters);
-    $("#job-parameter").attr("value", data.jobParameter);
-    $("#monitor-execution").attr("checked", data.monitorExecution);
-    $("#failover").attr("checked", data.failover);
-    $("#misfire").attr("checked", data.misfire);
-    $("#max-time-diff-seconds").attr("value", data.maxTimeDiffSeconds);
-    $("#job-sharding-strategy-type").attr("value", data.jobShardingStrategyType);
-    $("#job-executor-service-handler-type").attr("value", data.jobExecutorServiceHandlerType);
-    $("#job-error-handler-type").attr("value", data.jobErrorHandlerType);
-    $("#reconcile-interval-minutes").attr("value", data.reconcileIntervalMinutes);
-    $("#description").text(data.description);
-    $("#streaming-process").attr("checked", data.props['streaming.process'] === 'true');
-    $("#streaming-process-group").show();
-    $("#script-command-line").attr("value", data.props['script.command.line']);
-    $("#script-commandLine-group").show();
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/server/server_status_detail.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/server/server_status_detail.js
deleted file mode 100644
index e7545eb..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/server/server_status_detail.js
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    $("#server-ip").text($("#index-server-ip").text());
-    authorityControl();
-    renderJobs();
-    renderBreadCrumbMenu();
-    bindButtons();
-});
-
-function renderJobs() {
-    var ip = $("#server-ip").text();
-    $("#server-jobs-tbl").bootstrapTable({
-        url: "/api/servers/" + ip + "/jobs",
-        cache: false,
-        search: true,
-        showRefresh: true,
-        showColumns: true
-    }).on("all.bs.table", function() {
-        doLocale();
-    });
-}
-
-function statusFormatter(val, row) {
-    if (0 === row.instanceCount ) {
-        return "<span class='label label-default' data-lang='status-offline'></span>";
-    }
-    switch(val) {
-        case "OK":
-            return "<span class='label label-success' data-lang='status-enabled'></span>";
-            break;
-        case "DISABLED":
-            return "<span class='label label-warning' data-lang='status-disabled'></span>";
-            break;
-    }
-}
-
-function generateOperationButtons(val, row) {
-    if (0 === row.instanceCount ) {
-        return "<button operation='remove-server-job' class='btn-xs btn-danger' job-name='" + row.jobName + "' data-lang='operation-remove'></button>";
-    }
-    var disableButton = "<button operation='disable-server-job' class='btn-xs btn-warning' ip='" + row.ip + "' job-name='" + row.jobName + "' data-lang='operation-disable'></button>";
-    var enableButton = "<button operation='enable-server-job' class='btn-xs btn-success' ip='" + row.ip + "' job-name='" + row.jobName + "' data-lang='operation-enable'></button>";
-    var shutdownButton = "<button operation='shutdown-server-job' class='btn-xs btn-danger' job-name='" + row.jobName + "' data-lang='operation-shutdown'></button>";
-    var operationTd = "";
-    if ("DISABLED" === row.status) {
-        operationTd = enableButton + "&nbsp;" + shutdownButton;
-    } else {
-        operationTd = disableButton + "&nbsp;" + shutdownButton;
-    }
-    return operationTd;
-}
-
-function bindButtons() {
-    bindDisableButton();
-    bindEnableButton();
-    bindShutdownButton();
-    bindRemoveButton();
-}
-
-function bindDisableButton() {
-    $(document).off("click", "button[operation='disable-server-job'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='disable-server-job'][data-toggle!='modal']", function(event) {
-        $.ajax({
-            url: "/api/servers/" + $("#server-ip").text() + "/jobs/" + $(event.currentTarget).attr("job-name") + "/disable",
-            type: "POST",
-            success: function() {
-                $("#server-jobs-tbl").bootstrapTable("refresh");
-                showSuccessDialog();
-            }
-        });
-    });
-}
-
-function bindEnableButton() {
-    $(document).off("click", "button[operation='enable-server-job'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='enable-server-job'][data-toggle!='modal']", function(event) {
-        $.ajax({
-            url: "/api/servers/" + $("#server-ip").text() + "/jobs/" + $(event.currentTarget).attr("job-name") + "/enable",
-            type: "POST",
-            success: function() {
-                $("#server-jobs-tbl").bootstrapTable("refresh");
-                showSuccessDialog();
-            }
-        });
-    });
-}
-
-function bindShutdownButton() {
-    $(document).off("click", "button[operation='shutdown-server-job'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='shutdown-server-job'][data-toggle!='modal']", function(event) {
-        showShutdownConfirmModal();
-        var serverIp = $("#server-ip").text();
-        var jobName = $(event.currentTarget).attr("job-name");
-        $(document).off("click", "#confirm-btn");
-        $(document).on("click", "#confirm-btn", function() {
-            $.ajax({
-                url: "/api/servers/" + serverIp + "/jobs/" + jobName + "/shutdown",
-                type: "POST",
-                success: function () {
-                    $("#confirm-dialog").modal("hide");
-                    $(".modal-backdrop").remove();
-                    $("body").removeClass("modal-open");
-                    $("#server-jobs-tbl").bootstrapTable("refresh");
-                }
-            });
-        });
-    });
-}
-
-function bindRemoveButton() {
-    $(document).off("click", "button[operation='remove-server-job'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='remove-server-job'][data-toggle!='modal']", function(event) {
-        showDeleteConfirmModal();
-        var serverIp = $("#server-ip").text();
-        var jobName = $(event.currentTarget).attr("job-name");
-        $(document).off("click", "#confirm-btn");
-        $(document).on("click", "#confirm-btn", function() {
-            $.ajax({
-                url: "/api/servers/" + serverIp + "/jobs/" + jobName,
-                type: "DELETE",
-                success: function () {
-                    $("#confirm-dialog").modal("hide");
-                    $(".modal-backdrop").remove();
-                    $("body").removeClass("modal-open");
-                    refreshServerNavTag();
-                    $("#server-jobs-tbl").bootstrapTable("refresh");
-                }
-            });
-        });
-    });
-}
-
-function renderBreadCrumbMenu() {
-    $("#breadcrumb-server").click(function() {
-        $("#content").load("html/status/server/servers_status_overview.html", null, function(){
-            doLocale();
-        });
-    });
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/server/servers_status_overview.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/server/servers_status_overview.js
deleted file mode 100644
index b56c1f0..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/status/server/servers_status_overview.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    authorityControl();
-    renderServersOverview();
-    bindButtons();
-});
-
-function renderServersOverview() {
-    var jsonData = {
-        cache: false,
-        search: true,
-        showRefresh: true,
-        showColumns: true
-    };
-    var activated = false;
-    $.ajax({
-        url: "/api/registry-center/activated",
-        async: false,
-        success: function(data) {
-            activated = data;
-        }
-    });
-    if (activated) {
-        jsonData.url = "/api/servers";
-    }
-    $("#servers-overview-tbl").bootstrapTable({
-        columns: jsonData.columns,
-        url: jsonData.url,
-        cache: jsonData.cache
-    }).on("all.bs.table", function() {
-        doLocale();
-    });
-}
-
-function bindButtons() {
-    bindServerStatusDetailButton();
-    bindDisableServerButton();
-    bindEnableServerButton();
-    bindShutdownServerButton();
-    bindRemoveServerButton();
-}
-
-function generateOperationButtons(val, row) {
-    var detailButton = "<button operation='server-detail' class='btn-xs btn-info' server-ip='" + row.serverIp + "' data-lang='operation-detail'></button>";
-    var disableButton = "<button operation='disable-server' class='btn-xs btn-warning' server-ip='" + row.serverIp + "' data-lang='operation-disable'></button>";
-    var enableButton = "<button operation='enable-server' class='btn-xs btn-success' server-ip='" + row.serverIp + "' data-lang='operation-enable'></button>";
-    var shutdownButton = "<button operation='shutdown-server' class='btn-xs btn-danger' server-ip='" + row.serverIp + "' data-lang='operation-shutdown'></button>";
-    var removeButton = "<button operation='remove-server' class='btn-xs btn-danger' server-ip='" + row.serverIp + "' data-lang='operation-remove'></button>";
-    if (row.instancesNum == 0) {
-        return removeButton;
-    }
-    var operationTd = "";
-    if (row.disabledJobsNum > 0) {
-        operationTd = detailButton  + "&nbsp;" + enableButton + "&nbsp;" + shutdownButton;
-    } else if (row.instancesNum > 0) {
-        operationTd = detailButton  + "&nbsp;" + disableButton + "&nbsp;" + shutdownButton;
-    }
-    return operationTd;
-}
-
-function bindServerStatusDetailButton() {
-    $(document).off("click", "button[operation='server-detail'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='server-detail'][data-toggle!='modal']", function(event) {
-        var serverIp = $(event.currentTarget).attr("server-ip");
-        $("#index-server-ip").text(serverIp);
-        $("#content").load("html/status/server/server_status_detail.html", null, function(){
-            doLocale();
-        });
-    });
-}
-
-function bindDisableServerButton() {
-    $(document).off("click", "button[operation='disable-server'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='disable-server'][data-toggle!='modal']", function(event) {
-        var serverIp = $(event.currentTarget).attr("server-ip");
-        $.ajax({
-            url: "/api/servers/" + serverIp + "/disable",
-            type: "POST",
-            success: function() {
-                showSuccessDialog();
-                $("#servers-overview-tbl").bootstrapTable("refresh");
-            }
-        });
-    });
-}
-
-function bindEnableServerButton() {
-    $(document).off("click", "button[operation='enable-server'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='enable-server'][data-toggle!='modal']", function(event) {
-        var serverIp = $(event.currentTarget).attr("server-ip");
-        $.ajax({
-            url: "/api/servers/" + serverIp + "/enable",
-            type: "POST",
-            success: function() {
-                showSuccessDialog();
-                $("#servers-overview-tbl").bootstrapTable("refresh");
-            }
-        });
-    });
-}
-
-function bindShutdownServerButton() {
-    $(document).off("click", "button[operation='shutdown-server'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='shutdown-server'][data-toggle!='modal']", function(event) {
-        showShutdownConfirmModal();
-        var serverIp = $(event.currentTarget).attr("server-ip");
-        $(document).off("click", "#confirm-btn");
-        $(document).on("click", "#confirm-btn", function() {
-            $.ajax({
-                url: "/api/servers/" + serverIp + "/shutdown",
-                type: "POST",
-                success: function () {
-                    $("#confirm-dialog").modal("hide");
-                    $(".modal-backdrop").remove();
-                    $("body").removeClass("modal-open");
-                    $("#servers-overview-tbl").bootstrapTable("refresh");
-                }
-            });
-        });
-    });
-}
-
-function bindRemoveServerButton() {
-    $(document).off("click", "button[operation='remove-server'][data-toggle!='modal']");
-    $(document).on("click", "button[operation='remove-server'][data-toggle!='modal']", function(event) {
-        showDeleteConfirmModal();
-        var serverIp = $(event.currentTarget).attr("server-ip");
-        $(document).off("click", "#confirm-btn");
-        $(document).on("click", "#confirm-btn", function() {
-            $.ajax({
-                url: "/api/servers/" + serverIp,
-                type: "DELETE",
-                success: function () {
-                    $("#confirm-dialog").modal("hide");
-                    $(".modal-backdrop").remove();
-                    $("body").removeClass("modal-open");
-                    refreshServerNavTag();
-                    $("#servers-overview-tbl").bootstrapTable("refresh");
-                }
-            });
-        });
-    });
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/util/common.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/util/common.js
deleted file mode 100644
index 127cc7c..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/util/common.js
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    $("[data-toggle='tooltip']").tooltip();
-});
-
-function showDialog(msg, timeout) {
-    $("#message-info").text(msg);
-    $("#message-dialog").modal("show");
-    if(null !== timeout) {
-        setTimeout('$("#message-dialog").modal("hide")', timeout);
-    }
-}
-
-function showSuccessDialog() {
-    showInfoDialog($.i18n.prop("operation-succeed"));
-}
-
-function showInfoDialog(msg) {
-    showDialog(msg, 2000);
-}
-
-function showFailureDialog(msg) {
-    showDialog(msg, null);
-}
-
-function authorityControl() {
-    $.ajax({
-        type: "HEAD",
-        url : "/",
-        complete: function(xhr, data) {
-            if ("guest" === xhr.getResponseHeader("identify")) {
-                $("table").on("all.bs.table", function() {
-                    $(".index-content .btn-xs").not(".btn-info").attr("disabled", true);
-                    $(".index-content .btn-xs").not(".btn-info").removeClass().addClass("btn-xs");
-                });
-            }
-            if ("" === $("#authority").text()) {
-                $("#authority").text(xhr.getResponseHeader("identify"));
-            }
-        }
-    });
-}
-
-function showDeleteConfirmModal() {
-    $("#confirm-info").text($.i18n.prop("confirm-to-delete"));
-    $("#confirm-dialog").modal({backdrop: 'static', keyboard: true});
-}
-
-function showShutdownConfirmModal() {
-    $("#confirm-info").text($.i18n.prop("confirm-to-close"));
-    $("#confirm-dialog").modal({backdrop: 'static', keyboard: true});
-}
-
-function showUpdateConfirmModal() {
-    $("#confirm-info").text($.i18n.prop("update-job-confirm-info"));
-    $("#confirm-dialog").modal({backdrop: 'static', keyboard: true});
-}
-
-function showDataSourceFailureDialog() {
-    showFailureDialog($.i18n.prop("event-trace-data-source-connect-failed"));
-}
-
-function showRegCenterFailureDialog() {
-    showFailureDialog($.i18n.prop("registry-center-connect-failed"));
-}
-
-function showDataSourceTestConnectionSuccessDialog() {
-    showInfoDialog($.i18n.prop("event-trace-data-source-test-succeed"));
-}
-
-function showDataSourceTestConnectionFailureDialog() {
-    showInfoDialog($.i18n.prop("event-trace-data-source-test-fail"));
-}
-
-function i18n(lang) {
-    jQuery.i18n.properties({
-        name : 'message',
-        path : '/i18n/',
-        mode : 'map',
-        language : lang,
-        cache: true,
-        encoding: 'UTF-8',
-        callback : function() {
-            for (var i in $.i18n.map) {
-                $('[data-lang="'+i+'"]').html($.i18n.prop(i));
-            }
-        }
-    });
-}
-
-function doLocale() {
-    if ($("#content").hasClass("lang-en")) {
-        i18n("en");
-    } else {
-        i18n("zh");
-    }
-}
-
-function switchLanguage() {
-    $("#lang-zh").click(function() {
-        $("#content").removeClass("lang-en").addClass("lang-zh");
-        doLocale();
-    });
-    $("#lang-en").click(function() {
-        $("#content").removeClass("lang-zh").addClass("lang-en");
-        doLocale();
-    });
-}
-
-/**
- * 根据浏览器语言初始化显示语言
- */
-function initLanguage() {
-    //获取浏览器语言
-    var lan = (navigator.language || navigator.browserLanguage);
-    if (lan && lan.toLowerCase().indexOf('zh') > -1) {
-        //切换成中文
-        $("#lang-zh").click();
-    }
-}
\ No newline at end of file
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/util/dashboard.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/util/dashboard.js
deleted file mode 100644
index 9af2801..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/util/dashboard.js
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    renderRegCenterForDashboardNav();
-    renderDataSourceForDashboardNav();
-    switchRegCenter();
-    switchDataSource();
-    renderSkin();
-    controlSubMenuStyle();
-    refreshRegCenterNavTag();
-    refreshEventTraceNavTag();
-});
-
-function renderRegCenterForDashboardNav() {
-    $.get("api/registry-center", {}, function(data) {
-        var index;
-        var activatedRegCenterName;
-        for (index = 0; index < data.length; index++) {
-            if (data[index].activated) {
-                activatedRegCenterName = data[index].name;
-            }
-        }
-        var registryCenterDimension = $("#registry-center-dimension");
-        registryCenterDimension.empty();
-        for (index = 0; index < data.length; index++) {
-            var regCenterName = data[index].name;
-            var regCenterDisplayName;
-            if (activatedRegCenterName && activatedRegCenterName === regCenterName) {
-                regCenterDisplayName = "<b>" + regCenterName + "(<span data-lang='status-connected'></span>)</b>";
-            } else {
-                regCenterDisplayName = regCenterName;
-            }
-            registryCenterDimension.append("<li><a href='#' reg-name='" + regCenterName + "' data-loading-text='loading...'>" + regCenterDisplayName + "</a></li>");
-            doLocale();
-        }
-        if (0 === data.length) {
-            registryCenterDimension.hide();
-        }
-    });
-    $(document).on("click", "#registry-center-dimension-link", function(event) {
-        var $regCenterDimension = $("#registry-center-dimension");
-        if ($regCenterDimension.children("li").length > 0) {
-            $regCenterDimension.css("display", "");
-        }
-    });
-}
-
-function renderDataSourceForDashboardNav() {
-    $.get("api/data-source", {}, function(data) {
-        var index;
-        var activatedDataSource;
-        for (index = 0; index < data.length; index++) {
-            if (data[index].activated) {
-                activatedDataSource = data[index].name;
-            }
-        }
-        var dataSourceDimension = $("#data-source-dimension");
-        dataSourceDimension.empty();
-        for (index = 0; index < data.length; index++) {
-            var dataSourceName = data[index].name;
-            var dataSourceDisplayName;
-            if (activatedDataSource && activatedDataSource === dataSourceName) {
-                dataSourceDisplayName = "<b>" + dataSourceName + "(<span data-lang='status-connected'></span>)</b>";
-            } else {
-                dataSourceDisplayName = dataSourceName;
-            }
-            dataSourceDimension.append("<li><a href='#' data-source-name='" + dataSourceName + "' data-loading-text='loading...'>" + dataSourceDisplayName + "</a></li>");
-            doLocale();
-        }
-        if (0 === data.length) {
-            dataSourceDimension.hide();
-        }
-    });
-    $(document).on("click", "#data-source-dimension-link", function(event) {
-        var $dataSourceDimension = $("#data-source-dimension");
-        if ($dataSourceDimension.children("li").length > 0) {
-            $dataSourceDimension.css("display", "");
-        }
-    });
-}
-
-function switchRegCenter() {
-    $(document).on("click", "a[reg-name]", function(event) {
-        var link = $(this).button("loading");
-        var regCenterName = $(event.currentTarget).attr("reg-name");
-        $.ajax({
-            url: "api/registry-center/connect",
-            type: "POST",
-            data: JSON.stringify({"name" : regCenterName}),
-            contentType: "application/json",
-            dataType: "json",
-            success: function(data) {
-                if (data) {
-                    showSuccessDialog();
-                    $("#reg-centers").bootstrapTable("refresh");
-                    renderRegCenterForDashboardNav();
-                    refreshJobNavTag();
-                    refreshServerNavTag();
-                    $("#content").load("html/global/registry_center.html");
-                    renderSidebarMenu($("#settings"));
-                    $("#reg-center").parent().addClass("active");
-                } else {
-                    link.button("reset");
-                    showRegCenterFailureDialog();
-                }
-            }
-        });
-    });
-}
-
-function switchDataSource() {
-    $(document).on("click", "a[data-source-name]", function(event) {
-        event.preventDefault();
-        var link = $(this).button("loading");
-        var dataSourceName = $(event.currentTarget).attr("data-source-name");
-        $.ajax({
-            url: "api/data-source/connect",
-            type: "POST",
-            data: JSON.stringify({"name" : dataSourceName}),
-            contentType: "application/json",
-            dataType: "json",
-            success: function(data) {
-                if (data) {
-                    showSuccessDialog();
-                    $("#data-sources").bootstrapTable("refresh");
-                    renderDataSourceForDashboardNav();
-                    $("#content").load("html/global/event_trace_data_source.html");
-                    renderSidebarMenu($("#settings"));
-                    $("#event-trace-data-source").parent().addClass("active");
-                } else {
-                    link.button("reset");
-                    showDataSourceFailureDialog();
-                }
-            }
-        });
-    });
-}
-
-function renderSidebarMenu(div) {
-    div.parent().children().removeClass("active");
-    div.parent().children().children().children("li").removeClass("active");
-    div.parent().children().children("ul").css("display","");
-    div.addClass("active");
-}
-
-var my_skins = [
-    "skin-blue",
-    "skin-black",
-    "skin-red",
-    "skin-yellow",
-    "skin-purple",
-    "skin-green",
-    "skin-blue-light",
-    "skin-black-light",
-    "skin-red-light",
-    "skin-yellow-light",
-    "skin-purple-light",
-    "skin-green-light"
-];
-
-function renderSkin() {
-    $("[data-skin]").on("click", function(event) {
-        event.preventDefault();
-        changeSkin($(this).data("skin"));
-    });
-}
-
-function changeSkin(skinClass) {
-    $.each(my_skins, function(index) {
-        $("body").removeClass(my_skins[index]);
-    });
-    $("body").addClass(skinClass);
-}
-
-function controlSubMenuStyle() {
-    $(".sub-menu").click(function() {
-        $(this).parent().parent().children().removeClass("active");
-        $(this).parent().addClass("active");
-    });
-}
-
-function refreshRegCenterNavTag() {
-    $.ajax({
-        url: "api/registry-center",
-        cache: false,
-        success: function(data) {
-            $("#reg-nav-tag").text(data.length);
-            if (data.length > 0) {
-                for (var index = 0; index < data.length; index++) {
-                    if (data[index].activated) {
-                        refreshJobNavTag();
-                        refreshServerNavTag();
-                    } else {
-                        $("#job-nav-tag").text("0");
-                        $("#server-nav-tag").text("0");
-                    }
-                }
-            } else {
-                $("#job-nav-tag").text("0");
-                $("#server-nav-tag").text("0");
-            }
-        }
-    });
-}
-
-function refreshEventTraceNavTag() {
-    $.ajax({
-        url: "api/data-source",
-        cache: false,
-        success: function(data) {
-            $("#event-trace-nav-tag").text(data.length);
-        }
-    });
-}
-
-function refreshJobNavTag() {
-    $.ajax({
-        url: "/api/jobs/count",
-        cache: false,
-        success: function(data) {
-            $("#job-nav-tag").text(data);
-        }
-    });
-}
-
-function refreshServerNavTag() {
-    $.ajax({
-        url: "/api/servers/count",
-        cache: false,
-        success: function(data) {
-            $("#server-nav-tag").text(data);
-        }
-    });
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/util/formatter.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/util/formatter.js
deleted file mode 100644
index 47adbd7..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/js/util/formatter.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-$(function() {
-    $customDatepicker = $(".custom-datepicker");
-    $customDatepicker.daterangepicker({singleDatePicker : true, timePicker : true, timePicker24Hour : true, timePickerSeconds : true, autoUpdateInput : false});
-    $customDatepicker.on("apply.daterangepicker", function(event, picker) {
-        $(this).val(picker.startDate.format("YYYY-MM-DD HH:mm:ss"));
-    });
-    $customDatepicker.on("cancel.daterangepicker", function(event, picker) {
-        $(this).val("");
-    });
-});
-
-Date.prototype.format = function(fmt) {
-    var date = {
-    "M+" : this.getMonth() + 1,
-    "d+" : this.getDate(),
-    "h+" : this.getHours() % 12 == 0 ? 12 : this.getHours() % 12,
-    "H+" : this.getHours(),
-    "m+" : this.getMinutes(),
-    "s+" : this.getSeconds()
-    };
-    if(/(y+)/.test(fmt)) {
-        fmt=fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
-    }
-    for(var each in date) {
-        if(new RegExp("(" + each + ")").test(fmt)) {
-            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (date[each]) : (("00" + date[each]).substr(("" + date[each]).length)));
-        }
-    }
-    return fmt;
-};
-
-function dateTimeFormatter(value) {
-    if (null == value) {
-        return "";
-    }
-    return new Date(value).format("yyyy-MM-dd HH:mm:ss");
-}
-
-function showHistoryMessage(value) {
-    $("#history-message").html(value);
-    $("#history-message-modal").modal("show");
-}
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/AdminLTE/css/AdminLTE.min.css b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/AdminLTE/css/AdminLTE.min.css
deleted file mode 100644
index c562d61..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/AdminLTE/css/AdminLTE.min.css
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- *   AdminLTE v2.3.0
- *   Author: Almsaeed Studio
- *	 Website: Almsaeed Studio <http://almsaeedstudio.com>
- *   License: Open source - MIT
- *           Please visit http://opensource.org/licenses/MIT for more information
-!*/html,body{min-height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{min-height:100%;position:static;overflow:hidden}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;box-s [...]
\ No newline at end of file
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/AdminLTE/css/skins/_all-skins.min.css b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/AdminLTE/css/skins/_all-skins.min.css
deleted file mode 100644
index 1710db5..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/AdminLTE/css/skins/_all-skins.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.s [...]
\ No newline at end of file
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/AdminLTE/js/app.min.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/AdminLTE/js/app.min.js
deleted file mode 100644
index 679f18f..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/AdminLTE/js/app.min.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*! AdminLTE app.js
- * ================
- * Main JS application file for AdminLTE v2. This file
- * should be included in all pages. It controls some layout
- * options and implements exclusive AdminLTE plugins.
- *
- * @Author  Almsaeed Studio
- * @Support <http://www.almsaeedstudio.com>
- * @Email   <su...@almsaeedstudio.com>
- * @version 2.3.0
- * @license MIT <http://opensource.org/licenses/MIT>
- */
-function _init(){"use strict";$.AdminLTE.layout={activate:function(){var a=this;a.fix(),a.fixSidebar(),$(window,".wrapper").resize(function(){a.fix(),a.fixSidebar()})},fix:function(){var a=$(".main-header").outerHeight()+$(".main-footer").outerHeight(),b=$(window).height(),c=$(".sidebar").height();if($("body").hasClass("fixed"))$(".content-wrapper, .right-side").css("min-height",b-$(".main-footer").outerHeight());else{var d;b>=c?($(".content-wrapper, .right-side").css("min-height",b-a),d [...]
\ No newline at end of file
diff --git a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/BootstrapValidator/js/bootstrapValidator.js b/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/BootstrapValidator/js/bootstrapValidator.js
deleted file mode 100644
index 717cb47..0000000
--- a/elasticjob-lite/elasticjob-lite-console/src/main/resources/console/lib/BootstrapValidator/js/bootstrapValidator.js
+++ /dev/null
@@ -1,7823 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-if (typeof jQuery === 'undefined') {
-    throw new Error('BootstrapValidator\'s JavaScript requires jQuery');
-}
-
-(function($) {
-    var BootstrapValidator = function(form, options) {
-        this.$form   = $(form);
-        this.options = $.extend({}, $.fn.bootstrapValidator.DEFAULT_OPTIONS, options);
-
-        this.$invalidFields = $([]);    // Array of invalid fields
-        this.$submitButton  = null;     // The submit button which is clicked to submit form
-        this.$hiddenButton  = null;
-
-        // Validating status
-        this.STATUS_NOT_VALIDATED = 'NOT_VALIDATED';
-        this.STATUS_VALIDATING    = 'VALIDATING';
-        this.STATUS_INVALID       = 'INVALID';
-        this.STATUS_VALID         = 'VALID';
-
-        // Determine the event that is fired when user change the field value
-        // Most modern browsers supports input event except IE 7, 8.
-        // IE 9 supports input event but the event is still not fired if I press the backspace key.
-        // Get IE version
-        // https://gist.github.com/padolsey/527683/#comment-7595
-        var ieVersion = (function() {
-            var v = 3, div = document.createElement('div'), a = div.all || [];
-            while (div.innerHTML = '<!--[if gt IE '+(++v)+']><br><![endif]-->', a[0]) {}
-            return v > 4 ? v : !v;
-        }());
-
-        var el = document.createElement('div');
-        this._changeEvent = (ieVersion === 9 || !('oninput' in el)) ? 'keyup' : 'input';
-
-        // The flag to indicate that the form is ready to submit when a remote/callback validator returns
-        this._submitIfValid = null;
-
-        // Field elements
-        this._cacheFields = {};
-
-        this._init();
-    };
-
-    BootstrapValidator.prototype = {
-        constructor: BootstrapValidator,
-
-        /**
-         * Init form
-         */
-        _init: function() {
-            var that    = this,
-                options = {
-                    container:      this.$form.attr('data-bv-container'),
-                    events: {
-                        formInit:         this.$form.attr('data-bv-events-form-init'),
-                        formError:        this.$form.attr('data-bv-events-form-error'),
-                        formSuccess:      this.$form.attr('data-bv-events-form-success'),
-                        fieldAdded:       this.$form.attr('data-bv-events-field-added'),
-                        fieldRemoved:     this.$form.attr('data-bv-events-field-removed'),
-                        fieldInit:        this.$form.attr('data-bv-events-field-init'),
-                        fieldError:       this.$form.attr('data-bv-events-field-error'),
-                        fieldSuccess:     this.$form.attr('data-bv-events-field-success'),
-                        fieldStatus:      this.$form.attr('data-bv-events-field-status'),
-                        validatorError:   this.$form.attr('data-bv-events-validator-error'),
-                        validatorSuccess: this.$form.attr('data-bv-events-validator-success')
-                    },
-                    excluded:       this.$form.attr('data-bv-excluded'),
-                    feedbackIcons: {
-                        valid:      this.$form.attr('data-bv-feedbackicons-valid'),
-                        invalid:    this.$form.attr('data-bv-feedbackicons-invalid'),
-                        validating: this.$form.attr('data-bv-feedbackicons-validating')
-                    },
-                    group:          this.$form.attr('data-bv-group'),
-                    live:           this.$form.attr('data-bv-live'),
-                    message:        this.$form.attr('data-bv-message'),
-                    onError:        this.$form.attr('data-bv-onerror'),
-                    onSuccess:      this.$form.attr('data-bv-onsuccess'),
-                    submitButtons:  this.$form.attr('data-bv-submitbuttons'),
-                    threshold:      this.$form.attr('data-bv-threshold'),
-                    trigger:        this.$form.attr('data-bv-trigger'),
-                    verbose:        this.$form.attr('data-bv-verbose'),
-                    fields:         {}
-                };
-
-            this.$form
-                // Disable client side validation in HTML 5
-                .attr('novalidate', 'novalidate')
-                .addClass(this.options.elementClass)
-                // Disable the default submission first
-                .on('submit.bv', function(e) {
-                    e.preventDefault();
-                    that.validate();
-                })
-                .on('click.bv', this.options.submitButtons, function() {
-                    that.$submitButton  = $(this);
-					// The user just click the submit button
-					that._submitIfValid = true;
-                })
-                // Find all fields which have either "name" or "data-bv-field" attribute
-                .find('[name], [data-bv-field]')
-                    .each(function() {
-                        var $field = $(this),
-                            field  = $field.attr('name') || $field.attr('data-bv-field'),
-                            opts   = that._parseOptions($field);
-                        if (opts) {
-                            $field.attr('data-bv-field', field);
-                            options.fields[field] = $.extend({}, opts, options.fields[field]);
-                        }
-                    });
-
-            this.options = $.extend(true, this.options, options);
-
-            // When pressing Enter on any field in the form, the first submit button will do its job.
-            // The form then will be submitted.
-            // I create a first hidden submit button
-            this.$hiddenButton = $('<button/>')
-                                    .attr('type', 'submit')
-                                    .prependTo(this.$form)
-                                    .addClass('bv-hidden-submit')
-                                    .css({ display: 'none', width: 0, height: 0 });
-
-            this.$form
-                .on('click.bv', '[type="submit"]', function(e) {
-                    // #746: Check if the button click handler returns false
-                    if (!e.isDefaultPrevented()) {
-                        var $target = $(e.target),
-                            // The button might contain HTML tag
-                            $button = $target.is('[type="submit"]') ? $target.eq(0) : $target.parent('[type="submit"]').eq(0);
-
-                        // Don't perform validation when clicking on the submit button/input
-                        // which aren't defined by the 'submitButtons' option
-                        if (that.options.submitButtons && !$button.is(that.options.submitButtons) && !$button.is(that.$hiddenButton)) {
-                            that.$form.off('submit.bv').submit();
-                        }
-                    }
-                });
-
-            for (var field in this.options.fields) {
-                this._initField(field);
-            }
-
-            this.$form.trigger($.Event(this.options.events.formInit), {
-                bv: this,
-                options: this.options
-            });
-
-            // Prepare the events
-            if (this.options.onSuccess) {
-                this.$form.on(this.options.events.formSuccess, function(e) {
-                    $.fn.bootstrapValidator.helpers.call(that.options.onSuccess, [e]);
-                });
-            }
-            if (this.options.onError) {
-                this.$form.on(this.options.events.formError, function(e) {
-                    $.fn.bootstrapValidator.helpers.call(that.options.onError, [e]);
-                });
-            }
-        },
-
-        /**
-         * Parse the validator options from HTML attributes
-         *
-         * @param {jQuery} $field The field element
-         * @returns {Object}
-         */
-        _parseOptions: function($field) {
-            var field      = $field.attr('name') || $field.attr('data-bv-field'),
-                validators = {},
-                validator,
-                v,          // Validator name
-                enabled,
-                optionName,
-                optionValue,
-                html5AttrName,
-                html5AttrMap;
-
-            for (v in $.fn.bootstrapValidator.validators) {
-                validator    = $.fn.bootstrapValidator.validators[v];
-                enabled      = $field.attr('data-bv-' + v.toLowerCase()) + '';
-                html5AttrMap = ('function' === typeof validator.enableByHtml5) ? validator.enableByHtml5($field) : null;
-
-                if ((html5AttrMap && enabled !== 'false')
-                    || (html5AttrMap !== true && ('' === enabled || 'true' === enabled)))
-                {
-                    // Try to parse the options via attributes
-                    validator.html5Attributes = $.extend({}, { message: 'message', onerror: 'onError', onsuccess: 'onSuccess' }, validator.html5Attributes);
-                    validators[v] = $.extend({}, html5AttrMap === true ? {} : html5AttrMap, validators[v]);
-
-                    for (html5AttrName in validator.html5Attributes) {
-                        optionName  = validator.html5Attributes[html5AttrName];
-                        optionValue = $field.attr('data-bv-' + v.toLowerCase() + '-' + html5AttrName);
-                        if (optionValue) {
-                            if ('true' === optionValue) {
-                                optionValue = true;
-                            } else if ('false' === optionValue) {
-                                optionValue = false;
-                            }
-                            validators[v][optionName] = optionValue;
-                        }
-                    }
-                }
-            }
-
-            var opts = {
-                    container:     $field.attr('data-bv-container'),
-                    excluded:      $field.attr('data-bv-excluded'),
-                    feedbackIcons: $field.attr('data-bv-feedbackicons'),
-                    group:         $field.attr('data-bv-group'),
-                    message:       $field.attr('data-bv-message'),
-                    onError:       $field.attr('data-bv-onerror'),
-                    onStatus:      $field.attr('data-bv-onstatus'),
-                    onSuccess:     $field.attr('data-bv-onsuccess'),
-                    selector:      $field.attr('data-bv-selector'),
-                    threshold:     $field.attr('data-bv-threshold'),
-                    trigger:       $field.attr('data-bv-trigger'),
-                    verbose:       $field.attr('data-bv-verbose'),
-                    validators:    validators
-                },
-                emptyOptions    = $.isEmptyObject(opts),        // Check if the field options are set using HTML attributes
-                emptyValidators = $.isEmptyObject(validators);  // Check if the field validators are set using HTML attributes
-
-            if (!emptyValidators || (!emptyOptions && this.options.fields && this.options.fields[field])) {
-                opts.validators = validators;
-                return opts;
-            } else {
-                return null;
-            }
-        },
-
-        /**
-         * Init field
-         *
-         * @param {String|jQuery} field The field name or field element
-         */
-        _initField: function(field) {
-            var fields = $([]);
-            switch (typeof field) {
-                case 'object':
-                    fields = field;
-                    field  = field.attr('data-bv-field');
-                    break;
-                case 'string':
-                    fields = this.getFieldElements(field);
-                    fields.attr('data-bv-field', field);
-                    break;
-                default:
-                    break;
-            }
-
-            // We don't need to validate non-existing fields
-            if (fields.length === 0) {
-                return;
-            }
-
-            if (this.options.fields[field] === null || this.options.fields[field].validators === null) {
-                return;
-            }
-
-            var validatorName;
-            for (validatorName in this.options.fields[field].validators) {
-                if (!$.fn.bootstrapValidator.validators[validatorName]) {
-                    delete this.options.fields[field].validators[validatorName];
-                }
-            }
-            if (this.options.fields[field].enabled === null) {
-                this.options.fields[field].enabled = true;
-            }
-
-            var that      = this,
-                total     = fields.length,
-                type      = fields.attr('type'),
-                updateAll = (total === 1) || ('radio' === type) || ('checkbox' === type),
-                event     = ('radio' === type || 'checkbox' === type || 'file' === type || 'SELECT' === fields.eq(0).get(0).tagName) ? 'change' : this._changeEvent,
-                trigger   = (this.options.fields[field].trigger || this.options.trigger || event).split(' '),
-                events    = $.map(trigger, function(item) {
-                    return item + '.update.bv';
-                }).join(' ');
-
-            for (var i = 0; i < total; i++) {
-                var $field    = fields.eq(i),
-                    group     = this.options.fields[field].group || this.options.group,
-                    $parent   = $field.parents(group),
-                    // Allow user to indicate where the error messages are shown
-                    container = ('function' === typeof (this.options.fields[field].container || this.options.container)) ? (this.options.fields[field].container || this.options.container).call(this, $field, this) : (this.options.fields[field].container || this.options.container),
-                    $message  = (container && container !== 'tooltip' && container !== 'popover') ? $(container) : this._getMessageContainer($field, group);
-
-                if (container && container !== 'tooltip' && container !== 'popover') {
-                    $message.addClass('has-error');
-                }
-
-                // Remove all error messages and feedback icons
-                $message.find('.help-block[data-bv-validator][data-bv-for="' + field + '"]').remove();
-                $parent.find('i[data-bv-icon-for="' + field + '"]').remove();
-
-                // Whenever the user change the field value, mark it as not validated yet
-                $field.off(events).on(events, function() {
-                    that.updateStatus($(this), that.STATUS_NOT_VALIDATED);
-                });
-                
-                // Create help block elements for showing the error messages
-                $field.data('bv.messages', $message);
-                for (validatorName in this.options.fields[field].validators) {
-                    $field.data('bv.result.' + validatorName, this.STATUS_NOT_VALIDATED);
-
-                    if (!updateAll || i === total - 1) {
-                        $('<small/>')
-                            .css('display', 'none')
-                            .addClass('help-block')
-                            .attr('data-bv-validator', validatorName)
-                            .attr('data-bv-for', field)
-                            .attr('data-bv-result', this.STATUS_NOT_VALIDATED)
-                            .html(this._getMessage(field, validatorName))
-                            .appendTo($message);
-                    }
-
-                    // Init the validator
-                    if ('function' === typeof $.fn.bootstrapValidator.validators[validatorName].init) {
-                        $.fn.bootstrapValidator.validators[validatorName].init(this, $field, this.options.fields[field].validators[validatorName]);
-                    }
-                }
-
-                // Prepare the feedback icons
-                // Available from Bootstrap 3.1 (http://getbootstrap.com/css/#forms-control-validation)
-                if (this.options.fields[field].feedbackIcons !== false && this.options.fields[field].feedbackIcons !== 'false'
-                    && this.options.feedbackIcons
-                    && this.options.feedbackIcons.validating && this.options.feedbackIcons.invalid && this.options.feedbackIcons.valid
-                    && (!updateAll || i === total - 1))
-                {
-                    // $parent.removeClass('has-success').removeClass('has-error').addClass('has-feedback');
-                    // Keep error messages which are populated from back-end
-                    $parent.addClass('has-feedback');
-                    var $icon = $('<i/>')
-                                    .css('display', 'none')
-                                    .addClass('form-control-feedback')
-                                    .attr('data-bv-icon-for', field)
-                                    .insertAfter($field);
-
-                    // Place it after the container of checkbox/radio
-                    // so when clicking the icon, it doesn't effect to the checkbox/radio element
-                    if ('checkbox' === type || 'radio' === type) {
-                        var $fieldParent = $field.parent();
-                        if ($fieldParent.hasClass(type)) {
-                            $icon.insertAfter($fieldParent);
-                        } else if ($fieldParent.parent().hasClass(type)) {
-                            $icon.insertAfter($fieldParent.parent());
-                        }
-                    }
-
-                    // The feedback icon does not render correctly if there is no label
-                    // https://github.com/twbs/bootstrap/issues/12873
-                    if ($parent.find('label').length === 0) {
-                        $icon.addClass('bv-no-label');
-                    }
-                    // Fix feedback icons in input-group
-                    if ($parent.find('.input-group').length !== 0) {
-                        $icon.addClass('bv-icon-input-group')
-                             .insertAfter($parent.find('.input-group').eq(0));
-                    }
-                    
-                    if (container) {
-                        $field
-                            // Show tooltip/popover message when field gets focus
-                            .off('focus.bv')
-                            .on('focus.bv', function() {
-                                switch (container) {
-                                    case 'tooltip':
-                                        $icon.tooltip('show');
-                                        break;
-                                    case 'popover':
-                                        $icon.popover('show');
-                                        break;
-                                    default:
-                                        break;
-                                }
-                            })
-                            // and hide them when losing focus
-                            .off('blur.bv')
-                            .on('blur.bv', function() {
-                                switch (container) {
-                                    case 'tooltip':
-                                        $icon.tooltip('hide');
-                                        break;
-                                    case 'popover':
-                                        $icon.popover('hide');
-                                        break;
-                                    default:
-                                        break;
-                                }
-                            });
-                    }
-                }
-            }
-
-            // Prepare the events
-            fields
-                .on(this.options.events.fieldSuccess, function(e, data) {
-                    var onSuccess = that.getOptions(data.field, null, 'onSuccess');
-                    if (onSuccess) {
-                        $.fn.bootstrapValidator.helpers.call(onSuccess, [e, data]);
-                    }
-                })
-                .on(this.options.events.fieldError, function(e, data) {
-                    var onError = that.getOptions(data.field, null, 'onError');
-                    if (onError) {
-                        $.fn.bootstrapValidator.helpers.call(onError, [e, data]);
-                    }
-                })
-                .on(this.options.events.fieldStatus, function(e, data) {
-                    var onStatus = that.getOptions(data.field, null, 'onStatus');
-                    if (onStatus) {
-                        $.fn.bootstrapValidator.helpers.call(onStatus, [e, data]);
-                    }
-                })
-                .on(this.options.events.validatorError, function(e, data) {
-                    var onError = that.getOptions(data.field, data.validator, 'onError');
-                    if (onError) {
-                        $.fn.bootstrapValidator.helpers.call(onError, [e, data]);
-                    }
-                })
-                .on(this.options.events.validatorSuccess, function(e, data) {
-                    var onSuccess = that.getOptions(data.field, data.validator, 'onSuccess');
-                    if (onSuccess) {
-                        $.fn.bootstrapValidator.helpers.call(onSuccess, [e, data]);
-                    }
-                });
-
-            // Set live mode
-            events = $.map(trigger, function(item) {
-                return item + '.live.bv';
-            }).join(' ');
-            switch (this.options.live) {
-                case 'submitted':
-                    break;
-                case 'disabled':
-                    fields.off(events);
-                    break;
-                case 'enabled':
-                /* falls through */
-                default:
-                    fields.off(events).on(events, function() {
-                        if (that._exceedThreshold($(this))) {
-                            that.validateField($(this));
-                        }
-                    });
-                    break;
-            }
-
-            fields.trigger($.Event(this.options.events.fieldInit), {
-                bv: this,
-                field: field,
-                element: fields
-            });
-        },
-
-        /**
-         * Get the error message for given field and validator
-         *
-         * @param {String} field The field name
-         * @param {String} validatorName The validator name
-         * @returns {String}
-         */
-        _getMessage: function(field, validatorName) {
-            if (!this.options.fields[field] || !$.fn.bootstrapValidator.validators[validatorName]
-                || !this.options.fields[field].validators || !this.options.fields[field].validators[validatorName])
-            {
-                return '';
-            }
-
-            var options = this.options.fields[field].validators[validatorName];
-            switch (true) {
-                case (!!options.message):
-                    return options.message;
-                case (!!this.options.fields[field].message):
-                    return this.options.fields[field].message;
-                case (!!$.fn.bootstrapValidator.i18n[validatorName]):
-                    return $.fn.bootstrapValidator.i18n[validatorName]['default'];
-                default:
-                    return this.options.message;
-            }
-        },
-
-        /**
-         * Get the element to place the error messages
-         *
-         * @param {jQuery} $field The field element
-         * @param {String} group
-         * @returns {jQuery}
-         */
-        _getMessageContainer: function($field, group) {
-            var $parent = $field.parent();
-            if ($parent.is(group)) {
-                return $parent;
-            }
-
-            var cssClasses = $parent.attr('class');
-            if (!cssClasses) {
-                return this._getMessageContainer($parent, group);
-            }
-
-            cssClasses = cssClasses.split(' ');
-            var n = cssClasses.length;
-            for (var i = 0; i < n; i++) {
-                if (/^col-(xs|sm|md|lg)-\d+$/.test(cssClasses[i]) || /^col-(xs|sm|md|lg)-offset-\d+$/.test(cssClasses[i])) {
-                    return $parent;
-                }
-            }
-
-            return this._getMessageContainer($parent, group);
-        },
-
-        /**
-         * Called when all validations are completed
-         */
-        _submit: function() {
-            var isValid   = this.isValid(),
-                eventType = isValid ? this.options.events.formSuccess : this.options.events.formError,
-                e         = $.Event(eventType);
-
-            this.$form.trigger(e);
-
-            // Call default handler
-            // Check if whether the submit button is clicked
-            if (this.$submitButton) {
-                isValid ? this._onSuccess(e) : this._onError(e);
-            }
-        },
-
-        /**
-         * Check if the field is excluded.
-         * Returning true means that the field will not be validated
-         *
-         * @param {jQuery} $field The field element
-         * @returns {Boolean}
-         */
-        _isExcluded: function($field) {
-            var excludedAttr = $field.attr('data-bv-excluded'),
-                // I still need to check the 'name' attribute while initializing the field
-                field        = $field.attr('data-bv-field') || $field.attr('name');
-
-            switch (true) {
-                case (!!field && this.options.fields && this.options.fields[field] && (this.options.fields[field].excluded === 'true' || this.options.fields[field].excluded === true)):
-                case (excludedAttr === 'true'):
-                case (excludedAttr === ''):
-                    return true;
-
-                case (!!field && this.options.fields && this.options.fields[field] && (this.options.fields[field].excluded === 'false' || this.options.fields[field].excluded === false)):
-                case (excludedAttr === 'false'):
-                    return false;
-
-                default:
-                    if (this.options.excluded) {
-                        // Convert to array first
-                        if ('string' === typeof this.options.excluded) {
-                            this.options.excluded = $.map(this.options.excluded.split(','), function(item) {
-                                // Trim the spaces
-                                return $.trim(item);
-                            });
-                        }
-
-                        var length = this.options.excluded.length;
-                        for (var i = 0; i < length; i++) {
-                            if (('string' === typeof this.options.excluded[i] && $field.is(this.options.excluded[i]))
-                                || ('function' === typeof this.options.excluded[i] && this.options.excluded[i].call(this, $field, this) === true))
-                            {
-                                return true;
-                            }
-                        }
-                    }
-                    return false;
-            }
-        },
-
-        /**
-         * Check if the number of characters of field value exceed the threshold or not
-         *
-         * @param {jQuery} $field The field element
-         * @returns {Boolean}
-         */
-        _exceedThreshold: function($field) {
-            var field     = $field.attr('data-bv-field'),
-                threshold = this.options.fields[field].threshold || this.options.threshold;
-            if (!threshold) {
-                return true;
-            }
-            var cannotType = $.inArray($field.attr('type'), ['button', 'checkbox', 'file', 'hidden', 'image', 'radio', 'reset', 'submit']) !== -1;
-            return (cannotType || $field.val().length >= threshold);
-        },
-        
-        // ---
-        // Events
-        // ---
-
-        /**
-         * The default handler of error.form.bv event.
-         * It will be called when there is a invalid field
-         *
-         * @param {jQuery.Event} e The jQuery event object
-         */
-        _onError: function(e) {
-            if (e.isDefaultPrevented()) {
-                return;
-            }
-
-            if ('submitted' === this.options.live) {
-                // Enable live mode
-                this.options.live = 'enabled';
-                var that = this;
-                for (var field in this.options.fields) {
-                    (function(f) {
-                        var fields  = that.getFieldElements(f);
-                        if (fields.length) {
-                            var type    = $(fields[0]).attr('type'),
-                                event   = ('radio' === type || 'checkbox' === type || 'file' === type || 'SELECT' === $(fields[0]).get(0).tagName) ? 'change' : that._changeEvent,
-                                trigger = that.options.fields[field].trigger || that.options.trigger || event,
-                                events  = $.map(trigger.split(' '), function(item) {
-                                    return item + '.live.bv';
-                                }).join(' ');
-
-                            fields.off(events).on(events, function() {
-                                if (that._exceedThreshold($(this))) {
-                                    that.validateField($(this));
-                                }
-                            });
-                        }
-                    })(field);
-                }
-            }
-
-            var $invalidField = this.$invalidFields.eq(0);
-            if ($invalidField) {
-                // Activate the tab containing the invalid field if exists
-                var $tabPane = $invalidField.parents('.tab-pane'), tabId;
-                if ($tabPane && (tabId = $tabPane.attr('id'))) {
-                    $('a[href="#' + tabId + '"][data-toggle="tab"]').tab('show');
-                }
-
-                // Focus to the first invalid field
-                $invalidField.focus();
-            }
-        },
-
-        /**
-         * The default handler of success.form.bv event.
-         * It will be called when all the fields are valid
-         *
-         * @param {jQuery.Event} e The jQuery event object
-         */
-        _onSuccess: function(e) {
-            if (e.isDefaultPrevented()) {
-                return;
-            }
-
-            // Submit the form
-            this.disableSubmitButtons(true).defaultSubmit();
-        },
-
-        /**
-         * Called after validating a field element
-         *
-         * @param {jQuery} $field The field element
-         * @param {String} [validatorName] The validator name
-         */
-        _onFieldValidated: function($field, validatorName) {
-            var field         = $field.attr('data-bv-field'),
-                validators    = this.options.fields[field].validators,
-                counter       = {},
-                numValidators = 0,
-                data          = {
-                    bv: this,
-                    field: field,
-                    element: $field,
-                    validator: validatorName,
-                    result: $field.data('bv.response.' + validatorName)
-                };
-
-            // Trigger an event after given validator completes
-            if (validatorName) {
-                switch ($field.data('bv.result.' + validatorName)) {
-                    case this.STATUS_INVALID:
-                        $field.trigger($.Event(this.options.events.validatorError), data);
-                        break;
-                    case this.STATUS_VALID:
-                        $field.trigger($.Event(this.options.events.validatorSuccess), data);
-                        break;
-                    default:
-                        break;
-                }
-            }
-
-            counter[this.STATUS_NOT_VALIDATED] = 0;
-            counter[this.STATUS_VALIDATING]    = 0;
-            counter[this.STATUS_INVALID]       = 0;
-            counter[this.STATUS_VALID]         = 0;
-
-            for (var v in validators) {
-                if (validators[v].enabled === false) {
-                    continue;
-                }
-
-                numValidators++;
-                var result = $field.data('bv.result.' + v);
-                if (result) {
-                    counter[result]++;
-                }
-            }
-
-            if (counter[this.STATUS_VALID] === numValidators) {
-                // Remove from the list of invalid fields
-                this.$invalidFields = this.$invalidFields.not($field);
-
-                $field.trigger($.Event(this.options.events.fieldSuccess), data);
-            }
-            // If all validators are completed and there is at least one validator which doesn't pass
-            else if (counter[this.STATUS_NOT_VALIDATED] === 0 && counter[this.STATUS_VALIDATING] === 0 && counter[this.STATUS_INVALID] > 0) {
-                // Add to the list of invalid fields
-                this.$invalidFields = this.$invalidFields.add($field);
-
-                $field.trigger($.Event(this.options.events.fieldError), data);
-            }
-        },
-
-        // ---
-        // Public methods
-        // ---
-
-        /**
-         * Retrieve the field elements by given name
-         *
-         * @param {String} field The field name
-         * @returns {null|jQuery[]}
-         */
-        getFieldElements: function(field) {
-            if (!this._cacheFields[field]) {
-                this._cacheFields[field] = (this.options.fields[field] && this.options.fields[field].selector)
-                                         ? $(this.options.fields[field].selector)
-                                         : this.$form.find('[name="' + field + '"]');
-            }
-
-            return this._cacheFields[field];
-        },
-
-        /**
-         * Get the field options
-         *
-         * @param {String|jQuery} [field] The field name or field element. If it is not set, the method returns the form options
-         * @param {String} [validator] The name of validator. It null, the method returns form options
-         * @param {String} [option] The option name
-         * @return {String|Object}
-         */
-        getOptions: function(field, validator, option) {
-            if (!field) {
-                return this.options;
-            }
-            if ('object' === typeof field) {
-                field = field.attr('data-bv-field');
-            }
-            if (!this.options.fields[field]) {
-                return null;
-            }
-
-            var options = this.options.fields[field];
-            if (!validator) {
-                return option ? options[option] : options;
-            }
-            if (!options.validators || !options.validators[validator]) {
-                return null;
-            }
-
-            return option ? options.validators[validator][option] : options.validators[validator];
-        },
-
-
-        /**
-         * Disable/enable submit buttons
-         *
-         * @param {Boolean} disabled Can be true or false
-         * @returns {BootstrapValidator}
-         */
-        disableSubmitButtons: function(disabled) {
-            if (!disabled) {
-                this.$form.find(this.options.submitButtons).removeAttr('disabled');
-            } else if (this.options.live !== 'disabled') {
-                // Don't disable if the live validating mode is disabled
-                this.$form.find(this.options.submitButtons).attr('disabled', 'disabled');
-            }
-
-            return this;
-        },
-
-        /**
-         * Validate the form
-         *
-         * @returns {BootstrapValidator}
-         */
-        validate: function() {
-            if (!this.options.fields) {
-                return this;
-            }
-            this.disableSubmitButtons(true);
-
-            for (var field in this.options.fields) {
-                this.validateField(field);
-            }
-
-            this._submit();
-
-            return this;
-        },
-
-        /**
-         * Validate given field
-         *
-         * @param {String|jQuery} field The field name or field element
-         * @returns {BootstrapValidator}
-         */
-        validateField: function(field) {
-            var fields = $([]);
-            switch (typeof field) {
-                case 'object':
-                    fields = field;
-                    field  = field.attr('data-bv-field');
-                    break;
-                case 'string':
-                    fields = this.getFieldElements(field);
-                    break;
-                default:
-                    break;
-            }
-
-            if (fields.length === 0 || (this.options.fields[field] && this.options.fields[field].enabled === false)) {
-                return this;
-            }
-
-            var that       = this,
-                type       = fields.attr('type'),
-                total      = ('radio' === type || 'checkbox' === type) ? 1 : fields.length,
-                updateAll  = ('radio' === type || 'checkbox' === type),
-                validators = this.options.fields[field].validators,
-                verbose    = this.options.fields[field].verbose === 'true' || this.options.fields[field].verbose === true || this.options.verbose === 'true' || this.options.verbose === true,
-                validatorName,
-                validateResult;
-
-            for (var i = 0; i < total; i++) {
-                var $field = fields.eq(i);
-                if (this._isExcluded($field)) {
-                    continue;
-                }
-
-                var stop = false;
-                for (validatorName in validators) {
-                    if ($field.data('bv.dfs.' + validatorName)) {
-                        $field.data('bv.dfs.' + validatorName).reject();
-                    }
-                    if (stop) {
-                        break;
-                    }
-
-                    // Don't validate field if it is already done
-                    var result = $field.data('bv.result.' + validatorName);
-                    if (result === this.STATUS_VALID || result === this.STATUS_INVALID) {
-                        this._onFieldValidated($field, validatorName);
-                        continue;
-                    } else if (validators[validatorName].enabled === false) {
-                        this.updateStatus(updateAll ? field : $field, this.STATUS_VALID, validatorName);
-                        continue;
-                    }
-
-                    $field.data('bv.result.' + validatorName, this.STATUS_VALIDATING);
-                    validateResult = $.fn.bootstrapValidator.validators[validatorName].validate(this, $field, validators[validatorName]);
-
-                    // validateResult can be a $.Deferred object ...
-                    if ('object' === typeof validateResult && validateResult.resolve) {
-                        this.updateStatus(updateAll ? field : $field, this.STATUS_VALIDATING, validatorName);
-                        $field.data('bv.dfs.' + validatorName, validateResult);
-
-                        validateResult.done(function($f, v, response) {
-                            // v is validator name
-                            $f.removeData('bv.dfs.' + v).data('bv.response.' + v, response);
-                            if (response.message) {
-                                that.updateMessage($f, v, response.message);
-                            }
-
-                            that.updateStatus(updateAll ? $f.attr('data-bv-field') : $f, response.valid ? that.STATUS_VALID : that.STATUS_INVALID, v);
-
-                            if (response.valid && that._submitIfValid === true) {
-                                // If a remote validator returns true and the form is ready to submit, then do it
-                                that._submit();
-                            } else if (!response.valid && !verbose) {
-                                stop = true;
-                            }
-                        });
-                    }
-                    // ... or object { valid: true/false, message: 'dynamic message' }
-                    else if ('object' === typeof validateResult && validateResult.valid !== undefined && validateResult.message !== undefined) {
-                        $field.data('bv.response.' + validatorName, validateResult);
-                        this.updateMessage(updateAll ? field : $field, validatorName, validateResult.message);
-                        this.updateStatus(updateAll ? field : $field, validateResult.valid ? this.STATUS_VALID : this.STATUS_INVALID, validatorName);
-                        if (!validateResult.valid && !verbose) {
-                            break;
-                        }
-                    }
-                    // ... or a boolean value
-                    else if ('boolean' === typeof validateResult) {
-                        $field.data('bv.response.' + validatorName, validateResult);
-                        this.updateStatus(updateAll ? field : $field, validateResult ? this.STATUS_VALID : this.STATUS_INVALID, validatorName);
-                        if (!validateResult && !verbose) {
-                            break;
-                        }
-                    }
-                }
-            }
-
-            return this;
-        },
-
-        /**
-         * Update the error message
-         *
-         * @param {String|jQuery} field The field name or field element
-         * @param {String} validator The validator name
-         * @param {String} message The message
-         * @returns {BootstrapValidator}
-         */
-        updateMessage: function(field, validator, message) {
-            var $fields = $([]);
-            switch (typeof field) {
-                case 'object':
-                    $fields = field;
-                    field   = field.attr('data-bv-field');
-                    break;
-                case 'string':
-                    $fields = this.getFieldElements(field);
-                    break;
-                default:
-                    break;
-            }
-
-            $fields.each(function() {
-                $(this).data('bv.messages').find('.help-block[data-bv-validator="' + validator + '"][data-bv-for="' + field + '"]').html(message);
-            });
-        },
-        
-        /**
-         * Update all validating results of field
-         *
-         * @param {String|jQuery} field The field name or field element
-         * @param {String} status The status. Can be 'NOT_VALIDATED', 'VALIDATING', 'INVALID' or 'VALID'
-         * @param {String} [validatorName] The validator name. If null, the method updates validity result for all validators
-         * @returns {BootstrapValidator}
-         */
-        updateStatus: function(field, status, validatorName) {
-            var fields = $([]);
-            switch (typeof field) {
-                case 'object':
-                    fields = field;
-                    field  = field.attr('data-bv-field');
-                    break;
-                case 'string':
-                    fields = this.getFieldElements(field);
-                    break;
-                default:
-                    break;
-            }
-
-            if (status === this.STATUS_NOT_VALIDATED) {
-                // Reset the flag
-                this._submitIfValid = false;
-            }
-
-            var that  = this,
-                type  = fields.attr('type'),
-                group = this.options.fields[field].group || this.options.group,
-                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;
-
-            for (var i = 0; i < total; i++) {
-                var $field       = fields.eq(i);
-                if (this._isExcluded($field)) {
-                    continue;
-                }
-
-                var $parent      = $field.parents(group),
-                    $message     = $field.data('bv.messages'),
-                    $allErrors   = $message.find('.help-block[data-bv-validator][data-bv-for="' + field + '"]'),
-                    $errors      = validatorName ? $allErrors.filter('[data-bv-validator="' + validatorName + '"]') : $allErrors,
-                    $icon        = $parent.find('.form-control-feedback[data-bv-icon-for="' + field + '"]'),
-                    container    = ('function' === typeof (this.options.fields[field].container || this.options.container)) ? (this.options.fields[field].container || this.options.container).call(this, $field, this) : (this.options.fields[field].container || this.options.container),
-                    isValidField = null;
-
-                // Update status
-                if (validatorName) {
-                    $field.data('bv.result.' + validatorName, status);
-                } else {
-                    for (var v in this.options.fields[field].validators) {
-                        $field.data('bv.result.' + v, status);
-                    }
-                }
-
-                // Show/hide error elements and feedback icons
-                $errors.attr('data-bv-result', status);
-
-                // Determine the tab containing the element
-                var $tabPane = $field.parents('.tab-pane'),
-                    tabId, $tab;
-                if ($tabPane && (tabId = $tabPane.attr('id'))) {
-                    $tab = $('a[href="#' + tabId + '"][data-toggle="tab"]').parent();
-                }
-
-                switch (status) {
-                    case this.STATUS_VALIDATING:
-                        isValidField = null;
-                        this.disableSubmitButtons(true);
-                        $parent.removeClass('has-success').removeClass('has-error');
-                        if ($icon) {
-                            $icon.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.invalid).addClass(this.options.feedbackIcons.validating).show();
-                        }
-                        if ($tab) {
-                            $tab.removeClass('bv-tab-success').removeClass('bv-tab-error');
-                        }
-                        break;
-
-                    case this.STATUS_INVALID:
-                        isValidField = false;
-                        this.disableSubmitButtons(true);
-                        $parent.removeClass('has-success').addClass('has-error');
-                        if ($icon) {
-                            $icon.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.validating).addClass(this.options.feedbackIcons.invalid).show();
-                        }
-                        if ($tab) {
-                            $tab.removeClass('bv-tab-success').addClass('bv-tab-error');
-                        }
-                        break;
-
-                    case this.STATUS_VALID:
-                        // If the field is valid (passes all validators)
-                        isValidField = ($allErrors.filter('[data-bv-result="' + this.STATUS_NOT_VALIDATED +'"]').length === 0)
-                                     ? ($allErrors.filter('[data-bv-result="' + this.STATUS_VALID +'"]').length === $allErrors.length)  // All validators are completed
-                                     : null;                                                                                            // There are some validators that have not done
-                        if (isValidField !== null) {
-                            this.disableSubmitButtons(this.$submitButton ? !this.isValid() : !isValidField);
-                            if ($icon) {
-                                $icon
-                                    .removeClass(this.options.feedbackIcons.invalid).removeClass(this.options.feedbackIcons.validating).removeClass(this.options.feedbackIcons.valid)
-                                    .addClass(isValidField ? this.options.feedbackIcons.valid : this.options.feedbackIcons.invalid)
-                                    .show();
-                            }
-                        }
-
-                        $parent.removeClass('has-error has-success').addClass(this.isValidContainer($parent) ? 'has-success' : 'has-error');
-                        if ($tab) {
-                            $tab.removeClass('bv-tab-success').removeClass('bv-tab-error').addClass(this.isValidContainer($tabPane) ? 'bv-tab-success' : 'bv-tab-error');
-                        }
-                        break;
-
-                    case this.STATUS_NOT_VALIDATED:
-                    /* falls through */
-                    default:
-                        isValidField = null;
-                        this.disableSubmitButtons(false);
-                        $parent.removeClass('has-success').removeClass('has-error');
-                        if ($icon) {
-                            $icon.removeClass(this.options.feedbackIcons.valid).removeClass(this.options.feedbackIcons.invalid).removeClass(this.options.feedbackIcons.validating).hide();
-                        }
-                        if ($tab) {
-                            $tab.removeClass('bv-tab-success').removeClass('bv-tab-error');
-                        }
-                        break;
-                }
-
-                switch (true) {
-                    // Only show the first error message if it is placed inside a tooltip ...
-                    case ($icon && 'tooltip' === container):
-                        (isValidField === false)
-                                ? $icon.css('cursor', 'pointer').tooltip('destroy').tooltip({
-                                    container: 'body',
-                                    html: true,
-                                    placement: 'top',
-                                    title: $allErrors.filter('[data-bv-result="' + that.STATUS_INVALID + '"]').eq(0).html()
-                                })
-                                : $icon.tooltip('hide');
-                        break;
-                    // ... or popover
-                    case ($icon && 'popover' === container):
-                        (isValidField === false)
-                                ? $icon.css('cursor', 'pointer').popover('destroy').popover({
-                                    container: 'body',
-                                    content: $allErrors.filter('[data-bv-result="' + that.STATUS_INVALID + '"]').eq(0).html(),
-                                    html: true,
-                                    placement: 'top',
-                                    trigger: 'hover click'
-                                })
-                                : $icon.popover('hide');
-                        break;
-                    default:
-                        (status === this.STATUS_INVALID) ? $errors.show() : $errors.hide();
-                        break;
-                }
-
-                // Trigger an event
-                $field.trigger($.Event(this.options.events.fieldStatus), {
-                    bv: this,
-                    field: field,
-                    element: $field,
-                    status: status
-                });
-                this._onFieldValidated($field, validatorName);
-            }
-
-            return this;
-        },
-
-        /**
-         * Check the form validity
-         *
-         * @returns {Boolean}
-         */
-        isValid: function() {
-            for (var field in this.options.fields) {
-                if (!this.isValidField(field)) {
-                    return false;
-                }
-            }
-
-            return true;
-        },
-
-        /**
-         * Check if the field is valid or not
-         *
-         * @param {String|jQuery} field The field name or field element
-         * @returns {Boolean}
-         */
-        isValidField: function(field) {
-            var fields = $([]);
-            switch (typeof field) {
-                case 'object':
-                    fields = field;
-                    field  = field.attr('data-bv-field');
-                    break;
-                case 'string':
-                    fields = this.getFieldElements(field);
-                    break;
-                default:
-                    break;
-            }
-            if (fields.length === 0 || this.options.fields[field] === null || this.options.fields[field].enabled === false) {
-                return true;
-            }
-
-            var type  = fields.attr('type'),
-                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length,
-                $field, validatorName, status;
-            for (var i = 0; i < total; i++) {
-                $field = fields.eq(i);
-                if (this._isExcluded($field)) {
-                    continue;
-                }
-
-                for (validatorName in this.options.fields[field].validators) {
-                    if (this.options.fields[field].validators[validatorName].enabled === false) {
-                        continue;
-                    }
-
-                    status = $field.data('bv.result.' + validatorName);
-                    if (status !== this.STATUS_VALID) {
-                        return false;
-                    }
-                }
-            }
-
-            return true;
-        },
-
-        /**
-         * Check if all fields inside a given container are valid.
-         * It's useful when working with a wizard-like such as tab, collapse
-         *
-         * @param {String|jQuery} container The container selector or element
-         * @returns {Boolean}
-         */
-        isValidContainer: function(container) {
-            var that       = this,
-                map        = {},
-                $container = ('string' === typeof container) ? $(container) : container;
-            if ($container.length === 0) {
-                return true;
-            }
-
-            $container.find('[data-bv-field]').each(function() {
-                var $field = $(this),
-                    field  = $field.attr('data-bv-field');
-                if (!that._isExcluded($field) && !map[field]) {
-                    map[field] = $field;
-                }
-            });
-
-            for (var field in map) {
-                var $f = map[field];
-                if ($f.data('bv.messages')
-                      .find('.help-block[data-bv-validator][data-bv-for="' + field + '"]')
-                      .filter('[data-bv-result="' + this.STATUS_INVALID +'"]')
-                      .length > 0)
-                {
-                    return false;
-                }
-            }
-
-            return true;
-        },
-
-        /**
-         * Submit the form using default submission.
-         * It also does not perform any validations when submitting the form
-         */
-        defaultSubmit: function() {
-            if (this.$submitButton) {
-                // Create hidden input to send the submit buttons
-                $('<input/>')
-                    .attr('type', 'hidden')
-                    .attr('data-bv-submit-hidden', '')
-                    .attr('name', this.$submitButton.attr('name'))
-                    .val(this.$submitButton.val())
-                    .appendTo(this.$form);
-            }
-
-            // Submit form
-            this.$form.off('submit.bv').submit();
-        },
-
-        // ---
-        // Useful APIs which aren't used internally
-        // ---
-
-        /**
-         * Get the list of invalid fields
-         *
-         * @returns {jQuery[]}
-         */
-        getInvalidFields: function() {
-            return this.$invalidFields;
-        },
-
-        /**
-         * Returns the clicked submit button
-         *
-         * @returns {jQuery}
-         */
-        getSubmitButton: function() {
-            return this.$submitButton;
-        },
-
-        /**
-         * Get the error messages
-         *
-         * @param {String|jQuery} [field] The field name or field element
-         * If the field is not defined, the method returns all error messages of all fields
-         * @param {String} [validator] The name of validator
-         * If the validator is not defined, the method returns error messages of all validators
-         * @returns {String[]}
-         */
-        getMessages: function(field, validator) {
-            var that     = this,
-                messages = [],
-                $fields  = $([]);
-
-            switch (true) {
-                case (field && 'object' === typeof field):
-                    $fields = field;
-                    break;
-                case (field && 'string' === typeof field):
-                    var f = this.getFieldElements(field);
-                    if (f.length > 0) {
-                        var type = f.attr('type');
-                        $fields = ('radio' === type || 'checkbox' === type) ? f.eq(0) : f;
-                    }
-                    break;
-                default:
-                    $fields = this.$invalidFields;
-                    break;
-            }
-
-            var filter = validator ? '[data-bv-validator="' + validator + '"]' : '';
-            $fields.each(function() {
-                messages = messages.concat(
-                    $(this)
-                        .data('bv.messages')
-                        .find('.help-block[data-bv-for="' + $(this).attr('data-bv-field') + '"][data-bv-result="' + that.STATUS_INVALID + '"]' + filter)
-                        .map(function() {
-                            var v = $(this).attr('data-bv-validator'),
-                                f = $(this).attr('data-bv-for');
-                            return (that.options.fields[f].validators[v].enabled === false) ? '' : $(this).html();
-                        })
-                        .get()
-                );
-            });
-
-            return messages;
-        },
-
-        /**
-         * Update the option of a specific validator
-         *
-         * @param {String|jQuery} field The field name or field element
-         * @param {String} validator The validator name
-         * @param {String} option The option name
-         * @param {String} value The value to set
-         * @returns {BootstrapValidator}
-         */
-        updateOption: function(field, validator, option, value) {
-            if ('object' === typeof field) {
-                field = field.attr('data-bv-field');
-            }
-            if (this.options.fields[field] && this.options.fields[field].validators[validator]) {
-                this.options.fields[field].validators[validator][option] = value;
-                this.updateStatus(field, this.STATUS_NOT_VALIDATED, validator);
-            }
-
-            return this;
-        },
-
-        /**
-         * Add a new field
-         *
-         * @param {String|jQuery} field The field name or field element
-         * @param {Object} [options] The validator rules
-         * @returns {BootstrapValidator}
-         */
-        addField: function(field, options) {
-            var fields = $([]);
-            switch (typeof field) {
-                case 'object':
-                    fields = field;
-                    field  = field.attr('data-bv-field') || field.attr('name');
-                    break;
-                case 'string':
-                    delete this._cacheFields[field];
-                    fields = this.getFieldElements(field);
-                    break;
-                default:
-                    break;
-            }
-
-            fields.attr('data-bv-field', field);
-
-            var type  = fields.attr('type'),
-                total = ('radio' === type || 'checkbox' === type) ? 1 : fields.length;
-
-            for (var i = 0; i < total; i++) {
-                var $field = fields.eq(i);
-
-                // Try to parse the options from HTML attributes
-                var opts = this._parseOptions($field);
-                opts = (opts === null) ? options : $.extend(true, options, opts);
-
-                this.options.fields[field] = $.extend(true, this.options.fields[field], opts);
-
-                // Update the cache
-                this._cacheFields[field] = this._cacheFields[field] ? this._cacheFields[field].add($field) : $field;
-
-                // Init the element
-                this._initField(('checkbox' === type || 'radio' === type) ? field : $field);
-            }
-
... 16980 lines suppressed ...