You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by mi...@apache.org on 2018/09/10 13:35:37 UTC

[incubator-dubbo-ops] branch develop updated: change structure

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

min pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo-ops.git


The following commit(s) were added to refs/heads/develop by this push:
     new 48f9e8d  change structure
48f9e8d is described below

commit 48f9e8d965460a4216f28cac41bcae81b0c69f6a
Author: nzomkxia <z8...@gmail.com>
AuthorDate: Mon Sep 10 21:35:28 2018 +0800

    change structure
---
 .gitignore                                         |  10 +-
 README.md                                          |  40 +--
 .../pom.xml                                        |   5 -
 .../apache/dubbo/admin/DubboAdminApplication.java  |   0
 .../java/org/apache/dubbo/admin/SpringUtil.java    |   0
 .../org/apache/dubbo/admin/config/I18nConfig.java  |   0
 .../dubbo/admin/config/XmlConfiguration.java       |   0
 .../dubbo/admin/controller/RoutesController.java   |   0
 .../dubbo/admin/controller/ServiceController.java  |   0
 .../org/apache/dubbo/admin/domain/ServiceDO.java   |   0
 .../apache/dubbo/admin/domain/ServiceDetailDO.java |   0
 .../org/apache/dubbo/admin/filter/LoginFilter.java |   0
 .../biz/common/i18n/MessageResourceService.java    |   0
 .../i18n/impl/MessageResourceServiceImpl.java      |   0
 .../admin/governance/service/ConfigService.java    |   0
 .../admin/governance/service/ConsumerService.java  |   0
 .../admin/governance/service/OverrideService.java  |   0
 .../admin/governance/service/OwnerService.java     |   0
 .../admin/governance/service/ProviderService.java  |   0
 .../admin/governance/service/RouteService.java     |   0
 .../admin/governance/service/UserService.java      |   0
 .../governance/service/impl/AbstractService.java   |   0
 .../governance/service/impl/ConfigServiceImpl.java |   0
 .../service/impl/ConsumerServiceImpl.java          |   0
 .../service/impl/OverrideServiceImpl.java          |   0
 .../governance/service/impl/OwnerServiceImpl.java  |   0
 .../service/impl/ProviderServiceImpl.java          |   0
 .../governance/service/impl/RouteServiceImpl.java  |   0
 .../governance/service/impl/UserServiceImpl.java   |   0
 .../admin/governance/sync/RegistryServerSync.java  |   0
 .../dubbo/admin/governance/sync/util/Pair.java     |   0
 .../admin/governance/sync/util/SyncUtils.java      |   0
 .../admin/governance/util/GovernanceWarmup.java    |   0
 .../dubbo/admin/governance/util/Paginator.java     |   0
 .../dubbo/admin/governance/util/UrlUtils.java      |   0
 .../dubbo/admin/governance/util/WebConstants.java  |   0
 .../admin/registry/common/ChangeListener.java      |   0
 .../dubbo/admin/registry/common/StatusManager.java |   0
 .../dubbo/admin/registry/common/domain/Access.java |   0
 .../admin/registry/common/domain/Agreement.java    |   0
 .../admin/registry/common/domain/Approval.java     |   0
 .../common/domain/ApprovalRequisition.java         |   0
 .../dubbo/admin/registry/common/domain/Change.java |   0
 .../admin/registry/common/domain/Cluster.java      |   0
 .../dubbo/admin/registry/common/domain/Config.java |   0
 .../admin/registry/common/domain/Consumer.java     |   0
 .../admin/registry/common/domain/DependItem.java   |   0
 .../admin/registry/common/domain/Dependency.java   |   0
 .../admin/registry/common/domain/Document.java     |   0
 .../dubbo/admin/registry/common/domain/Entity.java |   0
 .../admin/registry/common/domain/Favorite.java     |   0
 .../admin/registry/common/domain/Feature.java      |   0
 .../dubbo/admin/registry/common/domain/Layer.java  |   0
 .../admin/registry/common/domain/LoadBalance.java  |   0
 .../dubbo/admin/registry/common/domain/Mock.java   |   0
 .../admin/registry/common/domain/Operation.java    |   0
 .../admin/registry/common/domain/Override.java     |   0
 .../dubbo/admin/registry/common/domain/Owner.java  |   0
 .../admin/registry/common/domain/PageList.java     |   0
 .../admin/registry/common/domain/Provider.java     |   0
 .../admin/registry/common/domain/Registry.java     |   0
 .../dubbo/admin/registry/common/domain/Route.java  |   0
 .../registry/common/domain/SearchHistory.java      |   0
 .../dubbo/admin/registry/common/domain/Test.java   |   0
 .../dubbo/admin/registry/common/domain/User.java   |   0
 .../dubbo/admin/registry/common/domain/Weight.java |   0
 .../registry/common/registry/ConvertUtil.java      |   0
 .../admin/registry/common/route/OverrideUtils.java |   0
 .../admin/registry/common/route/ParseUtils.java    |   0
 .../admin/registry/common/route/RouteRule.java     |   0
 .../registry/common/route/RouteRuleUtils.java      |   0
 .../admin/registry/common/route/RouteUtils.java    |   0
 .../common/status/DatabaseStatusChecker.java       |   0
 .../registry/common/status/LoadStatusChecker.java  |   0
 .../common/status/MemoryStatusChecker.java         |   0
 .../dubbo/admin/registry/common/util/Coder.java    |   0
 .../dubbo/admin/registry/common/util/Entities.java |   0
 .../admin/registry/common/util/IntHashMap.java     |   0
 .../admin/registry/common/util/LocaleUtils.java    |   0
 .../admin/registry/common/util/MessageSource.java  |   0
 .../admin/registry/common/util/OverrideUtils.java  |   0
 .../registry/common/util/StringEscapeUtils.java    |   0
 .../dubbo/admin/registry/common/util/Tool.java     |   0
 .../apache/dubbo/admin/web/mvc/BaseController.java |   0
 .../dubbo/admin/web/mvc/RouterController.java      |   0
 .../dubbo/admin/web/mvc/common/auth/DubboUser.java |   0
 .../admin/web/mvc/common/i18n/LocaleUtil.java      |   0
 .../web/mvc/governance/AccessesController.java     |   0
 .../web/mvc/governance/AddressesController.java    |   0
 .../web/mvc/governance/LoadbalancesController.java |   0
 .../web/mvc/governance/OverridesController.java    |   0
 .../admin/web/mvc/governance/OwnersController.java |   0
 .../admin/web/mvc/governance/RoutesController.java |   0
 .../mvc/governance/ServiceDetailController.java    |   0
 .../web/mvc/governance/ServicesController.java     |   0
 .../web/mvc/governance/WeightsController.java      |   0
 .../dubbo/admin/web/mvc/home/IndexController.java  |   0
 .../admin/web/mvc/sysinfo/DumpController.java      |   0
 .../admin/web/mvc/sysinfo/DumpsController.java     |   0
 .../admin/web/mvc/sysinfo/EnvsController.java      |   0
 .../admin/web/mvc/sysinfo/LogsController.java      |   0
 .../admin/web/mvc/sysinfo/StatusesController.java  |   0
 .../admin/web/mvc/sysinfo/VersionsController.java  |   0
 .../dubbo/admin/web/pulltool/DateFormatUtil.java   |   0
 .../dubbo/admin/web/pulltool/RootContextPath.java  |   0
 .../org/apache/dubbo/admin/web/pulltool/Tool.java  |   0
 .../src/main/resources/application.properties      |   0
 .../src/main/resources/dubbo-admin.xml             |   0
 .../src/main/resources/log4j.properties            |   0
 .../.babelrc                                       |   0
 .../.editorconfig                                  |   0
 .../.eslintignore                                  |   0
 .../.eslintrc.js                                   |   0
 .../.gitignore                                     |   0
 .../.postcssrc.js                                  |   0
 .../README.md                                      |   0
 .../build/build.js                                 |   0
 .../build/check-versions.js                        |   0
 .../build/logo.png                                 | Bin
 .../build/utils.js                                 |   2 +-
 .../build/vue-loader.conf.js                       |   2 +-
 .../build/webpack.base.conf.js                     |   2 +-
 .../build/webpack.dev.conf.js                      |   0
 .../build/webpack.prod.conf.js                     |   2 +-
 .../config/dev.env.js                              |   0
 .../config/index.js                                |   0
 .../config/prod.env.js                             |   0
 .../index.html                                     |   0
 .../package.json                                   |   0
 .../pom.xml                                        |   0
 .../src/.gitrepo                                   |   0
 .../src/App.vue                                    |   0
 .../src/assets/logo.png                            | Bin
 .../src/assets/man_4.jpg                           | Bin
 .../src/components/Drawer.vue                      |   0
 .../src/components/Footers.vue                     |   0
 .../src/components/RoutingRule.vue                 |   0
 .../src/components/ServiceDetail.vue               |   0
 .../src/components/ServiceSearch.vue               |   0
 .../src/components/Toolbar.vue                     |   0
 .../src/components/http-common.js                  |   0
 .../src/main.js                                    |   0
 .../src/router/index.js                            |   0
 .../src/store/index.js                             |   0
 .../src/util/index.js                              |   0
 .../static/.gitkeep                                |   0
 dubbo-admin/README.md                              |  17 -
 dubbo-admin/pom.xml                                |  49 ---
 dubbo-monitor-simple/pom.xml                       | 113 ------
 .../src/main/assembly/assembly.xml                 |  40 ---
 .../dubbo/monitor/simple/MonitorStarter.java       |  27 --
 .../dubbo/monitor/simple/SimpleMonitorService.java | 400 ---------------------
 .../dubbo/monitor/simple/common/CountUtils.java    |  92 -----
 .../alibaba/dubbo/monitor/simple/common/Menu.java  |  39 --
 .../monitor/simple/common/MenuComparator.java      |  45 ---
 .../alibaba/dubbo/monitor/simple/common/Page.java  |  82 -----
 .../monitor/simple/container/JettyContainer.java   |  89 -----
 .../simple/container/RegistryContainer.java        | 293 ---------------
 .../simple/pages/ApplicationsPageHandler.java      |  82 -----
 .../monitor/simple/pages/ChartsPageHandler.java    |  95 -----
 .../monitor/simple/pages/ClientsPageHandler.java   |  77 ----
 .../monitor/simple/pages/ConsumersPageHandler.java |  88 -----
 .../simple/pages/DependenciesPageHandler.java      |  88 -----
 .../monitor/simple/pages/HomePageHandler.java      |  48 ---
 .../monitor/simple/pages/HostsPageHandler.java     |  75 ----
 .../dubbo/monitor/simple/pages/LogPageHandler.java | 106 ------
 .../monitor/simple/pages/ProvidersPageHandler.java |  88 -----
 .../simple/pages/RegisteredPageHandler.java        |  78 ----
 .../simple/pages/RegistriesPageHandler.java        |  70 ----
 .../monitor/simple/pages/ServersPageHandler.java   |  55 ---
 .../monitor/simple/pages/ServicesPageHandler.java  |  72 ----
 .../simple/pages/StatisticsPageHandler.java        | 167 ---------
 .../monitor/simple/pages/StatusPageHandler.java    |  84 -----
 .../simple/pages/SubscribedPageHandler.java        |  78 ----
 .../monitor/simple/pages/SystemPageHandler.java    | 137 -------
 .../simple/pages/UnregisterPageHandler.java        |  49 ---
 .../simple/pages/UnsubscribePageHandler.java       |  64 ----
 .../dubbo/monitor/simple/servlet/PageHandler.java  |  37 --
 .../dubbo/monitor/simple/servlet/PageServlet.java  | 282 ---------------
 .../monitor/simple/servlet/ResourceFilter.java     | 151 --------
 .../main/resources/META-INF/assembly/bin/dump.sh   |  92 -----
 .../resources/META-INF/assembly/bin/restart.sh     |   4 -
 .../main/resources/META-INF/assembly/bin/server.sh |  24 --
 .../main/resources/META-INF/assembly/bin/start.bat |  22 --
 .../main/resources/META-INF/assembly/bin/start.sh  | 106 ------
 .../main/resources/META-INF/assembly/bin/stop.sh   |  44 ---
 .../internal/com.alibaba.dubbo.container.Container |   2 -
 ...libaba.dubbo.monitor.simple.servlet.PageHandler |  19 -
 .../META-INF/spring/dubbo-monitor-simple.xml       |  41 ---
 .../src/main/resources/conf/dubbo.properties       |  29 --
 dubbo-monitor-simple/src/main/resources/log4j.xml  |  29 --
 .../dubbo/monitor/simple/SimpleMonitor.java        |  25 --
 .../monitor/simple/SimpleMonitorServiceTest.java   |  34 --
 .../src/test/resources/dubbo.properties            |  29 --
 dubbo-monitor-simple/src/test/resources/log4j.xml  |  29 --
 dubbo-registry-simple/pom.xml                      |  84 -----
 .../src/main/assembly/assembly.xml                 |  40 ---
 .../registry/simple/SimpleRegistryService.java     | 209 -----------
 .../main/resources/META-INF/assembly/bin/dump.sh   |  92 -----
 .../resources/META-INF/assembly/bin/restart.sh     |   4 -
 .../main/resources/META-INF/assembly/bin/server.sh |  24 --
 .../main/resources/META-INF/assembly/bin/start.bat |  22 --
 .../main/resources/META-INF/assembly/bin/start.sh  |  92 -----
 .../main/resources/META-INF/assembly/bin/stop.sh   |  44 ---
 .../META-INF/spring/dubbo-registry-simple.xml      |  45 ---
 .../src/main/resources/conf/dubbo.properties       |  21 --
 .../dubbo/registry/simple/SimpleRegistry.java      |  25 --
 .../registry/simple/SimpleRegistryServiceTest.java |  31 --
 .../src/test/resources/dubbo.properties            |  21 --
 dubbo-registry-simple/src/test/resources/log4j.xml |  29 --
 pom.xml                                            | 264 ++++----------
 211 files changed, 80 insertions(+), 4916 deletions(-)

diff --git a/.gitignore b/.gitignore
index 40bf266..e229655 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,8 +29,8 @@ target/
 .DS_Store
 Thumbs.db
 
-dubbo-admin/dubbo-admin-backend/src/main/resources/public
-dubbo-admin/dubbo-admin-backend/target
-dubbo-admin/dubbo-admin-frontend/dist
-dubbo-admin/dubbo-admin-frontend/node
-dubbo-admin/dubbo-admin-frontend/node-modules
+dubbo-admin-backend/src/main/resources/public
+dubbo-admin-backend/target
+dubbo-admin-frontend/dist
+dubbo-admin-frontend/node
+dubbo-admin-frontend/node-modules
diff --git a/README.md b/README.md
index eb41128..653f8d7 100644
--- a/README.md
+++ b/README.md
@@ -1,35 +1,17 @@
-### dubbo-ops
-[![Build Status](https://travis-ci.org/apache/incubator-dubbo-ops.svg?branch=master)](https://travis-ci.org/apache/incubator-dubbo-ops) 
-[![Gitter](https://badges.gitter.im/alibaba/dubbo.svg)](https://gitter.im/alibaba/dubbo?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+# Dubbo admin
 
-The following modules in [Apache Dubbo(incubating)](https://github.com/apache/incubator-dubbo) have been moved here:
+> dubbo admin front end and back end
 
-* dubbo-admin
-* dubbo-monitor-simple
-* dubbo-registry-simple
+## Build setup 
 
+``` bash
+# build
+mvn clean install
 
-### How to use it
-You can get a release of dubbo monitor in two steps:
-
-#### dubbo admin
-please refer to the README.md in dubbo admin module
-
-#### dubbo monitor and dubbo registry
-- Step 1:
-```
-git clone https://github.com/apache/incubator-dubbo-ops
-```
-
-- Step 2:
-```
-cd incubator-dubbo-ops && mvn package
-```
-
-Then you will find:
-
-  * dubbo-monitor-simple-2.0.0-assembly.tar.gz in incubator-dubbo-ops\dubbo-monitor-simple\target directory. Unzip it you will find the shell scripts for starting or stopping monitor.
-  * dubbo-registry-simple-2.0.0-assembly.tar.gz in incubator-dubbo-ops\dubbo-registry-simple\target directory. Unzip it you will find the shell scripts for starting or stopping registry.
-
+# run
+mvn --projects dubbo-admin-backend spring-boot:run
 
+# visit
+localhost:8080 
 
+```
\ No newline at end of file
diff --git a/dubbo-admin/dubbo-admin-backend/pom.xml b/dubbo-admin-backend/pom.xml
similarity index 95%
rename from dubbo-admin/dubbo-admin-backend/pom.xml
rename to dubbo-admin-backend/pom.xml
index 5b12ca6..6681321 100644
--- a/dubbo-admin/dubbo-admin-backend/pom.xml
+++ b/dubbo-admin-backend/pom.xml
@@ -50,30 +50,25 @@
         <dependency>
             <groupId>org.apache.commons</groupId>
             <artifactId>commons-lang3</artifactId>
-            <version>3.7</version>
         </dependency>
 
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>dubbo</artifactId>
-            <version>2.6.2</version>
         </dependency>
 
         <dependency>
             <groupId>org.apache.curator</groupId>
             <artifactId>curator-framework</artifactId>
-            <version>2.12.0</version>
         </dependency>
         <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
-            <version>1.2.46</version>
         </dependency>
 
         <dependency>
             <groupId>org.yaml</groupId>
             <artifactId>snakeyaml</artifactId>
-            <version>1.22</version>
         </dependency>
 
     </dependencies>
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/DubboAdminApplication.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/DubboAdminApplication.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/DubboAdminApplication.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/DubboAdminApplication.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/SpringUtil.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/SpringUtil.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/SpringUtil.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/SpringUtil.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/I18nConfig.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/I18nConfig.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/I18nConfig.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/I18nConfig.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/XmlConfiguration.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/XmlConfiguration.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/XmlConfiguration.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/config/XmlConfiguration.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/RoutesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/RoutesController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/RoutesController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/RoutesController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/ServiceController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/ServiceController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/ServiceController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/controller/ServiceController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDO.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDO.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDO.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDO.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDetailDO.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDetailDO.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDetailDO.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/domain/ServiceDetailDO.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/filter/LoginFilter.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/filter/LoginFilter.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/filter/LoginFilter.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/filter/LoginFilter.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/MessageResourceService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/MessageResourceService.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/MessageResourceService.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/MessageResourceService.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/impl/MessageResourceServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/impl/MessageResourceServiceImpl.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/impl/MessageResourceServiceImpl.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/biz/common/i18n/impl/MessageResourceServiceImpl.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ConfigService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ConfigService.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ConfigService.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ConfigService.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ConsumerService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ConsumerService.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ConsumerService.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ConsumerService.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/OverrideService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/OverrideService.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/OverrideService.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/OverrideService.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/OwnerService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/OwnerService.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/OwnerService.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/OwnerService.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ProviderService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ProviderService.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ProviderService.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/ProviderService.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/RouteService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/RouteService.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/RouteService.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/RouteService.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/UserService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/UserService.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/UserService.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/UserService.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/AbstractService.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/AbstractService.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/AbstractService.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/AbstractService.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ConfigServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ConfigServiceImpl.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ConfigServiceImpl.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ConfigServiceImpl.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ConsumerServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ConsumerServiceImpl.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ConsumerServiceImpl.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ConsumerServiceImpl.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OverrideServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OverrideServiceImpl.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OverrideServiceImpl.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OverrideServiceImpl.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OwnerServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OwnerServiceImpl.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OwnerServiceImpl.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/OwnerServiceImpl.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ProviderServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ProviderServiceImpl.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ProviderServiceImpl.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/ProviderServiceImpl.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/RouteServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/RouteServiceImpl.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/RouteServiceImpl.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/RouteServiceImpl.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/UserServiceImpl.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/UserServiceImpl.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/UserServiceImpl.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/service/impl/UserServiceImpl.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/RegistryServerSync.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/RegistryServerSync.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/RegistryServerSync.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/RegistryServerSync.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/Pair.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/Pair.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/Pair.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/Pair.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/SyncUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/SyncUtils.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/SyncUtils.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/sync/util/SyncUtils.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/GovernanceWarmup.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/GovernanceWarmup.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/GovernanceWarmup.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/GovernanceWarmup.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/Paginator.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/Paginator.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/Paginator.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/Paginator.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/UrlUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/UrlUtils.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/UrlUtils.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/UrlUtils.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/WebConstants.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/WebConstants.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/WebConstants.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/governance/util/WebConstants.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/ChangeListener.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/ChangeListener.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/ChangeListener.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/ChangeListener.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/StatusManager.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/StatusManager.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/StatusManager.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/StatusManager.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Access.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Access.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Access.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Access.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Agreement.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Agreement.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Agreement.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Agreement.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Approval.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Approval.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Approval.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Approval.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/ApprovalRequisition.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/ApprovalRequisition.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/ApprovalRequisition.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/ApprovalRequisition.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Change.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Change.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Change.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Change.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Cluster.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Cluster.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Cluster.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Cluster.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Config.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Config.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Config.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Config.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Consumer.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Consumer.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Consumer.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Consumer.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/DependItem.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/DependItem.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/DependItem.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/DependItem.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Dependency.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Dependency.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Dependency.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Dependency.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Document.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Document.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Document.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Document.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Entity.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Entity.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Entity.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Entity.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Favorite.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Favorite.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Favorite.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Favorite.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Feature.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Feature.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Feature.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Feature.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Layer.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Layer.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Layer.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Layer.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/LoadBalance.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/LoadBalance.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/LoadBalance.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/LoadBalance.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Mock.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Mock.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Mock.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Mock.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Operation.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Operation.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Operation.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Operation.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Override.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Override.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Override.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Override.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Owner.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Owner.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Owner.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Owner.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/PageList.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/PageList.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/PageList.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/PageList.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Provider.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Provider.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Provider.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Provider.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Registry.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Registry.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Registry.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Registry.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Route.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Route.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Route.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Route.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/SearchHistory.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/SearchHistory.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/SearchHistory.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/SearchHistory.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Test.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Test.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Test.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Test.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/User.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/User.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/User.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/User.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Weight.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Weight.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Weight.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/domain/Weight.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/registry/ConvertUtil.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/registry/ConvertUtil.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/registry/ConvertUtil.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/registry/ConvertUtil.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/OverrideUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/OverrideUtils.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/OverrideUtils.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/OverrideUtils.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/ParseUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/ParseUtils.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/ParseUtils.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/ParseUtils.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRule.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRule.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRule.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRule.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRuleUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRuleUtils.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRuleUtils.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteRuleUtils.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteUtils.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteUtils.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/route/RouteUtils.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/DatabaseStatusChecker.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/DatabaseStatusChecker.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/DatabaseStatusChecker.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/DatabaseStatusChecker.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/LoadStatusChecker.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/LoadStatusChecker.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/LoadStatusChecker.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/LoadStatusChecker.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/MemoryStatusChecker.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/MemoryStatusChecker.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/MemoryStatusChecker.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/status/MemoryStatusChecker.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Coder.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Coder.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Coder.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Coder.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Entities.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Entities.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Entities.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Entities.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/IntHashMap.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/IntHashMap.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/IntHashMap.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/IntHashMap.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/LocaleUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/LocaleUtils.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/LocaleUtils.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/LocaleUtils.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/MessageSource.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/MessageSource.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/MessageSource.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/MessageSource.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/OverrideUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/OverrideUtils.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/OverrideUtils.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/OverrideUtils.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/StringEscapeUtils.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/StringEscapeUtils.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/StringEscapeUtils.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/StringEscapeUtils.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Tool.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Tool.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Tool.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/registry/common/util/Tool.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/BaseController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/BaseController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/BaseController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/BaseController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/RouterController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/RouterController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/RouterController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/RouterController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/common/auth/DubboUser.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/common/auth/DubboUser.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/common/auth/DubboUser.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/common/auth/DubboUser.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/common/i18n/LocaleUtil.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/common/i18n/LocaleUtil.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/common/i18n/LocaleUtil.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/common/i18n/LocaleUtil.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/AccessesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/AccessesController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/AccessesController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/AccessesController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/AddressesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/AddressesController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/AddressesController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/AddressesController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/LoadbalancesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/LoadbalancesController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/LoadbalancesController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/LoadbalancesController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OverridesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OverridesController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OverridesController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OverridesController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OwnersController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OwnersController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OwnersController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/OwnersController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/RoutesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/RoutesController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/RoutesController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/RoutesController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServiceDetailController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServiceDetailController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServiceDetailController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServiceDetailController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServicesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServicesController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServicesController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/ServicesController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/WeightsController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/WeightsController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/WeightsController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/governance/WeightsController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/home/IndexController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/home/IndexController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/home/IndexController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/home/IndexController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/DumpController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/DumpController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/DumpController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/DumpController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/DumpsController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/DumpsController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/DumpsController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/DumpsController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/EnvsController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/EnvsController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/EnvsController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/EnvsController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/LogsController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/LogsController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/LogsController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/LogsController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/StatusesController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/StatusesController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/StatusesController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/StatusesController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/VersionsController.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/VersionsController.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/VersionsController.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/mvc/sysinfo/VersionsController.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/DateFormatUtil.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/DateFormatUtil.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/DateFormatUtil.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/DateFormatUtil.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/RootContextPath.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/RootContextPath.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/RootContextPath.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/RootContextPath.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/Tool.java b/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/Tool.java
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/Tool.java
rename to dubbo-admin-backend/src/main/java/org/apache/dubbo/admin/web/pulltool/Tool.java
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/resources/application.properties b/dubbo-admin-backend/src/main/resources/application.properties
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/resources/application.properties
rename to dubbo-admin-backend/src/main/resources/application.properties
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/resources/dubbo-admin.xml b/dubbo-admin-backend/src/main/resources/dubbo-admin.xml
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/resources/dubbo-admin.xml
rename to dubbo-admin-backend/src/main/resources/dubbo-admin.xml
diff --git a/dubbo-admin/dubbo-admin-backend/src/main/resources/log4j.properties b/dubbo-admin-backend/src/main/resources/log4j.properties
similarity index 100%
rename from dubbo-admin/dubbo-admin-backend/src/main/resources/log4j.properties
rename to dubbo-admin-backend/src/main/resources/log4j.properties
diff --git a/dubbo-admin/dubbo-admin-frontend/.babelrc b/dubbo-admin-frontend/.babelrc
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/.babelrc
rename to dubbo-admin-frontend/.babelrc
diff --git a/dubbo-admin/dubbo-admin-frontend/.editorconfig b/dubbo-admin-frontend/.editorconfig
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/.editorconfig
rename to dubbo-admin-frontend/.editorconfig
diff --git a/dubbo-admin/dubbo-admin-frontend/.eslintignore b/dubbo-admin-frontend/.eslintignore
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/.eslintignore
rename to dubbo-admin-frontend/.eslintignore
diff --git a/dubbo-admin/dubbo-admin-frontend/.eslintrc.js b/dubbo-admin-frontend/.eslintrc.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/.eslintrc.js
rename to dubbo-admin-frontend/.eslintrc.js
diff --git a/dubbo-admin/dubbo-admin-frontend/.gitignore b/dubbo-admin-frontend/.gitignore
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/.gitignore
rename to dubbo-admin-frontend/.gitignore
diff --git a/dubbo-admin/dubbo-admin-frontend/.postcssrc.js b/dubbo-admin-frontend/.postcssrc.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/.postcssrc.js
rename to dubbo-admin-frontend/.postcssrc.js
diff --git a/dubbo-admin/dubbo-admin-frontend/README.md b/dubbo-admin-frontend/README.md
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/README.md
rename to dubbo-admin-frontend/README.md
diff --git a/dubbo-admin/dubbo-admin-frontend/build/build.js b/dubbo-admin-frontend/build/build.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/build/build.js
rename to dubbo-admin-frontend/build/build.js
diff --git a/dubbo-admin/dubbo-admin-frontend/build/check-versions.js b/dubbo-admin-frontend/build/check-versions.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/build/check-versions.js
rename to dubbo-admin-frontend/build/check-versions.js
diff --git a/dubbo-admin/dubbo-admin-frontend/build/logo.png b/dubbo-admin-frontend/build/logo.png
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/build/logo.png
rename to dubbo-admin-frontend/build/logo.png
diff --git a/dubbo-admin/dubbo-admin-frontend/build/utils.js b/dubbo-admin-frontend/build/utils.js
similarity index 98%
rename from dubbo-admin/dubbo-admin-frontend/build/utils.js
rename to dubbo-admin-frontend/build/utils.js
index e534fb0..5414568 100644
--- a/dubbo-admin/dubbo-admin-frontend/build/utils.js
+++ b/dubbo-admin-frontend/build/utils.js
@@ -1,6 +1,6 @@
 'use strict'
 const path = require('path')
-const config = require('../config')
+const config = require('../config/index')
 const ExtractTextPlugin = require('extract-text-webpack-plugin')
 const packageConfig = require('../package.json')
 
diff --git a/dubbo-admin/dubbo-admin-frontend/build/vue-loader.conf.js b/dubbo-admin-frontend/build/vue-loader.conf.js
similarity index 92%
rename from dubbo-admin/dubbo-admin-frontend/build/vue-loader.conf.js
rename to dubbo-admin-frontend/build/vue-loader.conf.js
index 33ed58b..6365d98 100644
--- a/dubbo-admin/dubbo-admin-frontend/build/vue-loader.conf.js
+++ b/dubbo-admin-frontend/build/vue-loader.conf.js
@@ -1,6 +1,6 @@
 'use strict'
 const utils = require('./utils')
-const config = require('../config')
+const config = require('../config/index')
 const isProduction = process.env.NODE_ENV === 'production'
 const sourceMapEnabled = isProduction
   ? config.build.productionSourceMap
diff --git a/dubbo-admin/dubbo-admin-frontend/build/webpack.base.conf.js b/dubbo-admin-frontend/build/webpack.base.conf.js
similarity index 98%
rename from dubbo-admin/dubbo-admin-frontend/build/webpack.base.conf.js
rename to dubbo-admin-frontend/build/webpack.base.conf.js
index 1f4f47e..5bcfcca 100644
--- a/dubbo-admin/dubbo-admin-frontend/build/webpack.base.conf.js
+++ b/dubbo-admin-frontend/build/webpack.base.conf.js
@@ -1,7 +1,7 @@
 'use strict'
 const path = require('path')
 const utils = require('./utils')
-const config = require('../config')
+const config = require('../config/index')
 const vueLoaderConfig = require('./vue-loader.conf')
 
 function resolve (dir) {
diff --git a/dubbo-admin/dubbo-admin-frontend/build/webpack.dev.conf.js b/dubbo-admin-frontend/build/webpack.dev.conf.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/build/webpack.dev.conf.js
rename to dubbo-admin-frontend/build/webpack.dev.conf.js
diff --git a/dubbo-admin/dubbo-admin-frontend/build/webpack.prod.conf.js b/dubbo-admin-frontend/build/webpack.prod.conf.js
similarity index 99%
rename from dubbo-admin/dubbo-admin-frontend/build/webpack.prod.conf.js
rename to dubbo-admin-frontend/build/webpack.prod.conf.js
index d9f99f6..b60b3f6 100644
--- a/dubbo-admin/dubbo-admin-frontend/build/webpack.prod.conf.js
+++ b/dubbo-admin-frontend/build/webpack.prod.conf.js
@@ -2,7 +2,7 @@
 const path = require('path')
 const utils = require('./utils')
 const webpack = require('webpack')
-const config = require('../config')
+const config = require('../config/index')
 const merge = require('webpack-merge')
 const baseWebpackConfig = require('./webpack.base.conf')
 const CopyWebpackPlugin = require('copy-webpack-plugin')
diff --git a/dubbo-admin/dubbo-admin-frontend/config/dev.env.js b/dubbo-admin-frontend/config/dev.env.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/config/dev.env.js
rename to dubbo-admin-frontend/config/dev.env.js
diff --git a/dubbo-admin/dubbo-admin-frontend/config/index.js b/dubbo-admin-frontend/config/index.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/config/index.js
rename to dubbo-admin-frontend/config/index.js
diff --git a/dubbo-admin/dubbo-admin-frontend/config/prod.env.js b/dubbo-admin-frontend/config/prod.env.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/config/prod.env.js
rename to dubbo-admin-frontend/config/prod.env.js
diff --git a/dubbo-admin/dubbo-admin-frontend/index.html b/dubbo-admin-frontend/index.html
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/index.html
rename to dubbo-admin-frontend/index.html
diff --git a/dubbo-admin/dubbo-admin-frontend/package.json b/dubbo-admin-frontend/package.json
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/package.json
rename to dubbo-admin-frontend/package.json
diff --git a/dubbo-admin/dubbo-admin-frontend/pom.xml b/dubbo-admin-frontend/pom.xml
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/pom.xml
rename to dubbo-admin-frontend/pom.xml
diff --git a/dubbo-admin/dubbo-admin-frontend/src/.gitrepo b/dubbo-admin-frontend/src/.gitrepo
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/.gitrepo
rename to dubbo-admin-frontend/src/.gitrepo
diff --git a/dubbo-admin/dubbo-admin-frontend/src/App.vue b/dubbo-admin-frontend/src/App.vue
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/App.vue
rename to dubbo-admin-frontend/src/App.vue
diff --git a/dubbo-admin/dubbo-admin-frontend/src/assets/logo.png b/dubbo-admin-frontend/src/assets/logo.png
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/assets/logo.png
rename to dubbo-admin-frontend/src/assets/logo.png
diff --git a/dubbo-admin/dubbo-admin-frontend/src/assets/man_4.jpg b/dubbo-admin-frontend/src/assets/man_4.jpg
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/assets/man_4.jpg
rename to dubbo-admin-frontend/src/assets/man_4.jpg
diff --git a/dubbo-admin/dubbo-admin-frontend/src/components/Drawer.vue b/dubbo-admin-frontend/src/components/Drawer.vue
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/components/Drawer.vue
rename to dubbo-admin-frontend/src/components/Drawer.vue
diff --git a/dubbo-admin/dubbo-admin-frontend/src/components/Footers.vue b/dubbo-admin-frontend/src/components/Footers.vue
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/components/Footers.vue
rename to dubbo-admin-frontend/src/components/Footers.vue
diff --git a/dubbo-admin/dubbo-admin-frontend/src/components/RoutingRule.vue b/dubbo-admin-frontend/src/components/RoutingRule.vue
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/components/RoutingRule.vue
rename to dubbo-admin-frontend/src/components/RoutingRule.vue
diff --git a/dubbo-admin/dubbo-admin-frontend/src/components/ServiceDetail.vue b/dubbo-admin-frontend/src/components/ServiceDetail.vue
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/components/ServiceDetail.vue
rename to dubbo-admin-frontend/src/components/ServiceDetail.vue
diff --git a/dubbo-admin/dubbo-admin-frontend/src/components/ServiceSearch.vue b/dubbo-admin-frontend/src/components/ServiceSearch.vue
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/components/ServiceSearch.vue
rename to dubbo-admin-frontend/src/components/ServiceSearch.vue
diff --git a/dubbo-admin/dubbo-admin-frontend/src/components/Toolbar.vue b/dubbo-admin-frontend/src/components/Toolbar.vue
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/components/Toolbar.vue
rename to dubbo-admin-frontend/src/components/Toolbar.vue
diff --git a/dubbo-admin/dubbo-admin-frontend/src/components/http-common.js b/dubbo-admin-frontend/src/components/http-common.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/components/http-common.js
rename to dubbo-admin-frontend/src/components/http-common.js
diff --git a/dubbo-admin/dubbo-admin-frontend/src/main.js b/dubbo-admin-frontend/src/main.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/main.js
rename to dubbo-admin-frontend/src/main.js
diff --git a/dubbo-admin/dubbo-admin-frontend/src/router/index.js b/dubbo-admin-frontend/src/router/index.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/router/index.js
rename to dubbo-admin-frontend/src/router/index.js
diff --git a/dubbo-admin/dubbo-admin-frontend/src/store/index.js b/dubbo-admin-frontend/src/store/index.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/store/index.js
rename to dubbo-admin-frontend/src/store/index.js
diff --git a/dubbo-admin/dubbo-admin-frontend/src/util/index.js b/dubbo-admin-frontend/src/util/index.js
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/src/util/index.js
rename to dubbo-admin-frontend/src/util/index.js
diff --git a/dubbo-admin/dubbo-admin-frontend/static/.gitkeep b/dubbo-admin-frontend/static/.gitkeep
similarity index 100%
rename from dubbo-admin/dubbo-admin-frontend/static/.gitkeep
rename to dubbo-admin-frontend/static/.gitkeep
diff --git a/dubbo-admin/README.md b/dubbo-admin/README.md
deleted file mode 100644
index 653f8d7..0000000
--- a/dubbo-admin/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Dubbo admin
-
-> dubbo admin front end and back end
-
-## Build setup 
-
-``` bash
-# build
-mvn clean install
-
-# run
-mvn --projects dubbo-admin-backend spring-boot:run
-
-# visit
-localhost:8080 
-
-```
\ No newline at end of file
diff --git a/dubbo-admin/pom.xml b/dubbo-admin/pom.xml
deleted file mode 100644
index 5038d0c..0000000
--- a/dubbo-admin/pom.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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
-  ~  he 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>
-
-	<groupId>org.apache</groupId>
-	<artifactId>dubbo-admin</artifactId>
-	<version>0.0.1-SNAPSHOT</version>
-	<modules>
-		<module>dubbo-admin-frontend</module>
-		<module>dubbo-admin-backend</module>
-	</modules>
-	<packaging>pom</packaging>
-
-	<name>dubbo-admin</name>
-	<description>Dubbo admin front and back end</description>
-
-	<parent>
-		<groupId>org.springframework.boot</groupId>
-		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>2.0.2.RELEASE</version>
-		<relativePath/> <!-- lookup parent from repository -->
-	</parent>
-
-	<properties>
-		<main.basedir>${project.basedir}</main.basedir>
-	</properties>
-
-
-
-
-</project>
diff --git a/dubbo-monitor-simple/pom.xml b/dubbo-monitor-simple/pom.xml
deleted file mode 100644
index 3b774b5..0000000
--- a/dubbo-monitor-simple/pom.xml
+++ /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.
--->
-<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>com.alibaba</groupId>
-        <artifactId>dubbo-ops</artifactId>
-        <version>2.0.0</version>
-    </parent>
-    <artifactId>dubbo-monitor-simple</artifactId>
-    <packaging>jar</packaging>
-    <name>${project.artifactId}</name>
-    <description>The reference implementation of dubbo monitor</description>
-    <properties>
-        <skip_maven_deploy>false</skip_maven_deploy>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>dubbo</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>jfree</groupId>
-            <artifactId>jfreechart</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.curator</groupId>
-            <artifactId>curator-framework</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.mortbay.jetty</groupId>
-            <artifactId>jetty</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>log4j</groupId>
-            <artifactId>log4j</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-        </dependency>
-        <dependency>
-           <groupId>org.slf4j</groupId>
-           <artifactId>slf4j-log4j12</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.servlet</groupId>
-            <artifactId>javax.servlet-api</artifactId>
-            <scope>provided</scope>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>unpack</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>unpack</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>com.alibaba</groupId>
-                                    <artifactId>dubbo</artifactId>
-                                    <version>${dubbo_all_version}</version>
-                                    <outputDirectory>${project.build.directory}/dubbo</outputDirectory>
-                                    <includes>META-INF/assembly/**</includes>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <configuration>
-                    <descriptor>src/main/assembly/assembly.xml</descriptor>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>make-assembly</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/assembly/assembly.xml b/dubbo-monitor-simple/src/main/assembly/assembly.xml
deleted file mode 100644
index 39f34dc..0000000
--- a/dubbo-monitor-simple/src/main/assembly/assembly.xml
+++ /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.
--->
-<assembly>
-    <id>assembly</id>
-    <formats>
-        <format>tar.gz</format>
-    </formats>
-    <includeBaseDirectory>true</includeBaseDirectory>
-    <fileSets>
-        <fileSet>
-            <directory>${project.build.directory}/classes/META-INF/assembly/bin</directory>
-            <outputDirectory>assembly.bin</outputDirectory>
-            <fileMode>0755</fileMode>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/resources/conf</directory>
-            <outputDirectory>conf</outputDirectory>
-            <fileMode>0644</fileMode>
-        </fileSet>
-    </fileSets>
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>lib</outputDirectory>
-        </dependencySet>
-    </dependencySets>
-</assembly>
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/MonitorStarter.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/MonitorStarter.java
deleted file mode 100644
index ae565de..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/MonitorStarter.java
+++ /dev/null
@@ -1,27 +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 com.alibaba.dubbo.monitor.simple;
-
-import com.alibaba.dubbo.common.Constants;
-import com.alibaba.dubbo.container.Main;
-
-public class MonitorStarter {
-    public static void main(String[] args) {
-        System.setProperty(Constants.DUBBO_PROPERTIES_KEY, "conf/dubbo.properties");
-        Main.main(args);
-    }
-}
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/SimpleMonitorService.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/SimpleMonitorService.java
deleted file mode 100644
index b66f1fa..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/SimpleMonitorService.java
+++ /dev/null
@@ -1,400 +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 com.alibaba.dubbo.monitor.simple;
-
-import com.alibaba.dubbo.common.Constants;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.logger.Logger;
-import com.alibaba.dubbo.common.logger.LoggerFactory;
-import com.alibaba.dubbo.common.utils.ConfigUtils;
-import com.alibaba.dubbo.common.utils.NamedThreadFactory;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.monitor.MonitorService;
-import com.alibaba.dubbo.monitor.simple.common.CountUtils;
-
-import org.jfree.chart.ChartFactory;
-import org.jfree.chart.JFreeChart;
-import org.jfree.chart.axis.DateAxis;
-import org.jfree.chart.plot.XYPlot;
-import org.jfree.data.time.Minute;
-import org.jfree.data.time.TimeSeries;
-import org.jfree.data.time.TimeSeriesCollection;
-
-import javax.imageio.ImageIO;
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.text.DecimalFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.Executors;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-
-/**
- * SimpleMonitorService
- */
-public class SimpleMonitorService implements MonitorService {
-
-    private static final Logger logger = LoggerFactory.getLogger(SimpleMonitorService.class);
-
-    private static final String[] types = {SUCCESS, FAILURE, ELAPSED, CONCURRENT, MAX_ELAPSED, MAX_CONCURRENT};
-
-    private static final String POISON_PROTOCOL = "poison";
-    private final ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1, new NamedThreadFactory("DubboMonitorTimer", true));
-    private final ScheduledFuture<?> chartFuture;
-    private final Thread writeThread;
-    private final BlockingQueue<URL> queue;
-    private String statisticsDirectory = "statistics";
-    private String chartsDirectory = "charts";
-    private volatile boolean running = true;
-
-    public SimpleMonitorService() {
-        queue = new LinkedBlockingQueue<URL>(Integer.parseInt(ConfigUtils.getProperty("dubbo.monitor.queue", "100000")));
-        writeThread = new Thread(new Runnable() {
-            public void run() {
-                while (running) {
-                    try {
-                        write(); // write statistics
-                    } catch (Throwable t) {
-                        logger.error("Unexpected error occur at write stat log, cause: " + t.getMessage(), t);
-                        try {
-                            Thread.sleep(5000); // retry after 5 secs
-                        } catch (Throwable t2) {
-                        }
-                    }
-                }
-            }
-        });
-        writeThread.setDaemon(true);
-        writeThread.setName("DubboMonitorAsyncWriteLogThread");
-        writeThread.start();
-        chartFuture = scheduledExecutorService.scheduleWithFixedDelay(new Runnable() {
-            public void run() {
-                try {
-                    draw(); // draw chart
-                } catch (Throwable t) {
-                    logger.error("Unexpected error occur at draw stat chart, cause: " + t.getMessage(), t);
-                }
-            }
-        }, 1, 300, TimeUnit.SECONDS);
-        statisticsDirectory = ConfigUtils.getProperty("dubbo.statistics.directory");
-        chartsDirectory = ConfigUtils.getProperty("dubbo.charts.directory");
-    }
-
-    private static void createChart(String key, String service, String method, String date, String[] types, Map<String, long[]> data, double[] summary, String path) {
-        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmm");
-        DecimalFormat numberFormat = new DecimalFormat("###,##0.##");
-        TimeSeriesCollection xydataset = new TimeSeriesCollection();
-        for (int i = 0; i < types.length; i++) {
-            String type = types[i];
-            TimeSeries timeseries = new TimeSeries(type);
-            for (Map.Entry<String, long[]> entry : data.entrySet()) {
-                try {
-                    timeseries.add(new Minute(dateFormat.parse(date + entry.getKey())), entry.getValue()[i]);
-                } catch (ParseException e) {
-                    logger.error(e.getMessage(), e);
-                }
-            }
-            xydataset.addSeries(timeseries);
-        }
-        JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(
-                "max: " + numberFormat.format(summary[0]) + (summary[1] >= 0 ? " min: " + numberFormat.format(summary[1]) : "")
-                        + " avg: " + numberFormat.format(summary[2]) + (summary[3] >= 0 ? " sum: " + numberFormat.format(summary[3]) : ""),
-                toDisplayService(service) + "  " + method + "  " + toDisplayDate(date), key, xydataset, true, true, false);
-        jfreechart.setBackgroundPaint(Color.WHITE);
-        XYPlot xyplot = (XYPlot) jfreechart.getPlot();
-        xyplot.setBackgroundPaint(Color.WHITE);
-        xyplot.setDomainGridlinePaint(Color.GRAY);
-        xyplot.setRangeGridlinePaint(Color.GRAY);
-        xyplot.setDomainGridlinesVisible(true);
-        xyplot.setRangeGridlinesVisible(true);
-        DateAxis dateaxis = (DateAxis) xyplot.getDomainAxis();
-        dateaxis.setDateFormatOverride(new SimpleDateFormat("HH:mm"));
-        BufferedImage image = jfreechart.createBufferedImage(600, 300);
-        try {
-            if (logger.isInfoEnabled()) {
-                logger.info("write chart: " + path);
-            }
-            File methodChartFile = new File(path);
-            File methodChartDir = methodChartFile.getParentFile();
-            if (methodChartDir != null && !methodChartDir.exists()) {
-                methodChartDir.mkdirs();
-            }
-            FileOutputStream output = new FileOutputStream(methodChartFile);
-            try {
-                ImageIO.write(image, "png", output);
-                output.flush();
-            } finally {
-                output.close();
-            }
-        } catch (IOException e) {
-            logger.warn(e.getMessage(), e);
-        }
-    }
-
-    private static String toDisplayService(String service) {
-        int i = service.lastIndexOf('.');
-        if (i >= 0) {
-            return service.substring(i + 1);
-        }
-        return service;
-    }
-
-    private static String toDisplayDate(String date) {
-        try {
-            return new SimpleDateFormat("yyyy-MM-dd").format(new SimpleDateFormat("yyyyMMdd").parse(date));
-        } catch (ParseException e) {
-            return date;
-        }
-    }
-
-    public void close() {
-        try {
-            running = false;
-            queue.offer(new URL(POISON_PROTOCOL, NetUtils.LOCALHOST, 0));
-        } catch (Throwable t) {
-            logger.warn(t.getMessage(), t);
-        }
-        try {
-            chartFuture.cancel(true);
-        } catch (Throwable t) {
-            logger.warn(t.getMessage(), t);
-        }
-    }
-
-    private void write() throws Exception {
-        URL statistics = queue.take();
-        if (POISON_PROTOCOL.equals(statistics.getProtocol())) {
-            return;
-        }
-        String timestamp = statistics.getParameter(Constants.TIMESTAMP_KEY);
-        Date now;
-        if (timestamp == null || timestamp.length() == 0) {
-            now = new Date();
-        } else if (timestamp.length() == "yyyyMMddHHmmss".length()) {
-            now = new SimpleDateFormat("yyyyMMddHHmmss").parse(timestamp);
-        } else {
-            now = new Date(Long.parseLong(timestamp));
-        }
-        String day = new SimpleDateFormat("yyyyMMdd").format(now);
-        SimpleDateFormat format = new SimpleDateFormat("HHmm");
-        for (String key : types) {
-            try {
-                String type;
-                String consumer;
-                String provider;
-                if (statistics.hasParameter(PROVIDER)) {
-                    type = CONSUMER;
-                    consumer = statistics.getHost();
-                    provider = statistics.getParameter(PROVIDER);
-                    int i = provider.indexOf(':');
-                    if (i > 0) {
-                        provider = provider.substring(0, i);
-                    }
-                } else {
-                    type = PROVIDER;
-                    consumer = statistics.getParameter(CONSUMER);
-                    int i = consumer == null ? -1 : consumer.indexOf(':');
-                    if (i > 0) {
-                        consumer = consumer.substring(0, i);
-                    }
-                    provider = statistics.getHost();
-                }
-                String filename = statisticsDirectory
-                        + "/" + day
-                        + "/" + statistics.getServiceInterface()
-                        + "/" + statistics.getParameter(METHOD)
-                        + "/" + consumer
-                        + "/" + provider
-                        + "/" + type + "." + key;
-                File file = new File(filename);
-                File dir = file.getParentFile();
-                if (dir != null && !dir.exists()) {
-                    dir.mkdirs();
-                }
-                FileWriter writer = new FileWriter(file, true);
-                try {
-                    writer.write(format.format(now) + " " + statistics.getParameter(key, 0) + "\n");
-                    writer.flush();
-                } finally {
-                    writer.close();
-                }
-            } catch (Throwable t) {
-                logger.error(t.getMessage(), t);
-            }
-        }
-    }
-
-    private void draw() {
-        File rootDir = new File(statisticsDirectory);
-        if (!rootDir.exists()) {
-            return;
-        }
-        File[] dateDirs = rootDir.listFiles();
-        for (File dateDir : dateDirs) {
-            File[] serviceDirs = dateDir.listFiles();
-            for (File serviceDir : serviceDirs) {
-                File[] methodDirs = serviceDir.listFiles();
-                for (File methodDir : methodDirs) {
-                    String methodUri = chartsDirectory + "/" + dateDir.getName() + "/" + serviceDir.getName() + "/" + methodDir.getName();
-
-                    File successFile = new File(methodUri + "/" + SUCCESS + ".png");
-                    long successModified = successFile.lastModified();
-                    boolean successChanged = false;
-                    Map<String, long[]> successData = new HashMap<String, long[]>();
-                    double[] successSummary = new double[4];
-
-                    File elapsedFile = new File(methodUri + "/" + ELAPSED + ".png");
-                    long elapsedModified = elapsedFile.lastModified();
-                    boolean elapsedChanged = false;
-                    Map<String, long[]> elapsedData = new HashMap<String, long[]>();
-                    double[] elapsedSummary = new double[4];
-                    long elapsedMax = 0;
-
-                    File[] consumerDirs = methodDir.listFiles();
-                    for (File consumerDir : consumerDirs) {
-                        File[] providerDirs = consumerDir.listFiles();
-                        for (File providerDir : providerDirs) {
-                            File consumerSuccessFile = new File(providerDir, CONSUMER + "." + SUCCESS);
-                            File providerSuccessFile = new File(providerDir, PROVIDER + "." + SUCCESS);
-                            appendData(new File[]{consumerSuccessFile, providerSuccessFile}, successData, successSummary);
-                            if (consumerSuccessFile.lastModified() > successModified
-                                    || providerSuccessFile.lastModified() > successModified) {
-                                successChanged = true;
-                            }
-
-                            File consumerElapsedFile = new File(providerDir, CONSUMER + "." + ELAPSED);
-                            File providerElapsedFile = new File(providerDir, PROVIDER + "." + ELAPSED);
-                            appendData(new File[]{consumerElapsedFile, providerElapsedFile}, elapsedData, elapsedSummary);
-                            elapsedMax = Math.max(elapsedMax, CountUtils.max(new File(providerDir, CONSUMER + "." + MAX_ELAPSED)));
-                            elapsedMax = Math.max(elapsedMax, CountUtils.max(new File(providerDir, PROVIDER + "." + MAX_ELAPSED)));
-                            if (consumerElapsedFile.lastModified() > elapsedModified
-                                    || providerElapsedFile.lastModified() > elapsedModified) {
-                                elapsedChanged = true;
-                            }
-                        }
-                    }
-                    if (elapsedChanged) {
-                        divData(elapsedData, successData);
-                        elapsedSummary[0] = elapsedMax;
-                        elapsedSummary[1] = -1;
-                        elapsedSummary[2] = successSummary[3] == 0 ? 0 : elapsedSummary[3] / successSummary[3];
-                        elapsedSummary[3] = -1;
-                        createChart("ms/t", serviceDir.getName(), methodDir.getName(), dateDir.getName(), new String[]{CONSUMER, PROVIDER}, elapsedData, elapsedSummary, elapsedFile.getAbsolutePath());
-                    }
-                    if (successChanged) {
-                        divData(successData, 60);
-                        successSummary[0] = successSummary[0] / 60;
-                        successSummary[1] = successSummary[1] / 60;
-                        successSummary[2] = successSummary[2] / 60;
-                        createChart("t/s", serviceDir.getName(), methodDir.getName(), dateDir.getName(), new String[]{CONSUMER, PROVIDER}, successData, successSummary, successFile.getAbsolutePath());
-                    }
-                }
-            }
-        }
-    }
-
-    private void divData(Map<String, long[]> successMap, long unit) {
-        for (long[] success : successMap.values()) {
-            for (int i = 0; i < success.length; i++) {
-                success[i] = success[i] / unit;
-            }
-        }
-    }
-
-    private void divData(Map<String, long[]> elapsedMap, Map<String, long[]> successMap) {
-        for (Map.Entry<String, long[]> entry : elapsedMap.entrySet()) {
-            long[] elapsed = entry.getValue();
-            long[] success = successMap.get(entry.getKey());
-            for (int i = 0; i < elapsed.length; i++) {
-                elapsed[i] = success[i] == 0 ? 0 : elapsed[i] / success[i];
-            }
-        }
-    }
-
-    private void appendData(File[] files, Map<String, long[]> data, double[] summary) {
-        for (int i = 0; i < files.length; i++) {
-            File file = files[i];
-            if (!file.exists()) {
-                continue;
-            }
-            try {
-                BufferedReader reader = new BufferedReader(new FileReader(file));
-                try {
-                    int sum = 0;
-                    int cnt = 0;
-                    String line;
-                    while ((line = reader.readLine()) != null) {
-                        int index = line.indexOf(" ");
-                        if (index > 0) {
-                            String key = line.substring(0, index).trim();
-                            long value = Long.parseLong(line.substring(index + 1).trim());
-                            long[] values = data.get(key);
-                            if (values == null) {
-                                values = new long[files.length];
-                                data.put(key, values);
-                            }
-                            values[i] += value;
-                            summary[0] = Math.max(summary[0], values[i]);
-                            summary[1] = summary[1] == 0 ? values[i] : Math.min(summary[1], values[i]);
-                            sum += value;
-                            cnt++;
-                        }
-                    }
-                    if (i == 0) {
-                        summary[3] += sum;
-                        summary[2] = (summary[2] + (sum / cnt)) / 2;
-                    }
-                } finally {
-                    reader.close();
-                }
-            } catch (IOException e) {
-                logger.warn(e.getMessage(), e);
-            }
-        }
-    }
-
-    public void count(URL statistics) {
-        collect(statistics);
-    }
-
-    public void collect(URL statistics) {
-        queue.offer(statistics);
-        if (logger.isInfoEnabled()) {
-            logger.info("collect statistics: " + statistics);
-        }
-    }
-
-    public List<URL> lookup(URL query) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/CountUtils.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/CountUtils.java
deleted file mode 100644
index bdda59c..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/CountUtils.java
+++ /dev/null
@@ -1,92 +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 com.alibaba.dubbo.monitor.simple.common;
-
-import com.alibaba.dubbo.common.logger.Logger;
-import com.alibaba.dubbo.common.logger.LoggerFactory;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.regex.Pattern;
-
-/**
- * CountUtils
- */
-public class CountUtils {
-
-    private static final Logger logger = LoggerFactory.getLogger(CountUtils.class);
-
-    private static final Pattern NUMBER_PATTERN = Pattern.compile("\\d+");
-
-    private static final int SUM = 0;
-
-    private static final int MAX = 1;
-
-    private static final int AVG = 2;
-
-    public static long sum(File file) {
-        return calc(file, SUM);
-    }
-
-    public static long max(File file) {
-        return calc(file, MAX);
-    }
-
-    public static long avg(File file) {
-        return calc(file, AVG);
-    }
-
-    private static long calc(File file, int op) {
-        if (file.exists()) {
-            try {
-                BufferedReader reader = new BufferedReader(new FileReader(file));
-                try {
-                    int times = 0;
-                    int count = 0;
-                    String line;
-                    while ((line = reader.readLine()) != null) {
-                        int i = line.indexOf(" ");
-                        if (i > 0) {
-                            line = line.substring(i + 1).trim();
-                            if (NUMBER_PATTERN.matcher(line).matches()) {
-                                int value = Integer.parseInt(line);
-                                times++;
-                                if (op == MAX) {
-                                    count = Math.max(count, value);
-                                } else {
-                                    count += value;
-                                }
-                            }
-                        }
-                    }
-                    if (op == AVG) {
-                        return count / times;
-                    }
-                    return count;
-                } finally {
-                    reader.close();
-                }
-            } catch (IOException e) {
-                logger.warn(e.getMessage(), e);
-            }
-        }
-        return 0;
-    }
-
-}
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/Menu.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/Menu.java
deleted file mode 100644
index ca1cab6..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/Menu.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 com.alibaba.dubbo.monitor.simple.common;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Menu
- */
-@Documented
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE})
-public @interface Menu {
-
-    String name();
-
-    String desc() default "";
-
-    int order() default 0;
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/MenuComparator.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/MenuComparator.java
deleted file mode 100644
index 7947942..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/MenuComparator.java
+++ /dev/null
@@ -1,45 +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 com.alibaba.dubbo.monitor.simple.common;
-
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.io.Serializable;
-import java.util.Comparator;
-
-/**
- * MenuComparator
- */
-public class MenuComparator implements Comparator<PageHandler>, Serializable {
-
-    private static final long serialVersionUID = -3161526932904414029L;
-
-    public int compare(PageHandler o1, PageHandler o2) {
-        if (o1 == null && o2 == null) {
-            return 0;
-        }
-        if (o1 == null) {
-            return -1;
-        }
-        if (o2 == null) {
-            return 1;
-        }
-        return o1.equals(o2) ? 0 : (o1.getClass().getAnnotation(Menu.class).order()
-                > o2.getClass().getAnnotation(Menu.class).order() ? 1 : -1);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/Page.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/Page.java
deleted file mode 100644
index 44c45bd..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/common/Page.java
+++ /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.
- */
-package com.alibaba.dubbo.monitor.simple.common;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Page
- */
-public class Page {
-
-    private final String navigation;
-
-    private final String title;
-
-    private final List<String> columns;
-
-    private final List<List<String>> rows;
-
-    public Page(String navigation) {
-        this(navigation, (String) null, (String[]) null, (List<List<String>>) null);
-    }
-
-    public Page(String navigation, String title,
-                String column, String row) {
-        this(navigation, title, column == null ? null : Arrays.asList(new String[]{column}), row == null ? null : stringToList(row));
-    }
-
-    public Page(String navigation, String title,
-                String[] columns, List<List<String>> rows) {
-        this(navigation, title, columns == null ? null : Arrays.asList(columns), rows);
-    }
-
-    public Page(String navigation, String title,
-                List<String> columns, List<List<String>> rows) {
-        this.navigation = navigation;
-        this.title = title;
-        this.columns = columns;
-        this.rows = rows;
-    }
-
-    private static List<List<String>> stringToList(String str) {
-        List<List<String>> rows = new ArrayList<List<String>>();
-        List<String> row = new ArrayList<String>();
-        row.add(str);
-        rows.add(row);
-        return rows;
-    }
-
-    public String getNavigation() {
-        return navigation;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public List<String> getColumns() {
-        return columns;
-    }
-
-    public List<List<String>> getRows() {
-        return rows;
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/container/JettyContainer.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/container/JettyContainer.java
deleted file mode 100644
index 434294e..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/container/JettyContainer.java
+++ /dev/null
@@ -1,89 +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 com.alibaba.dubbo.monitor.simple.container;
-
-import com.alibaba.dubbo.common.logger.Logger;
-import com.alibaba.dubbo.common.logger.LoggerFactory;
-import com.alibaba.dubbo.common.utils.ConfigUtils;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.container.Container;
-import com.alibaba.dubbo.monitor.simple.servlet.PageServlet;
-import com.alibaba.dubbo.monitor.simple.servlet.ResourceFilter;
-
-import org.mortbay.jetty.Handler;
-import org.mortbay.jetty.Server;
-import org.mortbay.jetty.nio.SelectChannelConnector;
-import org.mortbay.jetty.servlet.FilterHolder;
-import org.mortbay.jetty.servlet.ServletHandler;
-import org.mortbay.jetty.servlet.ServletHolder;
-
-/**
- * JettyContainer. (SPI, Singleton, ThreadSafe)
- */
-public class JettyContainer implements Container {
-
-    public static final String JETTY_PORT = "dubbo.jetty.port";
-    public static final String JETTY_DIRECTORY = "dubbo.jetty.directory";
-    public static final String JETTY_PAGES = "dubbo.jetty.page";
-    public static final int DEFAULT_JETTY_PORT = 8080;
-    private static final Logger logger = LoggerFactory.getLogger(JettyContainer.class);
-    SelectChannelConnector connector;
-
-    public void start() {
-        String serverPort = ConfigUtils.getProperty(JETTY_PORT);
-        int port;
-        if (serverPort == null || serverPort.length() == 0) {
-            port = DEFAULT_JETTY_PORT;
-        } else {
-            port = Integer.parseInt(serverPort);
-        }
-        connector = new SelectChannelConnector();
-        connector.setPort(port);
-        ServletHandler handler = new ServletHandler();
-
-        String resources = ConfigUtils.getProperty(JETTY_DIRECTORY);
-        if (resources != null && resources.length() > 0) {
-            FilterHolder resourceHolder = handler.addFilterWithMapping(ResourceFilter.class, "/*", Handler.DEFAULT);
-            resourceHolder.setInitParameter("resources", resources);
-        }
-
-        ServletHolder pageHolder = handler.addServletWithMapping(PageServlet.class, "/*");
-        pageHolder.setInitParameter("pages", ConfigUtils.getProperty(JETTY_PAGES));
-        pageHolder.setInitOrder(2);
-
-        Server server = new Server();
-        server.addConnector(connector);
-        server.addHandler(handler);
-        try {
-            server.start();
-        } catch (Exception e) {
-            throw new IllegalStateException("Failed to start jetty server on " + NetUtils.getLocalHost() + ":" + port + ", cause: " + e.getMessage(), e);
-        }
-    }
-
-    public void stop() {
-        try {
-            if (connector != null) {
-                connector.close();
-                connector = null;
-            }
-        } catch (Throwable e) {
-            logger.error(e.getMessage(), e);
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/container/RegistryContainer.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/container/RegistryContainer.java
deleted file mode 100644
index 95de78e..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/container/RegistryContainer.java
+++ /dev/null
@@ -1,293 +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 com.alibaba.dubbo.monitor.simple.container;
-
-import com.alibaba.dubbo.common.Constants;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.extension.ExtensionLoader;
-import com.alibaba.dubbo.common.utils.ConcurrentHashSet;
-import com.alibaba.dubbo.common.utils.ConfigUtils;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.container.Container;
-import com.alibaba.dubbo.container.spring.SpringContainer;
-import com.alibaba.dubbo.registry.NotifyListener;
-import com.alibaba.dubbo.registry.RegistryService;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * RegistryContainer
- */
-public class RegistryContainer implements Container {
-
-    public static final String REGISTRY_ADDRESS = "dubbo.registry.address";
-    private static RegistryContainer INSTANCE = null;
-    private final Set<String> applications = new ConcurrentHashSet<String>();
-    private final Map<String, Set<String>> providerServiceApplications = new ConcurrentHashMap<String, Set<String>>();
-    private final Map<String, Set<String>> providerApplicationServices = new ConcurrentHashMap<String, Set<String>>();
-    private final Map<String, Set<String>> consumerServiceApplications = new ConcurrentHashMap<String, Set<String>>();
-    private final Map<String, Set<String>> consumerApplicationServices = new ConcurrentHashMap<String, Set<String>>();
-    private final Set<String> services = new ConcurrentHashSet<String>();
-    private final Map<String, List<URL>> serviceProviders = new ConcurrentHashMap<String, List<URL>>();
-    private final Map<String, List<URL>> serviceConsumers = new ConcurrentHashMap<String, List<URL>>();
-    private RegistryService registry;
-
-    public RegistryContainer() {
-        INSTANCE = this;
-    }
-
-    public static RegistryContainer getInstance() {
-        if (INSTANCE == null) {
-            ExtensionLoader.getExtensionLoader(Container.class).getExtension("registry");
-        }
-        return INSTANCE;
-    }
-
-    public RegistryService getRegistry() {
-        return registry;
-    }
-
-    public Set<String> getApplications() {
-        return Collections.unmodifiableSet(applications);
-    }
-
-    public Set<String> getDependencies(String application, boolean reverse) {
-        if (reverse) {
-            Set<String> dependencies = new HashSet<String>();
-            Set<String> services = providerApplicationServices.get(application);
-            if (services != null && services.size() > 0) {
-                for (String service : services) {
-                    Set<String> applications = consumerServiceApplications.get(service);
-                    if (applications != null && applications.size() > 0) {
-                        dependencies.addAll(applications);
-                    }
-                }
-            }
-            return dependencies;
-        } else {
-            Set<String> dependencies = new HashSet<String>();
-            Set<String> services = consumerApplicationServices.get(application);
-            if (services != null && services.size() > 0) {
-                for (String service : services) {
-                    Set<String> applications = providerServiceApplications.get(service);
-                    if (applications != null && applications.size() > 0) {
-                        dependencies.addAll(applications);
-                    }
-                }
-            }
-            return dependencies;
-        }
-    }
-
-    public Set<String> getServices() {
-        return Collections.unmodifiableSet(services);
-    }
-
-    public Map<String, List<URL>> getServiceProviders() {
-        return Collections.unmodifiableMap(serviceProviders);
-    }
-
-    public List<URL> getProvidersByService(String service) {
-        List<URL> urls = serviceProviders.get(service);
-        return urls == null ? null : Collections.unmodifiableList(urls);
-    }
-
-    public List<URL> getProvidersByHost(String host) {
-        List<URL> urls = new ArrayList<URL>();
-        if (host != null && host.length() > 0) {
-            for (List<URL> providers : serviceProviders.values()) {
-                for (URL url : providers) {
-                    if (host.equals(url.getHost())) {
-                        urls.add(url);
-                    }
-                }
-            }
-        }
-        return urls;
-    }
-
-    public List<URL> getProvidersByApplication(String application) {
-        List<URL> urls = new ArrayList<URL>();
-        if (application != null && application.length() > 0) {
-            for (List<URL> providers : serviceProviders.values()) {
-                for (URL url : providers) {
-                    if (application.equals(url.getParameter(Constants.APPLICATION_KEY))) {
-                        urls.add(url);
-                    }
-                }
-            }
-        }
-        return urls;
-    }
-
-    public Set<String> getHosts() {
-        Set<String> addresses = new HashSet<String>();
-        for (List<URL> providers : serviceProviders.values()) {
-            for (URL url : providers) {
-                addresses.add(url.getHost());
-            }
-        }
-        for (List<URL> providers : serviceConsumers.values()) {
-            for (URL url : providers) {
-                addresses.add(url.getHost());
-            }
-        }
-        return addresses;
-    }
-
-    public Map<String, List<URL>> getServiceConsumers() {
-        return Collections.unmodifiableMap(serviceConsumers);
-    }
-
-    public List<URL> getConsumersByService(String service) {
-        List<URL> urls = serviceConsumers.get(service);
-        return urls == null ? null : Collections.unmodifiableList(urls);
-    }
-
-    public List<URL> getConsumersByHost(String host) {
-        List<URL> urls = new ArrayList<URL>();
-        if (host != null && host.length() > 0) {
-            for (List<URL> consumers : serviceConsumers.values()) {
-                for (URL url : consumers) {
-                    if (host.equals(url.getHost())) {
-                        urls.add(url);
-                    }
-                }
-            }
-        }
-        return Collections.unmodifiableList(urls);
-    }
-
-    public List<URL> getConsumersByApplication(String application) {
-        List<URL> urls = new ArrayList<URL>();
-        if (application != null && application.length() > 0) {
-            for (List<URL> consumers : serviceConsumers.values()) {
-                for (URL url : consumers) {
-                    if (application.equals(url.getParameter(Constants.APPLICATION_KEY))) {
-                        urls.add(url);
-                    }
-                }
-            }
-        }
-        return urls;
-    }
-
-    public void start() {
-        String url = ConfigUtils.getProperty(REGISTRY_ADDRESS);
-        if (url == null || url.length() == 0) {
-            throw new IllegalArgumentException("Please set java start argument: -D" + REGISTRY_ADDRESS + "=zookeeper://127.0.0.1:2181");
-        }
-        registry = (RegistryService) SpringContainer.getContext().getBean("registryService");
-        URL subscribeUrl = new URL(Constants.ADMIN_PROTOCOL, NetUtils.getLocalHost(), 0, "",
-                Constants.INTERFACE_KEY, Constants.ANY_VALUE,
-                Constants.GROUP_KEY, Constants.ANY_VALUE,
-                Constants.VERSION_KEY, Constants.ANY_VALUE,
-                Constants.CLASSIFIER_KEY, Constants.ANY_VALUE,
-                Constants.CATEGORY_KEY, Constants.PROVIDERS_CATEGORY + ","
-                + Constants.CONSUMERS_CATEGORY,
-                Constants.CHECK_KEY, String.valueOf(false));
-        registry.subscribe(subscribeUrl, new NotifyListener() {
-            public void notify(List<URL> urls) {
-                if (urls == null || urls.size() == 0) {
-                    return;
-                }
-                Map<String, List<URL>> proivderMap = new HashMap<String, List<URL>>();
-                Map<String, List<URL>> consumerMap = new HashMap<String, List<URL>>();
-                for (URL url : urls) {
-                    String application = url.getParameter(Constants.APPLICATION_KEY);
-                    if (application != null && application.length() > 0) {
-                        applications.add(application);
-                    }
-                    String service = url.getServiceInterface();
-                    services.add(service);
-                    String category = url.getParameter(Constants.CATEGORY_KEY, Constants.DEFAULT_CATEGORY);
-                    if (Constants.PROVIDERS_CATEGORY.equals(category)) {
-                        if (Constants.EMPTY_PROTOCOL.equals(url.getProtocol())) {
-                            serviceProviders.remove(service);
-                        } else {
-                            List<URL> list = proivderMap.get(service);
-                            if (list == null) {
-                                list = new ArrayList<URL>();
-                                proivderMap.put(service, list);
-                            }
-                            list.add(url);
-                            if (application != null && application.length() > 0) {
-                                Set<String> serviceApplications = providerServiceApplications.get(service);
-                                if (serviceApplications == null) {
-                                    providerServiceApplications.put(service, new ConcurrentHashSet<String>());
-                                    serviceApplications = providerServiceApplications.get(service);
-                                }
-                                serviceApplications.add(application);
-
-                                Set<String> applicationServices = providerApplicationServices.get(application);
-                                if (applicationServices == null) {
-                                    providerApplicationServices.put(application, new ConcurrentHashSet<String>());
-                                    applicationServices = providerApplicationServices.get(application);
-                                }
-                                applicationServices.add(service);
-                            }
-                        }
-                    } else if (Constants.CONSUMERS_CATEGORY.equals(category)) {
-                        if (Constants.EMPTY_PROTOCOL.equals(url.getProtocol())) {
-                            serviceConsumers.remove(service);
-                        } else {
-                            List<URL> list = consumerMap.get(service);
-                            if (list == null) {
-                                list = new ArrayList<URL>();
-                                consumerMap.put(service, list);
-                            }
-                            list.add(url);
-                            if (application != null && application.length() > 0) {
-                                Set<String> serviceApplications = consumerServiceApplications.get(service);
-                                if (serviceApplications == null) {
-                                    consumerServiceApplications.put(service, new ConcurrentHashSet<String>());
-                                    serviceApplications = consumerServiceApplications.get(service);
-                                }
-                                serviceApplications.add(application);
-
-                                Set<String> applicationServices = consumerApplicationServices.get(application);
-                                if (applicationServices == null) {
-                                    consumerApplicationServices.put(application, new ConcurrentHashSet<String>());
-                                    applicationServices = consumerApplicationServices.get(application);
-                                }
-                                applicationServices.add(service);
-                            }
-
-                        }
-                    }
-                }
-                if (proivderMap != null && proivderMap.size() > 0) {
-                    serviceProviders.putAll(proivderMap);
-                }
-                if (consumerMap != null && consumerMap.size() > 0) {
-                    serviceConsumers.putAll(consumerMap);
-                }
-            }
-        });
-    }
-
-    public void stop() {
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ApplicationsPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ApplicationsPageHandler.java
deleted file mode 100644
index b86bc14..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ApplicationsPageHandler.java
+++ /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.
- */
-package com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.monitor.simple.common.Menu;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.container.RegistryContainer;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-/**
- * ApplicationsPageHandler
- */
-@Menu(name = "Applications", desc = "Show application dependencies.", order = 1000)
-public class ApplicationsPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        Set<String> applications = RegistryContainer.getInstance().getApplications();
-        List<List<String>> rows = new ArrayList<List<String>>();
-        int providersCount = 0;
-        int consumersCount = 0;
-        int efferentCount = 0;
-        int afferentCount = 0;
-        if (applications != null && applications.size() > 0) {
-            for (String application : applications) {
-                List<String> row = new ArrayList<String>();
-                row.add(application);
-
-                List<URL> providers = RegistryContainer.getInstance().getProvidersByApplication(application);
-                List<URL> consumers = RegistryContainer.getInstance().getConsumersByApplication(application);
-
-                if (providers != null && providers.size() > 0
-                        || consumers != null && consumers.size() > 0) {
-                    URL provider = (providers != null && providers.size() > 0 ? providers.iterator().next() : consumers.iterator().next());
-                    row.add(provider.getParameter("owner", "") + (provider.hasParameter("organization") ? " (" + provider.getParameter("organization") + ")" : ""));
-                } else {
-                    row.add("");
-                }
-
-                int providersSize = providers == null ? 0 : providers.size();
-                providersCount += providersSize;
-                row.add(providersSize == 0 ? "<font color=\"blue\">No provider</font>" : "<a href=\"providers.html?application=" + application + "\">Providers(" + providersSize + ")</a>");
-
-                int consumersSize = consumers == null ? 0 : consumers.size();
-                consumersCount += consumersSize;
-                row.add(consumersSize == 0 ? "<font color=\"blue\">No consumer</font>" : "<a href=\"consumers.html?application=" + application + "\">Consumers(" + consumersSize + ")</a>");
-
-                Set<String> efferents = RegistryContainer.getInstance().getDependencies(application, false);
-                int efferentSize = efferents == null ? 0 : efferents.size();
-                efferentCount += efferentSize;
-                row.add(efferentSize == 0 ? "<font color=\"blue\">No dependency</font>" : "<a href=\"dependencies.html?application=" + application + "\">Depends On(" + efferentSize + ")</a>");
-
-                Set<String> afferents = RegistryContainer.getInstance().getDependencies(application, true);
-                int afferentSize = afferents == null ? 0 : afferents.size();
-                afferentCount += afferentSize;
-                row.add(afferentSize == 0 ? "<font color=\"blue\">No used</font>" : "<a href=\"dependencies.html?application=" + application + "&reverse=true\">Used By(" + afferentSize + ")</a>");
-                rows.add(row);
-            }
-        }
-        return new Page("Applications", "Applications (" + rows.size() + ")",
-                new String[]{"Application Name:", "Owner", "Providers(" + providersCount + ")", "Consumers(" + consumersCount + ")", "Depends On(" + efferentCount + ")", "Used By(" + afferentCount + ")"}, rows);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ChartsPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ChartsPageHandler.java
deleted file mode 100644
index 8131eee..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ChartsPageHandler.java
+++ /dev/null
@@ -1,95 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.ConfigUtils;
-import com.alibaba.dubbo.monitor.MonitorService;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.io.File;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- * ChartsPageHandler
- */
-public class ChartsPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        String service = url.getParameter("service");
-        if (service == null || service.length() == 0) {
-            throw new IllegalArgumentException("Please input service parameter.");
-        }
-        String date = url.getParameter("date");
-        if (date == null || date.length() == 0) {
-            date = new SimpleDateFormat("yyyyMMdd").format(new Date());
-        }
-        List<List<String>> rows = new ArrayList<List<String>>();
-        String directory = ConfigUtils.getProperty("dubbo.charts.directory");
-        File chartsDir = new File(directory);
-        String filename = directory + "/" + date + "/" + service;
-        File serviceDir = new File(filename);
-        if (serviceDir.exists()) {
-            File[] methodDirs = serviceDir.listFiles();
-            for (File methodDir : methodDirs) {
-                String methodUri = chartsDir.getName() + "/" + date + "/" + service + "/" + methodDir.getName() + "/";
-                rows.add(toRow(methodDir, methodUri));
-            }
-        }
-        StringBuilder nav = new StringBuilder();
-        nav.append("<a href=\"services.html\">Services</a> &gt; ");
-        nav.append(service);
-        nav.append(" &gt; <a href=\"providers.html?service=");
-        nav.append(service);
-        nav.append("\">Providers</a> | <a href=\"consumers.html?service=");
-        nav.append(service);
-        nav.append("\">Consumers</a> | <a href=\"statistics.html?service=");
-        nav.append(service);
-        nav.append("&date=");
-        nav.append(date);
-        nav.append("\">Statistics</a> | Charts &gt; <input type=\"text\" style=\"width: 65px;\" name=\"date\" value=\"");
-        nav.append(date);
-        nav.append("\" onkeyup=\"if (event.keyCode == 10 || event.keyCode == 13) {window.location.href='charts.html?service=");
-        nav.append(service);
-        nav.append("&date=' + this.value;}\" />");
-        return new Page(nav.toString(), "Charts (" + rows.size() + ")",
-                new String[]{"Method", "Requests per second (QPS)", "Average response time (ms)"}, rows);
-    }
-
-    private List<String> toRow(File dir, String uri) {
-        List<String> row = new ArrayList<String>();
-        row.add(dir.getName());
-        if (new File(dir, MonitorService.SUCCESS + ".png").exists()) {
-            String url = uri + MonitorService.SUCCESS + ".png";
-            row.add("<a href=\"" + url + "\" target=\"_blank\"><img src=\"" + url + "\" style=\"width: 100%;\" border=\"0\" /></a>");
-        } else {
-            row.add("");
-        }
-        if (new File(dir, MonitorService.ELAPSED + ".png").exists()) {
-            String url = uri + MonitorService.ELAPSED + ".png";
-            row.add("<a href=\"" + url + "\" target=\"_blank\"><img src=\"" + url + "\" style=\"width: 100%;\" border=\"0\" /></a>");
-        } else {
-            row.add("");
-        }
-        return row;
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ClientsPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ClientsPageHandler.java
deleted file mode 100644
index 7c91381..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ClientsPageHandler.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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-import com.alibaba.dubbo.remoting.exchange.ExchangeChannel;
-import com.alibaba.dubbo.remoting.exchange.ExchangeServer;
-import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * ClientsPageHandler
- */
-public class ClientsPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        String port = url.getParameter("port");
-        int p = port == null || port.length() == 0 ? 0 : Integer.parseInt(port);
-        Collection<ExchangeServer> servers = DubboProtocol.getDubboProtocol().getServers();
-        ExchangeServer server = null;
-        StringBuilder select = new StringBuilder();
-        if (servers != null && servers.size() > 0) {
-            if (servers.size() == 1) {
-                server = servers.iterator().next();
-                String address = server.getUrl().getAddress();
-                select.append(" &gt; " + NetUtils.getHostName(address) + "/" + address);
-            } else {
-                select.append(" &gt; <select onchange=\"window.location.href='clients.html?port=' + this.value;\">");
-                for (ExchangeServer s : servers) {
-                    int sp = s.getUrl().getPort();
-                    select.append("<option value=\">");
-                    select.append(sp);
-                    if (p == 0 && server == null || p == sp) {
-                        server = s;
-                        select.append("\" selected=\"selected");
-                    }
-                    select.append("\">");
-                    select.append(s.getUrl().getAddress());
-                    select.append("</option>");
-                }
-                select.append("</select>");
-            }
-        }
-        List<List<String>> rows = new ArrayList<List<String>>();
-        if (server != null) {
-            Collection<ExchangeChannel> channels = server.getExchangeChannels();
-            for (ExchangeChannel c : channels) {
-                List<String> row = new ArrayList<String>();
-                String address = NetUtils.toAddressString(c.getRemoteAddress());
-                row.add(NetUtils.getHostName(address) + "/" + address);
-                rows.add(row);
-            }
-        }
-        return new Page("<a href=\"servers.html\">Servers</a>" + select.toString() + " &gt; Clients", "Clients (" + rows.size() + ")", new String[]{"Client Address:"}, rows);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ConsumersPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ConsumersPageHandler.java
deleted file mode 100644
index 35ca333..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ConsumersPageHandler.java
+++ /dev/null
@@ -1,88 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.container.RegistryContainer;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * ConsumersPageHandler
- */
-public class ConsumersPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        String service = url.getParameter("service");
-        String host = url.getParameter("host");
-        String application = url.getParameter("application");
-        if (service != null && service.length() > 0) {
-            List<List<String>> rows = new ArrayList<List<String>>();
-            List<URL> consumers = RegistryContainer.getInstance().getConsumersByService(service);
-            if (consumers != null && consumers.size() > 0) {
-                for (URL u : consumers) {
-                    List<String> row = new ArrayList<String>();
-                    String s = u.toFullString();
-                    row.add(s.replace("&", "&amp;"));
-                    row.add("<button onclick=\"if(confirm('Confirm unsubscribe consumer?')){window.location.href='unsubscribe.html?service=" + service + "&consumer=" + URL.encode(s) + "';}\">Unsubscribe</button>");
-                    rows.add(row);
-                }
-            }
-            return new Page("<a href=\"services.html\">Services</a> &gt; " + service
-                    + " &gt; <a href=\"providers.html?service=" + service
-                    + "\">Providers</a> | Consumers | <a href=\"statistics.html?service=" + service
-                    + "\">Statistics</a> | <a href=\"charts.html?service=" + service
-                    + "\">Charts</a>", "Consumers (" + rows.size() + ")",
-                    new String[]{"Consumer URL:", "Unsubscribe"}, rows);
-        } else if (host != null && host.length() > 0) {
-            List<List<String>> rows = new ArrayList<List<String>>();
-            List<URL> consumers = RegistryContainer.getInstance().getConsumersByHost(host);
-            if (consumers != null && consumers.size() > 0) {
-                for (URL u : consumers) {
-                    List<String> row = new ArrayList<String>();
-                    String s = u.toFullString();
-                    row.add(s.replace("&", "&amp;"));
-                    row.add("<button onclick=\"if(confirm('Confirm unsubscribe consumer?')){window.location.href='unsubscribe.html?host=" + host + "&consumer=" + URL.encode(s) + "';}\">Unsubscribe</button>");
-                    rows.add(row);
-                }
-            }
-            return new Page("<a href=\"hosts.html\">Hosts</a> &gt; " + NetUtils.getHostName(host) + "/" + host + " &gt; <a href=\"providers.html?host=" + host + "\">Providers</a> | Consumers", "Consumers (" + rows.size() + ")",
-                    new String[]{"Consumer URL:", "Unsubscribe"}, rows);
-        } else if (application != null && application.length() > 0) {
-            List<List<String>> rows = new ArrayList<List<String>>();
-            List<URL> consumers = RegistryContainer.getInstance().getConsumersByApplication(application);
-            if (consumers != null && consumers.size() > 0) {
-                for (URL u : consumers) {
-                    List<String> row = new ArrayList<String>();
-                    String s = u.toFullString();
-                    row.add(s.replace("&", "&amp;"));
-                    row.add("<button onclick=\"if(confirm('Confirm unsubscribe consumer?')){window.location.href='unsubscribe.html?application=" + application + "&consumer=" + URL.encode(s) + "';}\">Unsubscribe</button>");
-                    rows.add(row);
-                }
-            }
-            return new Page("<a href=\"applications.html\">Applications</a> &gt; " + application + " &gt; <a href=\"providers.html?application=" + application + "\">Providers</a> | Consumers | <a href=\"dependencies.html?application=" + application + "\">Depends On</a> | <a href=\"dependencies.html?application=" + application + "&reverse=true\">Used By</a>", "Consumers (" + rows.size() + ")",
-                    new String[]{"Consumer URL:", "Unsubscribe"}, rows);
-        } else {
-            throw new IllegalArgumentException("Please input service or host or application parameter.");
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/DependenciesPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/DependenciesPageHandler.java
deleted file mode 100644
index f45ac8c..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/DependenciesPageHandler.java
+++ /dev/null
@@ -1,88 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.container.RegistryContainer;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * DependenciesPageHandler
- */
-public class DependenciesPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        String application = url.getParameter("application");
-        if (application == null || application.length() == 0) {
-            throw new IllegalArgumentException("Please input application parameter.");
-        }
-        boolean reverse = url.getParameter("reverse", false);
-        List<List<String>> rows = new ArrayList<List<String>>();
-        Set<String> directly = RegistryContainer.getInstance().getDependencies(application, reverse);
-        Set<String> indirectly = new HashSet<String>();
-        appendDependency(rows, reverse, application, 0, new HashSet<String>(), indirectly);
-        indirectly.remove(application);
-        return new Page("<a href=\"applications.html\">Applications</a> &gt; " + application +
-                " &gt; <a href=\"providers.html?application=" + application + "\">Providers</a> | <a href=\"consumers.html?application=" + application + "\">Consumers</a> | " +
-                (reverse ? "<a href=\"dependencies.html?application=" + application + "\">Depends On</a> | Used By"
-                        : "Depends On | <a href=\"dependencies.html?application=" + application + "&reverse=true\">Used By</a>"), (reverse ? "Used By" : "Depends On") + " (" + directly.size() + "/" + indirectly.size() + ")", new String[]{"Application Name:"}, rows);
-    }
-
-    private void appendDependency(List<List<String>> rows, boolean reverse, String application, int level, Set<String> appended, Set<String> indirectly) {
-        List<String> row = new ArrayList<String>();
-        StringBuilder buf = new StringBuilder();
-        if (level > 0) {
-            for (int i = 0; i < level; i++) {
-                buf.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|");
-            }
-            buf.append(reverse ? "&lt;-- " : "--&gt; ");
-        }
-        boolean end = false;
-        if (level > 5) {
-            buf.append(" <font color=\"blue\">More...</font>");
-            end = true;
-        } else {
-            buf.append(application);
-            if (appended.contains(application)) {
-                buf.append(" <font color=\"red\">(Cycle)</font>");
-                end = true;
-            }
-        }
-        row.add(buf.toString());
-        rows.add(row);
-        if (end) {
-            return;
-        }
-
-        appended.add(application);
-        indirectly.add(application);
-        Set<String> dependencies = RegistryContainer.getInstance().getDependencies(application, reverse);
-        if (dependencies != null && dependencies.size() > 0) {
-            for (String dependency : dependencies) {
-                appendDependency(rows, reverse, dependency, level + 1, appended, indirectly);
-            }
-        }
-        appended.remove(application);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/HomePageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/HomePageHandler.java
deleted file mode 100644
index cdb17a0..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/HomePageHandler.java
+++ /dev/null
@@ -1,48 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.extension.ExtensionLoader;
-import com.alibaba.dubbo.monitor.simple.common.Menu;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-import com.alibaba.dubbo.monitor.simple.servlet.PageServlet;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * HomePageHandler
- */
-@Menu(name = "Home", desc = "Home page.", order = Integer.MIN_VALUE)
-public class HomePageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        List<List<String>> rows = new ArrayList<List<String>>();
-        for (PageHandler handler : PageServlet.getInstance().getMenus()) {
-            String uri = ExtensionLoader.getExtensionLoader(PageHandler.class).getExtensionName(handler);
-            Menu menu = handler.getClass().getAnnotation(Menu.class);
-            List<String> row = new ArrayList<String>();
-            row.add("<a href=\"" + uri + ".html\">" + menu.name() + "</a>");
-            row.add(menu.desc());
-            rows.add(row);
-        }
-        return new Page("Home", "Menus", new String[]{"Menu Name", "Menu Desc"}, rows);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/HostsPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/HostsPageHandler.java
deleted file mode 100644
index 96cbb69..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/HostsPageHandler.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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.Constants;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.monitor.simple.common.Menu;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.container.RegistryContainer;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-/**
- * HostsPageHandler
- */
-@Menu(name = "Hosts", desc = "Show provider and consumer hosts", order = 3000)
-public class HostsPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        List<List<String>> rows = new ArrayList<List<String>>();
-        Set<String> hosts = RegistryContainer.getInstance().getHosts();
-        int providersCount = 0;
-        int consumersCount = 0;
-        if (hosts != null && hosts.size() > 0) {
-            for (String host : hosts) {
-                List<String> row = new ArrayList<String>();
-                row.add(NetUtils.getHostName(host) + "/" + host);
-
-                List<URL> providers = RegistryContainer.getInstance().getProvidersByHost(host);
-                List<URL> consumers = RegistryContainer.getInstance().getConsumersByHost(host);
-
-                if (providers != null && providers.size() > 0
-                        || consumers != null && consumers.size() > 0) {
-                    URL provider = (providers != null && providers.size() > 0 ? providers.iterator().next() : consumers.iterator().next());
-                    row.add(provider.getParameter(Constants.APPLICATION_KEY, ""));
-                    row.add(provider.getParameter("owner", "") + (provider.hasParameter("organization") ? " (" + provider.getParameter("organization") + ")" : ""));
-                } else {
-                    row.add("");
-                    row.add("");
-                }
-
-                int proviedSize = providers == null ? 0 : providers.size();
-                providersCount += proviedSize;
-                row.add(proviedSize == 0 ? "<font color=\"blue\">No provider</font>" : "<a href=\"providers.html?host=" + host + "\">Providers(" + proviedSize + ")</a>");
-
-                int consumersSize = consumers == null ? 0 : consumers.size();
-                consumersCount += consumersSize;
-                row.add(consumersSize == 0 ? "<font color=\"blue\">No consumer</font>" : "<a href=\"consumers.html?host=" + host + "\">Consumers(" + consumersSize + ")</a>");
-
-                rows.add(row);
-            }
-        }
-        return new Page("Hosts", "Hosts (" + rows.size() + ")",
-                new String[]{"Host Name/IP:", "Application", "Owner", "Providers(" + providersCount + ")", "Consumers(" + consumersCount + ")"}, rows);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/LogPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/LogPageHandler.java
deleted file mode 100644
index bdc04d3..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/LogPageHandler.java
+++ /dev/null
@@ -1,106 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.monitor.simple.common.Menu;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import org.apache.log4j.Appender;
-import org.apache.log4j.FileAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Enumeration;
-import java.util.List;
-
-/**
- * LogPageHandler
- */
-@Menu(name = "Log", desc = "Show system log.", order = Integer.MAX_VALUE - 11000)
-public class LogPageHandler implements PageHandler {
-
-    private static final int SHOW_LOG_LENGTH = 30000;
-
-    private File file;
-
-    @SuppressWarnings("unchecked")
-    public LogPageHandler() {
-        try {
-            org.apache.log4j.Logger logger = LogManager.getRootLogger();
-            if (logger != null) {
-                Enumeration<Appender> appenders = logger.getAllAppenders();
-                if (appenders != null) {
-                    while (appenders.hasMoreElements()) {
-                        Appender appender = appenders.nextElement();
-                        if (appender instanceof FileAppender) {
-                            FileAppender fileAppender = (FileAppender) appender;
-                            String filename = fileAppender.getFile();
-                            file = new File(filename);
-                            break;
-                        }
-                    }
-                }
-            }
-        } catch (Throwable t) {
-        }
-    }
-
-    public Page handle(URL url) {
-        long size = 0;
-        String content = "";
-        String modified = "Not exist";
-        if (file != null && file.exists()) {
-            try {
-                FileInputStream fis = new FileInputStream(file);
-                FileChannel channel = fis.getChannel();
-                size = channel.size();
-                ByteBuffer bb;
-                if (size <= SHOW_LOG_LENGTH) {
-                    bb = ByteBuffer.allocate((int) size);
-                    channel.read(bb, 0);
-                } else {
-                    int pos = (int) (size - SHOW_LOG_LENGTH);
-                    bb = ByteBuffer.allocate(SHOW_LOG_LENGTH);
-                    channel.read(bb, pos);
-                }
-                bb.flip();
-                content = new String(bb.array()).replace("<", "&lt;")
-                        .replace(">", "&gt;").replace("\n", "<br/><br/>");
-                modified = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
-                        .format(new Date(file.lastModified()));
-            } catch (IOException e) {
-            }
-        }
-        Level level = LogManager.getRootLogger().getLevel();
-        List<List<String>> rows = new ArrayList<List<String>>();
-        List<String> row = new ArrayList<String>();
-        row.add(content);
-        rows.add(row);
-        return new Page("Log", "Log", new String[]{(file == null ? "" : file.getName()) + ", " + size + " bytes, " + modified + ", " + level}, rows);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ProvidersPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ProvidersPageHandler.java
deleted file mode 100644
index 159e10e..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ProvidersPageHandler.java
+++ /dev/null
@@ -1,88 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.container.RegistryContainer;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * ProvidersPageHandler
- */
-public class ProvidersPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        String service = url.getParameter("service");
-        String host = url.getParameter("host");
-        String application = url.getParameter("application");
-        if (service != null && service.length() > 0) {
-            List<List<String>> rows = new ArrayList<List<String>>();
-            List<URL> providers = RegistryContainer.getInstance().getProvidersByService(service);
-            if (providers != null && providers.size() > 0) {
-                for (URL u : providers) {
-                    List<String> row = new ArrayList<String>();
-                    String s = u.toFullString();
-                    row.add(s.replace("&", "&amp;"));
-                    row.add("<button onclick=\"if(confirm('Confirm unregister provider?')){window.location.href='unregister.html?service=" + service + "&provider=" + URL.encode(s) + "';}\">Unregister</button>");
-                    rows.add(row);
-                }
-            }
-            return new Page("<a href=\"services.html\">Services</a> &gt; " + service
-                    + " &gt; Providers | <a href=\"consumers.html?service=" + service
-                    + "\">Consumers</a> | <a href=\"statistics.html?service=" + service
-                    + "\">Statistics</a> | <a href=\"charts.html?service=" + service
-                    + "\">Charts</a>", "Providers (" + rows.size() + ")",
-                    new String[]{"Provider URL:", "Unregister"}, rows);
-        } else if (host != null && host.length() > 0) {
-            List<List<String>> rows = new ArrayList<List<String>>();
-            List<URL> providers = RegistryContainer.getInstance().getProvidersByHost(host);
-            if (providers != null && providers.size() > 0) {
-                for (URL u : providers) {
-                    List<String> row = new ArrayList<String>();
-                    String s = u.toFullString();
-                    row.add(s.replace("&", "&amp;"));
-                    row.add("<button onclick=\"if(confirm('Confirm unregister provider?')){window.location.href='unregister.html?host=" + host + "&provider=" + URL.encode(s) + "';}\">Unregister</button>");
-                    rows.add(row);
-                }
-            }
-            return new Page("<a href=\"hosts.html\">Hosts</a> &gt; " + NetUtils.getHostName(host) + "/" + host + " &gt; Providers | <a href=\"consumers.html?host=" + host + "\">Consumers</a>", "Providers (" + rows.size() + ")",
-                    new String[]{"Provider URL:", "Unregister"}, rows);
-        } else if (application != null && application.length() > 0) {
-            List<List<String>> rows = new ArrayList<List<String>>();
-            List<URL> providers = RegistryContainer.getInstance().getProvidersByApplication(application);
-            if (providers != null && providers.size() > 0) {
-                for (URL u : providers) {
-                    List<String> row = new ArrayList<String>();
-                    String s = u.toFullString();
-                    row.add(s.replace("&", "&amp;"));
-                    row.add("<button onclick=\"if(confirm('Confirm unregister provider?')){window.location.href='unregister.html?application=" + application + "&provider=" + URL.encode(s) + "';}\">Unregister</button>");
-                    rows.add(row);
-                }
-            }
-            return new Page("<a href=\"applications.html\">Applications</a> &gt; " + application + " &gt; Providers | <a href=\"consumers.html?application=" + application + "\">Consumers</a> | <a href=\"dependencies.html?application=" + application + "\">Depends On</a> | <a href=\"dependencies.html?application=" + application + "&reverse=true\">Used By</a>", "Providers (" + rows.size() + ")",
-                    new String[]{"Provider URL:", "Unregister"}, rows);
-        } else {
-            throw new IllegalArgumentException("Please input service or host or application parameter.");
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/RegisteredPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/RegisteredPageHandler.java
deleted file mode 100644
index 08d094f..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/RegisteredPageHandler.java
+++ /dev/null
@@ -1,78 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-import com.alibaba.dubbo.registry.Registry;
-import com.alibaba.dubbo.registry.support.AbstractRegistry;
-import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-/**
- * RegisteredPageHandler
- */
-public class RegisteredPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        String registryAddress = url.getParameter("registry", "");
-        List<List<String>> rows = new ArrayList<List<String>>();
-        Collection<Registry> registries = AbstractRegistryFactory.getRegistries();
-        StringBuilder select = new StringBuilder();
-        Registry registry = null;
-        if (registries != null && registries.size() > 0) {
-            if (registries.size() == 1) {
-                registry = registries.iterator().next();
-                select.append(" &gt; " + registry.getUrl().getAddress());
-            } else {
-                select.append(" &gt; <select onchange=\"window.location.href='registered.html?registry=' + this.value;\">");
-                for (Registry r : registries) {
-                    String sp = r.getUrl().getAddress();
-                    select.append("<option value=\">");
-                    select.append(sp);
-                    if (((registryAddress == null || registryAddress.length() == 0) && registry == null)
-                            || registryAddress.equals(sp)) {
-                        registry = r;
-                        select.append("\" selected=\"selected");
-                    }
-                    select.append("\">");
-                    select.append(sp);
-                    select.append("</option>");
-                }
-                select.append("</select>");
-            }
-        }
-        if (registry instanceof AbstractRegistry) {
-            Set<URL> services = ((AbstractRegistry) registry).getRegistered();
-            if (services != null && services.size() > 0) {
-                for (URL u : services) {
-                    List<String> row = new ArrayList<String>();
-                    row.add(u.toFullString().replace("<", "&lt;").replace(">", "&gt;"));
-                    rows.add(row);
-                }
-            }
-        }
-        return new Page("<a href=\"registries.html\">Registries</a>" + select.toString() + " &gt; Registered | <a href=\"subscribed.html?registry=" + registryAddress + "\">Subscribed</a>", "Registered (" + rows.size() + ")",
-                new String[]{"Provider URL:"}, rows);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/RegistriesPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/RegistriesPageHandler.java
deleted file mode 100644
index 30d472a..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/RegistriesPageHandler.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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.monitor.simple.common.Menu;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-import com.alibaba.dubbo.registry.Registry;
-import com.alibaba.dubbo.registry.support.AbstractRegistry;
-import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * RegistriesPageHandler
- */
-@Menu(name = "Registries", desc = "Show connected registries.", order = 10000)
-public class RegistriesPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        List<List<String>> rows = new ArrayList<List<String>>();
-        Collection<Registry> registries = AbstractRegistryFactory.getRegistries();
-        int registeredCount = 0;
-        int subscribedCount = 0;
-        if (registries != null && registries.size() > 0) {
-            for (Registry registry : registries) {
-                String server = registry.getUrl().getAddress();
-                List<String> row = new ArrayList<String>();
-                row.add(NetUtils.getHostName(server) + "/" + server);
-                if (registry.isAvailable()) {
-                    row.add("<font color=\"green\">Connected</font>");
-                } else {
-                    row.add("<font color=\"red\">Disconnected</font>");
-                }
-                int registeredSize = 0;
-                int subscribedSize = 0;
-                if (registry instanceof AbstractRegistry) {
-                    registeredSize = ((AbstractRegistry) registry).getRegistered().size();
-                    registeredCount += registeredSize;
-                    subscribedSize = ((AbstractRegistry) registry).getSubscribed().size();
-                    subscribedCount += subscribedSize;
-                }
-                row.add("<a href=\"registered.html?registry=" + server + "\">Registered(" + registeredSize + ")</a>");
-                row.add("<a href=\"subscribed.html?registry=" + server + "\">Subscribed(" + subscribedSize + ")</a>");
-                rows.add(row);
-            }
-        }
-        return new Page("Registries", "Registries (" + rows.size() + ")",
-                new String[]{"Registry Address:", "Status", "Registered(" + registeredCount + ")", "Subscribed(" + subscribedCount + ")"}, rows);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ServersPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ServersPageHandler.java
deleted file mode 100644
index 1c2aac9..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ServersPageHandler.java
+++ /dev/null
@@ -1,55 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.monitor.simple.common.Menu;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-import com.alibaba.dubbo.remoting.exchange.ExchangeServer;
-import com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * ServersPageHandler
- */
-@Menu(name = "Servers", desc = "Show exported service servers.", order = 14000)
-public class ServersPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        List<List<String>> rows = new ArrayList<List<String>>();
-        Collection<ExchangeServer> servers = DubboProtocol.getDubboProtocol().getServers();
-        int clientCount = 0;
-        if (servers != null && servers.size() > 0) {
-            for (ExchangeServer s : servers) {
-                List<String> row = new ArrayList<String>();
-                String address = s.getUrl().getAddress();
-                row.add(NetUtils.getHostName(address) + "/" + address);
-                int clientSize = s.getExchangeChannels().size();
-                clientCount += clientSize;
-                row.add("<a href=\"clients.html?port=" + s.getUrl().getPort() + "\">Clients(" + clientSize + ")</a>");
-                rows.add(row);
-            }
-        }
-        return new Page("Servers", "Servers (" + rows.size() + ")", new String[]{"Server Address:", "Clients(" + clientCount + ")"}, rows);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ServicesPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ServicesPageHandler.java
deleted file mode 100644
index e393cb6..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/ServicesPageHandler.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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.Constants;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.monitor.simple.common.Menu;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.container.RegistryContainer;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-/**
- * ServicesPageHandler
- */
-@Menu(name = "Services", desc = "Show registered services.", order = 2000)
-public class ServicesPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        Set<String> services = RegistryContainer.getInstance().getServices();
-        List<List<String>> rows = new ArrayList<List<String>>();
-        int providerCount = 0;
-        int consumerCount = 0;
-        if (services != null && services.size() > 0) {
-            for (String service : services) {
-                List<URL> providers = RegistryContainer.getInstance().getProvidersByService(service);
-                int providerSize = providers == null ? 0 : providers.size();
-                providerCount += providerSize;
-                List<URL> consumers = RegistryContainer.getInstance().getConsumersByService(service);
-                int consumerSize = consumers == null ? 0 : consumers.size();
-                consumerCount += consumerSize;
-                List<String> row = new ArrayList<String>();
-                row.add(service);
-                if (providerSize > 0 || consumerSize > 0) {
-                    if (providerSize > 0) {
-                        URL provider = providers.iterator().next();
-                        row.add(provider.getParameter(Constants.APPLICATION_KEY, ""));
-                        row.add(provider.getParameter("owner", "") + (provider.hasParameter("organization") ? " (" + provider.getParameter("organization") + ")" : ""));
-                    } else {
-                        row.add("");
-                        row.add("");
-                    }
-                    row.add(providerSize == 0 ? "<font color=\"red\">No provider</a>" : "<a href=\"providers.html?service=" + service + "\">Providers(" + providerSize + ")</a>");
-                    row.add(consumerSize == 0 ? "<font color=\"blue\">No consumer</a>" : "<a href=\"consumers.html?service=" + service + "\">Consumers(" + consumerSize + ")</a>");
-                    row.add("<a href=\"statistics.html?service=" + service + "\">Statistics</a>");
-                    row.add("<a href=\"charts.html?service=" + service + "\">Charts</a>");
-                    rows.add(row);
-                }
-            }
-        }
-        return new Page("Services", "Services (" + rows.size() + ")",
-                new String[]{"Service Name:", "Application", "Owner", "Providers(" + providerCount + ")", "Consumers(" + consumerCount + ")", "Statistics", "Charts"}, rows);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/StatisticsPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/StatisticsPageHandler.java
deleted file mode 100644
index ff00b52..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/StatisticsPageHandler.java
+++ /dev/null
@@ -1,167 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.ConfigUtils;
-import com.alibaba.dubbo.monitor.MonitorService;
-import com.alibaba.dubbo.monitor.simple.common.CountUtils;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.io.File;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * StatisticsPageHandler
- */
-public class StatisticsPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        String service = url.getParameter("service");
-        if (service == null || service.length() == 0) {
-            throw new IllegalArgumentException("Please input service parameter.");
-        }
-        String date = url.getParameter("date");
-        if (date == null || date.length() == 0) {
-            date = new SimpleDateFormat("yyyyMMdd").format(new Date());
-        }
-        String expand = url.getParameter("expand");
-        List<List<String>> rows = new ArrayList<List<String>>();
-        String directory = ConfigUtils.getProperty("dubbo.statistics.directory");
-        String filename = directory + "/" + date + "/" + service;
-        File serviceDir = new File(filename);
-        if (serviceDir.exists()) {
-            File[] methodDirs = serviceDir.listFiles();
-            for (File methodDir : methodDirs) {
-                long[] statistics = newStatistics();
-                Map<String, long[]> expandMap = new HashMap<String, long[]>();
-                File[] consumerDirs = methodDir.listFiles();
-                for (File consumerDir : consumerDirs) {
-                    long[] expandStatistics = null;
-                    if (MonitorService.CONSUMER.equals(expand)) {
-                        expandStatistics = newStatistics();
-                        expandMap.put(consumerDir.getName(), expandStatistics);
-                    }
-                    File[] providerDirs = consumerDir.listFiles();
-                    for (File providerDir : providerDirs) {
-                        if (MonitorService.PROVIDER.equals(expand)) {
-                            expandStatistics = newStatistics();
-                            expandMap.put(providerDir.getName(), expandStatistics);
-                        }
-                        appendStatistics(providerDir, statistics);
-                        if (expandStatistics != null) {
-                            appendStatistics(providerDir, expandStatistics);
-                        }
-                    }
-                }
-                rows.add(toRow(methodDir.getName(), statistics));
-                if (expandMap != null && expandMap.size() > 0) {
-                    for (Map.Entry<String, long[]> entry : expandMap.entrySet()) {
-                        String node = MonitorService.CONSUMER.equals(expand) ? "&lt;--" : "--&gt;";
-                        rows.add(toRow(" &nbsp;&nbsp;&nbsp;&nbsp; |" + node + " " + entry.getKey(), entry.getValue()));
-                    }
-                }
-            }
-        }
-        StringBuilder nav = new StringBuilder();
-        nav.append("<a href=\"services.html\">Services</a> &gt; ");
-        nav.append(service);
-        nav.append(" &gt; <a href=\"providers.html?service=");
-        nav.append(service);
-        nav.append("\">Providers</a> | <a href=\"consumers.html?service=");
-        nav.append(service);
-        nav.append("\">Consumers</a> | Statistics | <a href=\"charts.html?service=");
-        nav.append(service);
-        nav.append("&date=");
-        nav.append(date);
-        nav.append("\">Charts</a> &gt; <input type=\"text\" style=\"width: 65px;\" name=\"date\" value=\"");
-        nav.append(date);
-        nav.append("\" onkeyup=\"if (event.keyCode == 10 || event.keyCode == 13) {window.location.href='statistics.html?service=");
-        nav.append(service);
-        if (expand != null && expand.length() > 0) {
-            nav.append("&expand=");
-            nav.append(expand);
-        }
-        nav.append("&date=' + this.value;}\" /> &gt; ");
-        if (!MonitorService.PROVIDER.equals(expand) && !MonitorService.CONSUMER.equals(expand)) {
-            nav.append("Summary");
-        } else {
-            nav.append("<a href=\"statistics.html?service=");
-            nav.append(service);
-            nav.append("&date=");
-            nav.append(date);
-            nav.append("\">Summary</a>");
-        }
-        if (MonitorService.PROVIDER.equals(expand)) {
-            nav.append(" | +Provider");
-        } else {
-            nav.append(" | <a href=\"statistics.html?service=");
-            nav.append(service);
-            nav.append("&date=");
-            nav.append(date);
-            nav.append("&expand=provider\">+Provider</a>");
-        }
-        if (MonitorService.CONSUMER.equals(expand)) {
-            nav.append(" | +Consumer");
-        } else {
-            nav.append(" | <a href=\"statistics.html?service=");
-            nav.append(service);
-            nav.append("&date=");
-            nav.append(date);
-            nav.append("&expand=consumer\">+Consumer</a>");
-        }
-        return new Page(nav.toString(), "Statistics (" + rows.size() + ")",
-                new String[]{"Method:", "Success", "Failure", "Avg Elapsed (ms)",
-                        "Max Elapsed (ms)", "Max Concurrent"}, rows);
-    }
-
-    private long[] newStatistics() {
-        return new long[10];
-    }
-
-    private void appendStatistics(File providerDir, long[] statistics) {
-        statistics[0] += CountUtils.sum(new File(providerDir, MonitorService.CONSUMER + "." + MonitorService.SUCCESS));
-        statistics[1] += CountUtils.sum(new File(providerDir, MonitorService.PROVIDER + "." + MonitorService.SUCCESS));
-        statistics[2] += CountUtils.sum(new File(providerDir, MonitorService.CONSUMER + "." + MonitorService.FAILURE));
-        statistics[3] += CountUtils.sum(new File(providerDir, MonitorService.PROVIDER + "." + MonitorService.FAILURE));
-        statistics[4] += CountUtils.sum(new File(providerDir, MonitorService.CONSUMER + "." + MonitorService.ELAPSED));
-        statistics[5] += CountUtils.sum(new File(providerDir, MonitorService.PROVIDER + "." + MonitorService.ELAPSED));
-        statistics[6] = Math.max(statistics[6], CountUtils.max(new File(providerDir, MonitorService.CONSUMER + "." + MonitorService.MAX_ELAPSED)));
-        statistics[7] = Math.max(statistics[7], CountUtils.max(new File(providerDir, MonitorService.PROVIDER + "." + MonitorService.MAX_ELAPSED)));
-        statistics[8] = Math.max(statistics[8], CountUtils.max(new File(providerDir, MonitorService.CONSUMER + "." + MonitorService.MAX_CONCURRENT)));
-        statistics[9] = Math.max(statistics[9], CountUtils.max(new File(providerDir, MonitorService.PROVIDER + "." + MonitorService.MAX_CONCURRENT)));
-    }
-
-    private List<String> toRow(String name, long[] statistics) {
-        List<String> row = new ArrayList<String>();
-        row.add(name);
-        row.add(String.valueOf(statistics[0]) + " --&gt; " + String.valueOf(statistics[1]));
-        row.add(String.valueOf(statistics[2]) + " --&gt; " + String.valueOf(statistics[3]));
-        row.add(String.valueOf(statistics[0] == 0 ? 0 : statistics[4] / statistics[0])
-                + " --&gt; " + String.valueOf(statistics[1] == 0 ? 0 : statistics[5] / statistics[1]));
-        row.add(String.valueOf(statistics[6]) + " --&gt; " + String.valueOf(statistics[7]));
-        row.add(String.valueOf(statistics[8]) + " --&gt; " + String.valueOf(statistics[9]));
-        return row;
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/StatusPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/StatusPageHandler.java
deleted file mode 100644
index 5189bac..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/StatusPageHandler.java
+++ /dev/null
@@ -1,84 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.extension.ExtensionLoader;
-import com.alibaba.dubbo.common.status.Status;
-import com.alibaba.dubbo.common.status.StatusChecker;
-import com.alibaba.dubbo.common.status.support.StatusUtils;
-import com.alibaba.dubbo.monitor.simple.common.Menu;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * StatusPageHandler
- */
-@Menu(name = "Status", desc = "Show system status.", order = Integer.MAX_VALUE - 12000)
-public class StatusPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        List<List<String>> rows = new ArrayList<List<String>>();
-        Set<String> names = ExtensionLoader.getExtensionLoader(StatusChecker.class).getSupportedExtensions();
-        Map<String, Status> statuses = new HashMap<String, Status>();
-        for (String name : names) {
-            StatusChecker checker = ExtensionLoader.getExtensionLoader(StatusChecker.class).getExtension(name);
-            List<String> row = new ArrayList<String>();
-            row.add(name);
-            Status status = checker.check();
-            if (status != null && !Status.Level.UNKNOWN.equals(status.getLevel())) {
-                statuses.put(name, status);
-                row.add(getLevelHtml(status.getLevel()));
-                row.add(status.getMessage());
-                rows.add(row);
-            }
-        }
-        Status status = StatusUtils.getSummaryStatus(statuses);
-        if ("status".equals(url.getPath())) {
-            return new Page("", "", "", status.getLevel().toString());
-        } else {
-            List<String> row = new ArrayList<String>();
-            row.add("summary");
-            row.add(getLevelHtml(status.getLevel()));
-            row.add("<a href=\"/status\" target=\"_blank\">summary</a>");
-            rows.add(row);
-            return new Page("Status (<a href=\"/status\" target=\"_blank\">summary</a>)", "Status", new String[]{"Name", "Status", "Description"}, rows);
-        }
-    }
-
-    private String getLevelHtml(Status.Level level) {
-        return "<font color=\"" + getLevelColor(level) + "\">" + level.name() + "</font>";
-    }
-
-    private String getLevelColor(Status.Level level) {
-        if (level == Status.Level.OK) {
-            return "green";
-        } else if (level == Status.Level.ERROR) {
-            return "red";
-        } else if (level == Status.Level.WARN) {
-            return "yellow";
-        }
-        return "gray";
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/SubscribedPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/SubscribedPageHandler.java
deleted file mode 100644
index 0863ede..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/SubscribedPageHandler.java
+++ /dev/null
@@ -1,78 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-import com.alibaba.dubbo.registry.Registry;
-import com.alibaba.dubbo.registry.support.AbstractRegistry;
-import com.alibaba.dubbo.registry.support.AbstractRegistryFactory;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-/**
- * SubscribedPageHandler
- */
-public class SubscribedPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        String registryAddress = url.getParameter("registry", "");
-        List<List<String>> rows = new ArrayList<List<String>>();
-        Collection<Registry> registries = AbstractRegistryFactory.getRegistries();
-        StringBuilder select = new StringBuilder();
-        Registry registry = null;
-        if (registries != null && registries.size() > 0) {
-            if (registries.size() == 1) {
-                registry = registries.iterator().next();
-                select.append(" &gt; " + registry.getUrl().getAddress());
-            } else {
-                select.append(" &gt; <select onchange=\"window.location.href='subscribed.html?registry=' + this.value;\">");
-                for (Registry r : registries) {
-                    String sp = r.getUrl().getAddress();
-                    select.append("<option value=\">");
-                    select.append(sp);
-                    if (((registryAddress == null || registryAddress.length() == 0) && registry == null)
-                            || registryAddress.equals(sp)) {
-                        registry = r;
-                        select.append("\" selected=\"selected");
-                    }
-                    select.append("\">");
-                    select.append(sp);
-                    select.append("</option>");
-                }
-                select.append("</select>");
-            }
-        }
-        if (registry instanceof AbstractRegistry) {
-            Set<URL> services = ((AbstractRegistry) registry).getSubscribed().keySet();
-            if (services != null && services.size() > 0) {
-                for (URL u : services) {
-                    List<String> row = new ArrayList<String>();
-                    row.add(u.toFullString().replace("<", "&lt;").replace(">", "&gt;"));
-                    rows.add(row);
-                }
-            }
-        }
-        return new Page("<a href=\"registries.html\">Registries</a>" + select.toString() + " &gt; <a href=\"registered.html?registry=" + registryAddress + "\">Registered</a> | Subscribed", "Subscribed (" + rows.size() + ")",
-                new String[]{"Consumer URL:"}, rows);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/SystemPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/SystemPageHandler.java
deleted file mode 100644
index 4043c3b..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/SystemPageHandler.java
+++ /dev/null
@@ -1,137 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.Version;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.monitor.simple.common.Menu;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-import java.lang.management.ManagementFactory;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * SystemPageHandler
- */
-@Menu(name = "System", desc = "Show system environment information.", order = Integer.MAX_VALUE - 10000)
-public class SystemPageHandler implements PageHandler {
-
-    private static final long SECOND = 1000;
-    private static final long MINUTE = 60 * SECOND;
-    private static final long HOUR = 60 * MINUTE;
-    private static final long DAY = 24 * HOUR;
-
-    public Page handle(URL url) {
-        List<List<String>> rows = new ArrayList<List<String>>();
-        List<String> row;
-
-        row = new ArrayList<String>();
-        row.add("Version");
-        row.add(Version.getVersion(SystemPageHandler.class, "2.0.0"));
-        rows.add(row);
-
-        row = new ArrayList<String>();
-        row.add("Host");
-        String address = NetUtils.getLocalHost();
-        row.add(NetUtils.getHostName(address) + "/" + address);
-        rows.add(row);
-
-        row = new ArrayList<String>();
-        row.add("OS");
-        row.add(System.getProperty("os.name") + " " + System.getProperty("os.version"));
-        rows.add(row);
-
-        row = new ArrayList<String>();
-        row.add("JVM");
-        row.add(System.getProperty("java.runtime.name") + " " + System.getProperty("java.runtime.version") + ",<br/>" + System.getProperty("java.vm.name") + " " + System.getProperty("java.vm.version") + " " + System.getProperty("java.vm.info", ""));
-        rows.add(row);
-
-        row = new ArrayList<String>();
-        row.add("CPU");
-        row.add(System.getProperty("os.arch", "") + ", " + String.valueOf(Runtime.getRuntime().availableProcessors()) + " cores");
-        rows.add(row);
-
-        row = new ArrayList<String>();
-        row.add("Locale");
-        row.add(Locale.getDefault().toString() + "/" + System.getProperty("file.encoding"));
-        rows.add(row);
-
-        row = new ArrayList<String>();
-        row.add("Uptime");
-        row.add(formatUptime(ManagementFactory.getRuntimeMXBean().getUptime()));
-        rows.add(row);
-
-        row = new ArrayList<String>();
-        row.add("Time");
-        row.add(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS Z").format(new Date()));
-        rows.add(row);
-
-        return new Page("System", "System", new String[]{
-                "Property", "Value"}, rows);
-    }
-
-    private String formatUptime(long uptime) {
-        StringBuilder buf = new StringBuilder();
-        if (uptime > DAY) {
-            long days = (uptime - uptime % DAY) / DAY;
-            buf.append(days);
-            buf.append(" Days");
-            uptime = uptime % DAY;
-        }
-        if (uptime > HOUR) {
-            long hours = (uptime - uptime % HOUR) / HOUR;
-            if (buf.length() > 0) {
-                buf.append(", ");
-            }
-            buf.append(hours);
-            buf.append(" Hours");
-            uptime = uptime % HOUR;
-        }
-        if (uptime > MINUTE) {
-            long minutes = (uptime - uptime % MINUTE) / MINUTE;
-            if (buf.length() > 0) {
-                buf.append(", ");
-            }
-            buf.append(minutes);
-            buf.append(" Minutes");
-            uptime = uptime % MINUTE;
-        }
-        if (uptime > SECOND) {
-            long seconds = (uptime - uptime % SECOND) / SECOND;
-            if (buf.length() > 0) {
-                buf.append(", ");
-            }
-            buf.append(seconds);
-            buf.append(" Seconds");
-            uptime = uptime % SECOND;
-        }
-        if (uptime > 0) {
-            if (buf.length() > 0) {
-                buf.append(", ");
-            }
-            buf.append(uptime);
-            buf.append(" Milliseconds");
-        }
-        return buf.toString();
-    }
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/UnregisterPageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/UnregisterPageHandler.java
deleted file mode 100644
index d8b7c97..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/UnregisterPageHandler.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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.container.RegistryContainer;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-
-/**
- * UnregisterPageHandler
- */
-public class UnregisterPageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        String provider = url.getParameterAndDecoded("provider");
-        if (provider == null || provider.length() == 0) {
-            throw new IllegalArgumentException("Please input provider parameter.");
-        }
-        URL providerUrl = URL.valueOf(provider);
-        RegistryContainer.getInstance().getRegistry().unregister(providerUrl);
-        String parameter;
-        if (url.hasParameter("service")) {
-            parameter = "service=" + url.getParameter("service");
-        } else if (url.hasParameter("host")) {
-            parameter = "host=" + url.getParameter("host");
-        } else if (url.hasParameter("application")) {
-            parameter = "application=" + url.getParameter("application");
-        } else {
-            parameter = "service=" + providerUrl.getServiceInterface();
-        }
-        return new Page("<script type=\"text/javascript\">window.location.href=\"providers.html?" + parameter + "\";</script>");
-    }
-
-}
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/UnsubscribePageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/UnsubscribePageHandler.java
deleted file mode 100644
index 655ba6c..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/pages/UnsubscribePageHandler.java
+++ /dev/null
@@ -1,64 +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 com.alibaba.dubbo.monitor.simple.pages;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-import com.alibaba.dubbo.monitor.simple.container.RegistryContainer;
-import com.alibaba.dubbo.monitor.simple.servlet.PageHandler;
-import com.alibaba.dubbo.registry.NotifyListener;
-
-import java.util.List;
-
-/**
- * UnsubscribePageHandler
- */
-public class UnsubscribePageHandler implements PageHandler {
-
-    public Page handle(URL url) {
-        String consumer = url.getParameterAndDecoded("consumer");
-        if (consumer == null || consumer.length() == 0) {
-            throw new IllegalArgumentException("Please input consumer parameter.");
-        }
-        URL consumerUrl = URL.valueOf(consumer);
-        RegistryContainer.getInstance().getRegistry().unsubscribe(consumerUrl, NotifyListenerAdapter.NOTIFY_LISTENER);
-        String parameter;
-        if (url.hasParameter("service")) {
-            parameter = "service=" + url.getParameter("service");
-        } else if (url.hasParameter("host")) {
-            parameter = "host=" + url.getParameter("host");
-        } else if (url.hasParameter("application")) {
-            parameter = "application=" + url.getParameter("application");
-        } else {
-            parameter = "service=" + consumerUrl.getServiceInterface();
-        }
-        return new Page("<script type=\"text/javascript\">window.location.href=\"consumers.html?" + parameter + "\";</script>");
-    }
-
-    private static class NotifyListenerAdapter implements NotifyListener {
-
-        public static final NotifyListener NOTIFY_LISTENER = new NotifyListenerAdapter();
-
-        private NotifyListenerAdapter() {
-        }
-
-        public void notify(List<URL> urls) {
-        }
-
-    }
-
-}
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/servlet/PageHandler.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/servlet/PageHandler.java
deleted file mode 100644
index 56d919d..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/servlet/PageHandler.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 com.alibaba.dubbo.monitor.simple.servlet;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.extension.SPI;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-
-/**
- * PageHandler
- */
-@SPI
-public interface PageHandler {
-
-    /**
-     * Handle the page.
-     *
-     * @param url
-     * @return the page.
-     */
-    Page handle(URL url);
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/servlet/PageServlet.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/servlet/PageServlet.java
deleted file mode 100644
index 13c3205..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/servlet/PageServlet.java
+++ /dev/null
@@ -1,282 +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 com.alibaba.dubbo.monitor.simple.servlet;
-
-import com.alibaba.dubbo.common.Constants;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.extension.ExtensionLoader;
-import com.alibaba.dubbo.common.logger.Logger;
-import com.alibaba.dubbo.common.logger.LoggerFactory;
-import com.alibaba.dubbo.common.utils.StringUtils;
-import com.alibaba.dubbo.monitor.simple.common.Menu;
-import com.alibaba.dubbo.monitor.simple.common.MenuComparator;
-import com.alibaba.dubbo.monitor.simple.common.Page;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * PageServlet
- */
-public class PageServlet extends HttpServlet {
-
-    protected static final Logger logger = LoggerFactory.getLogger(PageServlet.class);
-    private static final long serialVersionUID = -8370312705453328501L;
-    private static PageServlet INSTANCE;
-    protected final Random random = new Random();
-    protected final Map<String, PageHandler> pages = new ConcurrentHashMap<String, PageHandler>();
-    protected final List<PageHandler> menus = new ArrayList<PageHandler>();
-
-    public static PageServlet getInstance() {
-        return INSTANCE;
-    }
-
-    public List<PageHandler> getMenus() {
-        return Collections.unmodifiableList(menus);
-    }
-
-    @Override
-    public void init() throws ServletException {
-        super.init();
-        INSTANCE = this;
-        String config = getServletConfig().getInitParameter("pages");
-        Collection<String> names;
-        if (config != null && config.length() > 0) {
-            names = Arrays.asList(Constants.COMMA_SPLIT_PATTERN.split(config));
-        } else {
-            names = ExtensionLoader.getExtensionLoader(PageHandler.class).getSupportedExtensions();
-        }
-        for (String name : names) {
-            PageHandler handler = ExtensionLoader.getExtensionLoader(PageHandler.class).getExtension(name);
-            pages.put(ExtensionLoader.getExtensionLoader(PageHandler.class).getExtensionName(handler), handler);
-            Menu menu = handler.getClass().getAnnotation(Menu.class);
-            if (menu != null) {
-                menus.add(handler);
-            }
-        }
-        Collections.sort(menus, new MenuComparator());
-    }
-
-    @Override
-    protected final void doGet(HttpServletRequest request, HttpServletResponse response)
-            throws ServletException, IOException {
-        doPost(request, response);
-    }
-
-    @Override
-    protected final void doPost(HttpServletRequest request, HttpServletResponse response)
-            throws ServletException, IOException {
-        if (!response.isCommitted()) {
-            PrintWriter writer = response.getWriter();
-            String uri = request.getRequestURI();
-            boolean isHtml = false;
-            if (uri == null || uri.length() == 0 || "/".equals(uri)) {
-                uri = "index";
-                isHtml = true;
-            } else {
-                if (uri.startsWith("/")) {
-                    uri = uri.substring(1);
-                }
-                if (uri.endsWith(".html")) {
-                    uri = uri.substring(0, uri.length() - ".html".length());
-                    isHtml = true;
-                }
-            }
-            if (uri.endsWith("favicon.ico")) {
-                response.sendError(HttpServletResponse.SC_NOT_FOUND);
-                return;
-            }
-            ExtensionLoader<PageHandler> pageHandlerLoader = ExtensionLoader.getExtensionLoader(PageHandler.class);
-            PageHandler pageHandler = pageHandlerLoader.hasExtension(uri) ? pageHandlerLoader.getExtension(uri) : null;
-            if (isHtml) {
-                writer.println("<html><head><title>Dubbo</title>");
-                writer.println("<style type=\"text/css\">html, body {margin: 10;padding: 0;background-color: #6D838C;font-family: Arial, Verdana;font-size: 12px;color: #FFFFFF;text-align: center;vertical-align: middle;word-break: break-all; } table {width: 90%; margin: 0px auto;border-collapse: collapse;border: 8px solid #FFFFFF; } thead tr {background-color: #253c46; } tbody tr {background-color: #8da5af; } th {padding-top: 4px;padding-bottom: 4px;font-size: 14px;height: 20px; } td {mar [...]
-                writer.println("</head><body>");
-            }
-            if (pageHandler != null) {
-                Page page = null;
-                try {
-                    String query = request.getQueryString();
-                    page = pageHandler.handle(URL.valueOf(request.getRequestURL().toString()
-                            + (query == null || query.length() == 0 ? "" : "?" + query)));
-                } catch (Throwable t) {
-                    logger.warn(t.getMessage(), t);
-                    String msg = t.getMessage();
-                    if (msg == null) {
-                        msg = StringUtils.toString(t);
-                    }
-                    if (isHtml) {
-                        writer.println("<table>");
-                        writer.println("<thead>");
-                        writer.println("    <tr>");
-                        writer.println("        <th>Error</th>");
-                        writer.println("    </tr>");
-                        writer.println("</thead>");
-                        writer.println("<tbody>");
-                        writer.println("    <tr>");
-                        writer.println("        <td>");
-                        writer.println("            " + msg.replace("<", "&lt;").replace(">", "&lt;").replace("\n", "<br/>"));
-                        writer.println("        </td>");
-                        writer.println("    </tr>");
-                        writer.println("</tbody>");
-                        writer.println("</table>");
-                        writer.println("<br/>");
-                    } else {
-                        writer.println(msg);
-                    }
-                }
-                if (page != null) {
-                    if (isHtml) {
-                        String nav = page.getNavigation();
-                        if (nav == null || nav.length() == 0) {
-                            nav = ExtensionLoader.getExtensionLoader(PageHandler.class).getExtensionName(pageHandler);
-                            nav = nav.substring(0, 1).toUpperCase() + nav.substring(1);
-                        }
-                        if (!"index".equals(uri)) {
-                            nav = "<a href=\"/\">Home</a> &gt; " + nav;
-                        }
-                        writeMenu(request, writer, nav);
-                        writeTable(writer, page.getTitle(), page.getColumns(),
-                                page.getRows());
-                    } else {
-                        if (page.getRows().size() > 0 && page.getRows().get(0).size() > 0) {
-                            writer.println(page.getRows().get(0).get(0));
-                        }
-                    }
-                }
-            } else {
-                if (isHtml) {
-                    writer.println("<table>");
-                    writer.println("<thead>");
-                    writer.println("    <tr>");
-                    writer.println("        <th>Error</th>");
-                    writer.println("    </tr>");
-                    writer.println("</thead>");
-                    writer.println("<tbody>");
-                    writer.println("    <tr>");
-                    writer.println("        <td>");
-                    writer.println("            Not found " + uri + " page. Please goto <a href=\"/\">Home</a> page.");
-                    writer.println("        </td>");
-                    writer.println("    </tr>");
-                    writer.println("</tbody>");
-                    writer.println("</table>");
-                    writer.println("<br/>");
-                } else {
-                    writer.println("Not found " + uri + " page.");
-                }
-            }
-            if (isHtml) {
-                writer.println("</body></html>");
-            }
-            writer.flush();
-        }
-    }
-
-    protected final void writeMenu(HttpServletRequest request, PrintWriter writer, String nav) {
-        writer.println("<table>");
-        writer.println("<thead>");
-        writer.println("    <tr>");
-        for (PageHandler handler : menus) {
-            String uri = ExtensionLoader.getExtensionLoader(PageHandler.class).getExtensionName(handler);
-            Menu menu = handler.getClass().getAnnotation(Menu.class);
-            writer.println("        <th><a href=\"" + uri + ".html\">" + menu.name() + "</a></th>");
-        }
-        writer.println("    </tr>");
-        writer.println("</thead>");
-        writer.println("<tbody>");
-        writer.println("    <tr>");
-        writer.println("        <td style=\"text-align: left\" colspan=\"" + menus.size() + "\">");
-        writer.println(nav);
-        writer.println("        </td>");
-        writer.println("    </tr>");
-        writer.println("</tbody>");
-        writer.println("</table>");
-        writer.println("<br/>");
-    }
-
-    protected final void writeTable(PrintWriter writer, String title, List<String> columns,
-                                    List<List<String>> rows) {
-        int n = random.nextInt();
-        int c = (columns == null ? (rows == null || rows.size() == 0 ? 0 : rows.get(0).size())
-                : columns.size());
-        int r = (rows == null ? 0 : rows.size());
-        writer.println("<table>");
-        writer.println("<thead>");
-        writer.println("    <tr>");
-        writer.println("        <th colspan=\"" + c + "\">" + title + "</th>");
-        writer.println("    </tr>");
-        if (columns != null && columns.size() > 0) {
-            writer.println("    <tr>");
-            for (int i = 0; i < columns.size(); i++) {
-                String col = columns.get(i);
-                if (col.endsWith(":")) {
-                    col += " <input type=\"text\" id=\"in_"
-                            + n
-                            + "_"
-                            + i
-                            + "\" onkeyup=\"for (var i = 0; i < "
-                            + r
-                            + "; i ++) { var m = true; for (var j = 0; j < "
-                            + columns.size()
-                            + "; j ++) { if (document.getElementById('in_"
-                            + n
-                            + "_' + j)) { var iv = document.getElementById('in_"
-                            + n
-                            + "_' + j).value; var tv = document.getElementById('td_"
-                            + n
-                            + "_' + i + '_' + j).innerHTML; if (iv.length > 0 && (tv.length < iv.length || tv.indexOf(iv) == -1)) { m = false; break; } } } document.getElementById('tr_"
-                            + n
-                            + "_' + i).style.display = (m ? '' : 'none');}\" sytle=\"width: 100%\" />";
-                }
-                writer.println("        <td>" + col + "</td>");
-            }
-            writer.println("    </tr>");
-        }
-        writer.println("</thead>");
-        if (rows != null && rows.size() > 0) {
-            writer.println("<tbody>");
-            int i = 0;
-            for (Collection<String> row : rows) {
-                writer.println("    <tr id=\"tr_" + n + "_" + i + "\">");
-                int j = 0;
-                for (String col : row) {
-                    writer.println("        <td id=\"td_" + n + "_" + i + "_" + j
-                            + "\" style=\"display: ;\">" + col + "</td>");
-                    j++;
-                }
-                writer.println("    </tr>");
-                i++;
-            }
-            writer.println("</tbody>");
-        }
-        writer.println("</table>");
-        writer.println("<br/>");
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/servlet/ResourceFilter.java b/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/servlet/ResourceFilter.java
deleted file mode 100644
index 86ad1df..0000000
--- a/dubbo-monitor-simple/src/main/java/com/alibaba/dubbo/monitor/simple/servlet/ResourceFilter.java
+++ /dev/null
@@ -1,151 +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 com.alibaba.dubbo.monitor.simple.servlet;
-
-import com.alibaba.dubbo.common.Constants;
-
-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.HttpServletResponse;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * ResourceServlet
- */
-public class ResourceFilter implements Filter {
-
-    private static final String CLASSPATH_PREFIX = "classpath:";
-
-    private final long start = System.currentTimeMillis();
-
-    private final List<String> resources = new ArrayList<String>();
-
-    public void init(FilterConfig filterConfig) throws ServletException {
-        String config = filterConfig.getInitParameter("resources");
-        if (config != null && config.length() > 0) {
-            String[] configs = Constants.COMMA_SPLIT_PATTERN.split(config);
-            for (String c : configs) {
-                if (c != null && c.length() > 0) {
-                    c = c.replace('\\', '/');
-                    if (c.endsWith("/")) {
-                        c = c.substring(0, c.length() - 1);
-                    }
-                    resources.add(c);
-                }
-            }
-        }
-    }
-
-    public void destroy() {
-    }
-
-    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
-            throws IOException, ServletException {
-        HttpServletRequest request = (HttpServletRequest) req;
-        HttpServletResponse response = (HttpServletResponse) res;
-        if (response.isCommitted()) {
-            return;
-        }
-        String uri = request.getRequestURI();
-        String context = request.getContextPath();
-        if (uri.endsWith("/favicon.ico")) {
-            uri = "/favicon.ico";
-        } else if (context != null && !"/".equals(context)) {
-            uri = uri.substring(context.length());
-        }
-        if (!uri.startsWith("/")) {
-            uri = "/" + uri;
-        }
-        long lastModified = getLastModified(uri);
-        long since = request.getDateHeader("If-Modified-Since");
-        if (since >= lastModified) {
-            response.sendError(HttpServletResponse.SC_NOT_MODIFIED);
-            return;
-        }
-        byte[] data;
-        InputStream input = getInputStream(uri);
-        if (input == null) {
-            chain.doFilter(req, res);
-            return;
-        }
-        try {
-            ByteArrayOutputStream output = new ByteArrayOutputStream();
-            byte[] buffer = new byte[8192];
-            int n = 0;
-            while (-1 != (n = input.read(buffer))) {
-                output.write(buffer, 0, n);
-            }
-            data = output.toByteArray();
-        } finally {
-            input.close();
-        }
-        response.setDateHeader("Last-Modified", lastModified);
-        OutputStream output = response.getOutputStream();
-        output.write(data);
-        output.flush();
-    }
-
-    private boolean isFile(String path) {
-        return path.startsWith("/") || path.indexOf(":") <= 1;
-    }
-
-    private long getLastModified(String uri) {
-        for (String resource : resources) {
-            if (resource != null && resource.length() > 0) {
-                String path = resource + uri;
-                if (isFile(path)) {
-                    File file = new File(path);
-                    if (file.exists()) {
-                        return file.lastModified();
-                    }
-                }
-            }
-        }
-        return start;
-    }
-
-    private InputStream getInputStream(String uri) {
-        for (String resource : resources) {
-            String path = resource + uri;
-            try {
-                if (isFile(path)) {
-                    return new FileInputStream(path);
-                } else if (path.startsWith(CLASSPATH_PREFIX)) {
-                    return Thread.currentThread().getContextClassLoader().getResourceAsStream(path.substring(CLASSPATH_PREFIX.length()));
-                } else {
-                    return new URL(path).openStream();
-                }
-            } catch (IOException e) {
-            }
-        }
-        return null;
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/dump.sh b/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/dump.sh
deleted file mode 100755
index 2eaad1b..0000000
--- a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/dump.sh
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/bin/bash
-cd `dirname $0`
-BIN_DIR=`pwd`
-cd ..
-DEPLOY_DIR=`pwd`
-CONF_DIR=$DEPLOY_DIR/conf
-
-SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-
-if [ -z "$SERVER_NAME" ]; then
-	SERVER_NAME=`hostname`
-fi
-
-PIDS=`ps -ef | grep java | grep -v grep | grep "$CONF_DIR" |awk '{print $2}'`
-if [ -z "$PIDS" ]; then
-    echo "ERROR: The $SERVER_NAME does not started!"
-    exit 1
-fi
-
-LOGS_DIR=""
-if [ -n "$LOGS_FILE" ]; then
-	LOGS_DIR=`dirname $LOGS_FILE`
-else
-	LOGS_DIR=$DEPLOY_DIR/logs
-fi
-if [ ! -d $LOGS_DIR ]; then
-	mkdir $LOGS_DIR
-fi
-DUMP_DIR=$LOGS_DIR/dump
-if [ ! -d $DUMP_DIR ]; then
-	mkdir $DUMP_DIR
-fi
-DUMP_DATE=`date +%Y%m%d%H%M%S`
-DATE_DIR=$DUMP_DIR/$DUMP_DATE
-if [ ! -d $DATE_DIR ]; then
-	mkdir $DATE_DIR
-fi
-
-echo -e "Dumping the $SERVER_NAME ...\c"
-for PID in $PIDS ; do
-	jstack $PID > $DATE_DIR/jstack-$PID.dump 2>&1
-	echo -e ".\c"
-	jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1
-	echo -e ".\c"
-	jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1
-	echo -e ".\c"
-	jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1
-	echo -e ".\c"
-	jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1
-	echo -e ".\c"
-	jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1
-	echo -e ".\c"
-	jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1
-	echo -e ".\c"
-	if [ -r /usr/sbin/lsof ]; then
-	/usr/sbin/lsof -p $PID > $DATE_DIR/lsof-$PID.dump
-	echo -e ".\c"
-	fi
-done
-
-if [ -r /assembly.bin/netstat ]; then
-/assembly.bin/netstat -an > $DATE_DIR/netstat.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/iostat ]; then
-/usr/assembly.bin/iostat > $DATE_DIR/iostat.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/mpstat ]; then
-/usr/assembly.bin/mpstat > $DATE_DIR/mpstat.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/vmstat ]; then
-/usr/assembly.bin/vmstat > $DATE_DIR/vmstat.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/free ]; then
-/usr/assembly.bin/free -t > $DATE_DIR/free.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/sar ]; then
-/usr/assembly.bin/sar > $DATE_DIR/sar.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/uptime ]; then
-/usr/assembly.bin/uptime > $DATE_DIR/uptime.dump 2>&1
-echo -e ".\c"
-fi
-
-echo "OK!"
-echo "DUMP: $DATE_DIR"
diff --git a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/restart.sh b/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/restart.sh
deleted file mode 100644
index 647ec19..0000000
--- a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/restart.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-cd `dirname $0`
-./stop.sh
-./start.sh
diff --git a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/server.sh b/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/server.sh
deleted file mode 100644
index 90947a5..0000000
--- a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/server.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-cd `dirname $0`
-if [ "$1" = "start" ]; then
-	./start.sh
-else
-	if [ "$1" = "stop" ]; then
-		./stop.sh
-	else
-		if [ "$1" = "debug" ]; then
-			./start.sh debug
-		else
-			if [ "$1" = "restart" ]; then
-				./restart.sh
-			else
-				if [ "$1" = "dump" ]; then
-					./dump.sh
-				else
-					echo "ERROR: Please input argument: start or stop or debug or restart or dump"
-				    exit 1
-				fi
-			fi
-		fi
-	fi
-fi
diff --git a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/start.bat b/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/start.bat
deleted file mode 100644
index fce3ff6..0000000
--- a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/start.bat
+++ /dev/null
@@ -1,22 +0,0 @@
-@echo off & setlocal enabledelayedexpansion
-
-set LIB_JARS=""
-cd ..\lib
-for %%i in (*) do set LIB_JARS=!LIB_JARS!;..\lib\%%i
-cd ..\assembly.bin
-
-if ""%1"" == ""debug"" goto debug
-if ""%1"" == ""jmx"" goto jmx
-
-java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -classpath ..\conf;%LIB_JARS% com.alibaba.dubbo.container.Main
-goto end
-
-:debug
-java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -classpath ..\conf;%LIB_JARS% com.alibaba.dubbo.container.Main
-goto end
-
-:jmx
-java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -classpath ..\conf;%LIB_JARS% com.alibaba.dubbo.container.Main
-
-:end
-pause
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/start.sh b/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/start.sh
deleted file mode 100755
index 026903a..0000000
--- a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/start.sh
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/bin/bash
-cd `dirname $0`
-BIN_DIR=`pwd`
-cd ..
-DEPLOY_DIR=`pwd`
-CONF_DIR=$DEPLOY_DIR/conf
-
-
-SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-SERVER_PROTOCOL=`sed '/dubbo.protocol.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-if [ -z "$SERVER_HOST" ]; then
-    SERVER_HOST=`sed '/dubbo.protocol.host/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-fi
-
-if [ -z "$SERVER_PORT" ]; then
-    SERVER_PORT=`sed '/dubbo.protocol.port/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-fi
-LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-
-if [ -z "$SERVER_HOST" ]; then
-    SERVER_HOST='127.0.0.1'
-fi
-
-if [ -z "$SERVER_NAME" ]; then
-    SERVER_NAME=`hostname`
-fi
-
-PIDS=`ps -ef | grep java | grep -v grep | grep "$CONF_DIR" |awk '{print $2}'`
-if [ -n "$PIDS" ]; then
-    echo "ERROR: The $SERVER_NAME already started!"
-    echo "PID: $PIDS"
-    exit 1
-fi
-
-if [ -n "$SERVER_PORT" ]; then
-    SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
-    if [ $SERVER_PORT_COUNT -gt 0 ]; then
-        echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"
-        exit 1
-    fi
-fi
-
-LOGS_DIR=""
-if [ -n "$LOGS_FILE" ]; then
-    LOGS_DIR=`dirname $LOGS_FILE`
-else
-    LOGS_DIR=$DEPLOY_DIR/logs
-fi
-if [ ! -d $LOGS_DIR ]; then
-    mkdir $LOGS_DIR
-fi
-STDOUT_FILE=$LOGS_DIR/stdout.log
-
-LIB_DIR=$DEPLOY_DIR/lib
-LIB_JARS=`ls $LIB_DIR|grep .jar|awk '{print "'$LIB_DIR'/"$0}'|tr "\n" ":"`
-
-JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
-JAVA_DEBUG_OPTS=""
-if [ "$1" = "debug" ]; then
-    JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
-fi
-JAVA_JMX_OPTS=""
-if [ "$1" = "jmx" ]; then
-    JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
-fi
-JAVA_MEM_OPTS=""
-BITS=`java -version 2>&1 | grep -i 64-bit`
-if [ -n "$BITS" ]; then
-    JAVA_MEM_OPTS=" -server -Xmx2g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
-else
-    JAVA_MEM_OPTS=" -server -Xms1g -Xmx1g -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
-fi
-
-echo -e "Starting the $SERVER_NAME ...\c"
-nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS com.alibaba.dubbo.container.Main > $STDOUT_FILE 2>&1 &
-
-COUNT=0
-while [ $COUNT -lt 1 ]; do    
-    echo -e ".\c"
-    sleep 1 
-    if [ -n "$SERVER_PORT" ]; then
-        if [ "$SERVER_PROTOCOL" == "dubbo" ]; then
-    	    COUNT=`echo status | nc -i 1 $SERVER_HOST $SERVER_PORT | grep -c OK`
-        else
-            COUNT=`netstat -an | grep $SERVER_PORT | wc -l`
-        fi
-    else
-    	COUNT=`ps -f | grep java | grep -v grep | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`
-    fi
-    if [ $COUNT -gt 0 ]; then
-        break
-    fi
-done
-
-echo "OK!"
-PIDS=`ps -f | grep java | grep -v grep | grep "$DEPLOY_DIR" | awk '{print $2}'`
-echo "PID: $PIDS"
-echo "STDOUT: $STDOUT_FILE"
-
-if [ "$1" = "run" ]; then
-    while ps -p $PIDS > /dev/null
-    do
-        echo -e ".\c"
-        sleep 1 
-    done
-fi
diff --git a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/stop.sh b/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/stop.sh
deleted file mode 100755
index 8fca15e..0000000
--- a/dubbo-monitor-simple/src/main/resources/META-INF/assembly/bin/stop.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/bash
-cd `dirname $0`
-BIN_DIR=`pwd`
-cd ..
-DEPLOY_DIR=`pwd`
-CONF_DIR=$DEPLOY_DIR/conf
-
-SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-
-if [ -z "$SERVER_NAME" ]; then
-    SERVER_NAME=`hostname`
-fi
-
-PIDS=`ps -ef | grep java | grep -v grep | grep "$CONF_DIR" |awk '{print $2}'`
-if [ -z "$PIDS" ]; then
-    echo "ERROR: The $SERVER_NAME does not started!"
-    exit 1
-fi
-
-if [ "$1" != "skip" ]; then
-    $BIN_DIR/dump.sh
-fi
-
-echo -e "Stopping the $SERVER_NAME ...\c"
-for PID in $PIDS ; do
-    kill $PID > /dev/null 2>&1
-done
-
-COUNT=0
-while [ $COUNT -lt 1 ]; do    
-    echo -e ".\c"
-    sleep 1
-    COUNT=1
-    for PID in $PIDS ; do
-        PID_EXIST=`ps -f -p $PID | grep java`
-        if [ -n "$PID_EXIST" ]; then
-            COUNT=0
-            break
-        fi
-    done
-done
-
-echo "OK!"
-echo "PID: $PIDS"
diff --git a/dubbo-monitor-simple/src/main/resources/META-INF/dubbo/internal/com.alibaba.dubbo.container.Container b/dubbo-monitor-simple/src/main/resources/META-INF/dubbo/internal/com.alibaba.dubbo.container.Container
deleted file mode 100644
index b3bfcf6..0000000
--- a/dubbo-monitor-simple/src/main/resources/META-INF/dubbo/internal/com.alibaba.dubbo.container.Container
+++ /dev/null
@@ -1,2 +0,0 @@
-registry=com.alibaba.dubbo.monitor.simple.container.RegistryContainer
-jetty-monitor=com.alibaba.dubbo.monitor.simple.container.JettyContainer
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/resources/META-INF/dubbo/internal/com.alibaba.dubbo.monitor.simple.servlet.PageHandler b/dubbo-monitor-simple/src/main/resources/META-INF/dubbo/internal/com.alibaba.dubbo.monitor.simple.servlet.PageHandler
deleted file mode 100644
index f31319c..0000000
--- a/dubbo-monitor-simple/src/main/resources/META-INF/dubbo/internal/com.alibaba.dubbo.monitor.simple.servlet.PageHandler
+++ /dev/null
@@ -1,19 +0,0 @@
-services=com.alibaba.dubbo.monitor.simple.pages.ServicesPageHandler
-providers=com.alibaba.dubbo.monitor.simple.pages.ProvidersPageHandler
-consumers=com.alibaba.dubbo.monitor.simple.pages.ConsumersPageHandler
-statistics=com.alibaba.dubbo.monitor.simple.pages.StatisticsPageHandler
-charts=com.alibaba.dubbo.monitor.simple.pages.ChartsPageHandler
-applications=com.alibaba.dubbo.monitor.simple.pages.ApplicationsPageHandler
-dependencies=com.alibaba.dubbo.monitor.simple.pages.DependenciesPageHandler
-hosts=com.alibaba.dubbo.monitor.simple.pages.HostsPageHandler
-unregister=com.alibaba.dubbo.monitor.simple.pages.UnregisterPageHandler
-unsubscribe=com.alibaba.dubbo.monitor.simple.pages.UnsubscribePageHandler
-index=com.alibaba.dubbo.monitor.simple.pages.HomePageHandler
-status=com.alibaba.dubbo.monitor.simple.pages.StatusPageHandler
-log=com.alibaba.dubbo.monitor.simple.pages.LogPageHandler
-system=com.alibaba.dubbo.monitor.simple.pages.SystemPageHandler
-registries=com.alibaba.dubbo.monitor.simple.pages.RegistriesPageHandler
-registered=com.alibaba.dubbo.monitor.simple.pages.RegisteredPageHandler
-subscribed=com.alibaba.dubbo.monitor.simple.pages.SubscribedPageHandler
-servers=com.alibaba.dubbo.monitor.simple.pages.ServersPageHandler
-clients=com.alibaba.dubbo.monitor.simple.pages.ClientsPageHandler
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/resources/META-INF/spring/dubbo-monitor-simple.xml b/dubbo-monitor-simple/src/main/resources/META-INF/spring/dubbo-monitor-simple.xml
deleted file mode 100644
index 8032d09..0000000
--- a/dubbo-monitor-simple/src/main/resources/META-INF/spring/dubbo-monitor-simple.xml
+++ /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.
--->
-<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
-       xmlns="http://www.springframework.org/schema/beans"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-	http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
-
-    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
-        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
-        <property name="location" value="classpath:conf/dubbo.properties"/>
-    </bean>
-
-    <bean id="monitorService" class="com.alibaba.dubbo.monitor.simple.SimpleMonitorService">
-    </bean>
-
-    <dubbo:application name="${dubbo.application.name}" owner="${dubbo.application.owner}"/>
-
-    <dubbo:registry client="curator" address="${dubbo.registry.address}"/>
-
-    <dubbo:protocol name="dubbo" port="${dubbo.protocol.port}"/>
-
-    <dubbo:service interface="com.alibaba.dubbo.monitor.MonitorService" ref="monitorService" delay="-1"/>
-
-    <dubbo:reference id="registryService" interface="com.alibaba.dubbo.registry.RegistryService"/>
-
-</beans>
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/resources/conf/dubbo.properties b/dubbo-monitor-simple/src/main/resources/conf/dubbo.properties
deleted file mode 100644
index 9bece5f..0000000
--- a/dubbo-monitor-simple/src/main/resources/conf/dubbo.properties
+++ /dev/null
@@ -1,29 +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.
-
-dubbo.container=log4j,spring,registry,jetty-monitor
-dubbo.application.name=simple-monitor
-dubbo.application.owner=dubbo
-#dubbo.registry.address=multicast://224.5.6.7:1234
-dubbo.registry.address=zookeeper://127.0.0.1:2181
-#dubbo.registry.address=redis://127.0.0.1:6379
-#dubbo.registry.address=dubbo://127.0.0.1:9090
-dubbo.protocol.port=7070
-dubbo.jetty.port=8080
-dubbo.jetty.directory=${user.home}/monitor
-dubbo.charts.directory=${user.home}/monitor/charts
-dubbo.statistics.directory=${user.home}/monitor/statistics
-dubbo.log4j.file=logs/dubbo-monitor-simple.log
-dubbo.log4j.level=WARN
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/main/resources/log4j.xml b/dubbo-monitor-simple/src/main/resources/log4j.xml
deleted file mode 100644
index 315d6b3..0000000
--- a/dubbo-monitor-simple/src/main/resources/log4j.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
-    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
-        <param name="target" value="System.out"/>
-        <param name="encoding" value="GBK"/>
-        <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="%5p %c{2} - %m%n"/>
-        </layout>
-    </appender>
-    <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
-        <param name="file" value="dubbo-governance.log"/>
-        <param name="append" value="true"/>
-        <param name="maxFileSize" value="10MB"/>
-        <param name="maxBackupIndex" value="100"/>
-        <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="%d [%t] %-5p %C{6} (%F:%L) - %m%n"/>
-        </layout>
-    </appender>
-
-    <logger name="org.apache">
-        <level value="INFO"/>
-    </logger>
-    <root>
-        <level value="INFO"/>
-        <appender-ref ref="STDOUT"/>
-        <appender-ref ref="FILE"/>
-    </root>
-</log4j:configuration>
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/test/java/com/alibaba/dubbo/monitor/simple/SimpleMonitor.java b/dubbo-monitor-simple/src/test/java/com/alibaba/dubbo/monitor/simple/SimpleMonitor.java
deleted file mode 100644
index 777e281..0000000
--- a/dubbo-monitor-simple/src/test/java/com/alibaba/dubbo/monitor/simple/SimpleMonitor.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 com.alibaba.dubbo.monitor.simple;
-
-public class SimpleMonitor {
-
-    public static void main(String[] args) {
-        com.alibaba.dubbo.container.Main.main(args);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/test/java/com/alibaba/dubbo/monitor/simple/SimpleMonitorServiceTest.java b/dubbo-monitor-simple/src/test/java/com/alibaba/dubbo/monitor/simple/SimpleMonitorServiceTest.java
deleted file mode 100644
index 58549e0..0000000
--- a/dubbo-monitor-simple/src/test/java/com/alibaba/dubbo/monitor/simple/SimpleMonitorServiceTest.java
+++ /dev/null
@@ -1,34 +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 com.alibaba.dubbo.monitor.simple;
-
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.NetUtils;
-
-import org.junit.Test;
-
-/**
- * SimpleMonitorServiceTest
- */
-public class SimpleMonitorServiceTest {
-
-    @Test
-    public void testMonitor() {
-        new SimpleMonitorService().collect(new URL("dubbo", NetUtils.getLocalHost(), 0));
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/test/resources/dubbo.properties b/dubbo-monitor-simple/src/test/resources/dubbo.properties
deleted file mode 100644
index ffe1763..0000000
--- a/dubbo-monitor-simple/src/test/resources/dubbo.properties
+++ /dev/null
@@ -1,29 +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.
-
-dubbo.container=log4j,spring,registry,jetty
-dubbo.application.name=simple-monitor
-dubbo.application.owner=
-dubbo.registry.address=multicast://224.5.6.7:1234
-#dubbo.registry.address=zookeeper://127.0.0.1:2181
-#dubbo.registry.address=redis://127.0.0.1:6379
-#dubbo.registry.address=dubbo://127.0.0.1:9090
-dubbo.protocol.port=7070
-dubbo.jetty.port=8080
-dubbo.jetty.directory=${user.home}/monitor
-dubbo.charts.directory=${dubbo.jetty.directory}/charts
-dubbo.statistics.directory=${user.home}/monitor/statistics
-#dubbo.log4j.file=logs/dubbo-demo-consumer.log
-#dubbo.log4j.level=WARN
\ No newline at end of file
diff --git a/dubbo-monitor-simple/src/test/resources/log4j.xml b/dubbo-monitor-simple/src/test/resources/log4j.xml
deleted file mode 100644
index 230a044..0000000
--- a/dubbo-monitor-simple/src/test/resources/log4j.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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 log4j:configuration SYSTEM "log4j.dtd">
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
-    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
-        <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n"/>
-        </layout>
-    </appender>
-    <root>
-        <level value="INFO"/>
-        <appender-ref ref="CONSOLE"/>
-    </root>
-</log4j:configuration>
\ No newline at end of file
diff --git a/dubbo-registry-simple/pom.xml b/dubbo-registry-simple/pom.xml
deleted file mode 100644
index 011aecd..0000000
--- a/dubbo-registry-simple/pom.xml
+++ /dev/null
@@ -1,84 +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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>com.alibaba</groupId>
-        <artifactId>dubbo-ops</artifactId>
-        <version>2.0.0</version>
-    </parent>
-    <artifactId>dubbo-registry-simple</artifactId>
-    <packaging>jar</packaging>
-    <name>${project.artifactId}</name>
-    <description>The reference implementation of dubbo registry</description>
-    <properties>
-        <skip_maven_deploy>false</skip_maven_deploy>
-    </properties>
-    <dependencies>
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>dubbo</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.mortbay.jetty</groupId>
-            <artifactId>jetty</artifactId>
-        </dependency>
-    </dependencies>
-    <build>
-        <plugins>
-            <plugin>
-                <artifactId>maven-dependency-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>unpack</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>unpack</goal>
-                        </goals>
-                        <configuration>
-                            <artifactItems>
-                                <artifactItem>
-                                    <groupId>com.alibaba</groupId>
-                                    <artifactId>dubbo</artifactId>
-                                    <version>${dubbo_all_version}</version>
-                                    <outputDirectory>${project.build.directory}/dubbo</outputDirectory>
-                                    <includes>META-INF/assembly/**</includes>
-                                </artifactItem>
-                            </artifactItems>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <configuration>
-                    <descriptor>src/main/assembly/assembly.xml</descriptor>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>make-assembly</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-</project>
\ No newline at end of file
diff --git a/dubbo-registry-simple/src/main/assembly/assembly.xml b/dubbo-registry-simple/src/main/assembly/assembly.xml
deleted file mode 100644
index 39f34dc..0000000
--- a/dubbo-registry-simple/src/main/assembly/assembly.xml
+++ /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.
--->
-<assembly>
-    <id>assembly</id>
-    <formats>
-        <format>tar.gz</format>
-    </formats>
-    <includeBaseDirectory>true</includeBaseDirectory>
-    <fileSets>
-        <fileSet>
-            <directory>${project.build.directory}/classes/META-INF/assembly/bin</directory>
-            <outputDirectory>assembly.bin</outputDirectory>
-            <fileMode>0755</fileMode>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/resources/conf</directory>
-            <outputDirectory>conf</outputDirectory>
-            <fileMode>0644</fileMode>
-        </fileSet>
-    </fileSets>
-    <dependencySets>
-        <dependencySet>
-            <outputDirectory>lib</outputDirectory>
-        </dependencySet>
-    </dependencySets>
-</assembly>
\ No newline at end of file
diff --git a/dubbo-registry-simple/src/main/java/com/alibaba/dubbo/registry/simple/SimpleRegistryService.java b/dubbo-registry-simple/src/main/java/com/alibaba/dubbo/registry/simple/SimpleRegistryService.java
deleted file mode 100644
index c8e8af9..0000000
--- a/dubbo-registry-simple/src/main/java/com/alibaba/dubbo/registry/simple/SimpleRegistryService.java
+++ /dev/null
@@ -1,209 +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 com.alibaba.dubbo.registry.simple;
-
-import com.alibaba.dubbo.common.Constants;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.logger.Logger;
-import com.alibaba.dubbo.common.logger.LoggerFactory;
-import com.alibaba.dubbo.common.utils.ConcurrentHashSet;
-import com.alibaba.dubbo.common.utils.NetUtils;
-import com.alibaba.dubbo.common.utils.UrlUtils;
-import com.alibaba.dubbo.registry.NotifyListener;
-import com.alibaba.dubbo.registry.RegistryService;
-import com.alibaba.dubbo.registry.support.AbstractRegistry;
-import com.alibaba.dubbo.rpc.RpcContext;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * SimpleRegistryService
- */
-public class SimpleRegistryService extends AbstractRegistry {
-
-    private final static Logger logger = LoggerFactory.getLogger(SimpleRegistryService.class);
-    private final ConcurrentMap<String, Set<URL>> remoteRegistered = new ConcurrentHashMap<String, Set<URL>>();
-    private final ConcurrentMap<String, ConcurrentMap<URL, Set<NotifyListener>>> remoteSubscribed = new ConcurrentHashMap<String, ConcurrentMap<URL, Set<NotifyListener>>>();
-
-    public SimpleRegistryService() {
-        super(new URL("dubbo", NetUtils.getLocalHost(), 0, RegistryService.class.getName(), "file", "N/A"));
-    }
-
-    public boolean isAvailable() {
-        return true;
-    }
-
-    public List<URL> lookup(URL url) {
-        List<URL> urls = new ArrayList<URL>();
-        for (URL u : getRegistered()) {
-            if (UrlUtils.isMatch(url, u)) {
-                urls.add(u);
-            }
-        }
-        return urls;
-    }
-
-    public void register(URL url) {
-        String client = RpcContext.getContext().getRemoteAddressString();
-        Set<URL> urls = remoteRegistered.get(client);
-        if (urls == null) {
-            remoteRegistered.putIfAbsent(client, new ConcurrentHashSet<URL>());
-            urls = remoteRegistered.get(client);
-        }
-        urls.add(url);
-        super.register(url);
-        registered(url);
-    }
-
-    public void unregister(URL url) {
-        String client = RpcContext.getContext().getRemoteAddressString();
-        Set<URL> urls = remoteRegistered.get(client);
-        if (urls != null && urls.size() > 0) {
-            urls.remove(url);
-        }
-        super.unregister(url);
-        unregistered(url);
-    }
-
-    public void subscribe(URL url, NotifyListener listener) {
-        if (getUrl().getPort() == 0) {
-            URL registryUrl = RpcContext.getContext().getUrl();
-            if (registryUrl != null && registryUrl.getPort() > 0
-                    && RegistryService.class.getName().equals(registryUrl.getPath())) {
-                super.setUrl(registryUrl);
-                super.register(registryUrl);
-            }
-        }
-        String client = RpcContext.getContext().getRemoteAddressString();
-        ConcurrentMap<URL, Set<NotifyListener>> clientListeners = remoteSubscribed.get(client);
-        if (clientListeners == null) {
-            remoteSubscribed.putIfAbsent(client, new ConcurrentHashMap<URL, Set<NotifyListener>>());
-            clientListeners = remoteSubscribed.get(client);
-        }
-        Set<NotifyListener> listeners = clientListeners.get(url);
-        if (listeners == null) {
-            clientListeners.putIfAbsent(url, new ConcurrentHashSet<NotifyListener>());
-            listeners = clientListeners.get(url);
-        }
-        listeners.add(listener);
-        super.subscribe(url, listener);
-        subscribed(url, listener);
-    }
-
-    public void unsubscribe(URL url, NotifyListener listener) {
-        if (!Constants.ANY_VALUE.equals(url.getServiceInterface())
-                && url.getParameter(Constants.REGISTER_KEY, true)) {
-            unregister(url);
-        }
-        String client = RpcContext.getContext().getRemoteAddressString();
-        Map<URL, Set<NotifyListener>> clientListeners = remoteSubscribed.get(client);
-        if (clientListeners != null && clientListeners.size() > 0) {
-            Set<NotifyListener> listeners = clientListeners.get(url);
-            if (listeners != null && listeners.size() > 0) {
-                listeners.remove(listener);
-            }
-        }
-    }
-
-    protected void registered(URL url) {
-        for (Map.Entry<URL, Set<NotifyListener>> entry : getSubscribed().entrySet()) {
-            URL key = entry.getKey();
-            if (UrlUtils.isMatch(key, url)) {
-                List<URL> list = lookup(key);
-                for (NotifyListener listener : entry.getValue()) {
-                    listener.notify(list);
-                }
-            }
-        }
-    }
-
-    protected void unregistered(URL url) {
-        for (Map.Entry<URL, Set<NotifyListener>> entry : getSubscribed().entrySet()) {
-            URL key = entry.getKey();
-            if (UrlUtils.isMatch(key, url)) {
-                List<URL> list = lookup(key);
-                for (NotifyListener listener : entry.getValue()) {
-                    listener.notify(list);
-                }
-            }
-        }
-    }
-
-    protected void subscribed(final URL url, final NotifyListener listener) {
-        if (Constants.ANY_VALUE.equals(url.getServiceInterface())) {
-            new Thread(new Runnable() {
-                public void run() {
-                    Map<String, List<URL>> map = new HashMap<String, List<URL>>();
-                    for (URL u : getRegistered()) {
-                        if (UrlUtils.isMatch(url, u)) {
-                            String service = u.getServiceInterface();
-                            List<URL> list = map.get(service);
-                            if (list == null) {
-                                list = new ArrayList<URL>();
-                                map.put(service, list);
-                            }
-                            list.add(u);
-                        }
-                    }
-                    for (List<URL> list : map.values()) {
-                        try {
-                            listener.notify(list);
-                        } catch (Throwable e) {
-                            logger.warn("Discard to notify " + url.getServiceKey() + " to listener " + listener);
-                        }
-                    }
-                }
-            }, "DubboMonitorNotifier").start();
-        } else {
-            List<URL> list = lookup(url);
-            try {
-                listener.notify(list);
-            } catch (Throwable e) {
-                logger.warn("Discard to notify " + url.getServiceKey() + " to listener " + listener);
-            }
-        }
-    }
-
-    public void disconnect() {
-        String client = RpcContext.getContext().getRemoteAddressString();
-        if (logger.isInfoEnabled()) {
-            logger.info("Disconnected " + client);
-        }
-        Set<URL> urls = remoteRegistered.get(client);
-        if (urls != null && urls.size() > 0) {
-            for (URL url : urls) {
-                unregister(url);
-            }
-        }
-        Map<URL, Set<NotifyListener>> listeners = remoteSubscribed.get(client);
-        if (listeners != null && listeners.size() > 0) {
-            for (Map.Entry<URL, Set<NotifyListener>> entry : listeners.entrySet()) {
-                URL url = entry.getKey();
-                for (NotifyListener listener : entry.getValue()) {
-                    unsubscribe(url, listener);
-                }
-            }
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/dump.sh b/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/dump.sh
deleted file mode 100755
index 2eaad1b..0000000
--- a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/dump.sh
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/bin/bash
-cd `dirname $0`
-BIN_DIR=`pwd`
-cd ..
-DEPLOY_DIR=`pwd`
-CONF_DIR=$DEPLOY_DIR/conf
-
-SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-
-if [ -z "$SERVER_NAME" ]; then
-	SERVER_NAME=`hostname`
-fi
-
-PIDS=`ps -ef | grep java | grep -v grep | grep "$CONF_DIR" |awk '{print $2}'`
-if [ -z "$PIDS" ]; then
-    echo "ERROR: The $SERVER_NAME does not started!"
-    exit 1
-fi
-
-LOGS_DIR=""
-if [ -n "$LOGS_FILE" ]; then
-	LOGS_DIR=`dirname $LOGS_FILE`
-else
-	LOGS_DIR=$DEPLOY_DIR/logs
-fi
-if [ ! -d $LOGS_DIR ]; then
-	mkdir $LOGS_DIR
-fi
-DUMP_DIR=$LOGS_DIR/dump
-if [ ! -d $DUMP_DIR ]; then
-	mkdir $DUMP_DIR
-fi
-DUMP_DATE=`date +%Y%m%d%H%M%S`
-DATE_DIR=$DUMP_DIR/$DUMP_DATE
-if [ ! -d $DATE_DIR ]; then
-	mkdir $DATE_DIR
-fi
-
-echo -e "Dumping the $SERVER_NAME ...\c"
-for PID in $PIDS ; do
-	jstack $PID > $DATE_DIR/jstack-$PID.dump 2>&1
-	echo -e ".\c"
-	jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1
-	echo -e ".\c"
-	jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1
-	echo -e ".\c"
-	jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1
-	echo -e ".\c"
-	jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1
-	echo -e ".\c"
-	jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1
-	echo -e ".\c"
-	jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1
-	echo -e ".\c"
-	if [ -r /usr/sbin/lsof ]; then
-	/usr/sbin/lsof -p $PID > $DATE_DIR/lsof-$PID.dump
-	echo -e ".\c"
-	fi
-done
-
-if [ -r /assembly.bin/netstat ]; then
-/assembly.bin/netstat -an > $DATE_DIR/netstat.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/iostat ]; then
-/usr/assembly.bin/iostat > $DATE_DIR/iostat.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/mpstat ]; then
-/usr/assembly.bin/mpstat > $DATE_DIR/mpstat.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/vmstat ]; then
-/usr/assembly.bin/vmstat > $DATE_DIR/vmstat.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/free ]; then
-/usr/assembly.bin/free -t > $DATE_DIR/free.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/sar ]; then
-/usr/assembly.bin/sar > $DATE_DIR/sar.dump 2>&1
-echo -e ".\c"
-fi
-if [ -r /usr/assembly.bin/uptime ]; then
-/usr/assembly.bin/uptime > $DATE_DIR/uptime.dump 2>&1
-echo -e ".\c"
-fi
-
-echo "OK!"
-echo "DUMP: $DATE_DIR"
diff --git a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/restart.sh b/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/restart.sh
deleted file mode 100644
index 647ec19..0000000
--- a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/restart.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-cd `dirname $0`
-./stop.sh
-./start.sh
diff --git a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/server.sh b/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/server.sh
deleted file mode 100644
index 90947a5..0000000
--- a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/server.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-cd `dirname $0`
-if [ "$1" = "start" ]; then
-	./start.sh
-else
-	if [ "$1" = "stop" ]; then
-		./stop.sh
-	else
-		if [ "$1" = "debug" ]; then
-			./start.sh debug
-		else
-			if [ "$1" = "restart" ]; then
-				./restart.sh
-			else
-				if [ "$1" = "dump" ]; then
-					./dump.sh
-				else
-					echo "ERROR: Please input argument: start or stop or debug or restart or dump"
-				    exit 1
-				fi
-			fi
-		fi
-	fi
-fi
diff --git a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/start.bat b/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/start.bat
deleted file mode 100644
index fce3ff6..0000000
--- a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/start.bat
+++ /dev/null
@@ -1,22 +0,0 @@
-@echo off & setlocal enabledelayedexpansion
-
-set LIB_JARS=""
-cd ..\lib
-for %%i in (*) do set LIB_JARS=!LIB_JARS!;..\lib\%%i
-cd ..\assembly.bin
-
-if ""%1"" == ""debug"" goto debug
-if ""%1"" == ""jmx"" goto jmx
-
-java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -classpath ..\conf;%LIB_JARS% com.alibaba.dubbo.container.Main
-goto end
-
-:debug
-java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -classpath ..\conf;%LIB_JARS% com.alibaba.dubbo.container.Main
-goto end
-
-:jmx
-java -Xms64m -Xmx1024m -XX:MaxPermSize=64M -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -classpath ..\conf;%LIB_JARS% com.alibaba.dubbo.container.Main
-
-:end
-pause
\ No newline at end of file
diff --git a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/start.sh b/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/start.sh
deleted file mode 100755
index 3b491f0..0000000
--- a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/start.sh
+++ /dev/null
@@ -1,92 +0,0 @@
-#!/bin/bash
-cd `dirname $0`
-BIN_DIR=`pwd`
-cd ..
-DEPLOY_DIR=`pwd`
-CONF_DIR=$DEPLOY_DIR/conf
-
-SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-SERVER_PROTOCOL=`sed '/dubbo.protocol.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-SERVER_HOST=`sed '/dubbo.protocol.host/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-SERVER_PORT=`sed '/dubbo.protocol.port/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-
-if [ -z "$SERVER_HOST" ]; then
-    SERVER_HOST='127.0.0.1'
-fi
-
-if [ -z "$SERVER_NAME" ]; then
-    SERVER_NAME=`hostname`
-fi
-
-PIDS=`ps -ef | grep java | grep -v grep | grep "$CONF_DIR" |awk '{print $2}'`
-if [ -n "$PIDS" ]; then
-    echo "ERROR: The $SERVER_NAME already started!"
-    echo "PID: $PIDS"
-    exit 1
-fi
-
-if [ -n "$SERVER_PORT" ]; then
-    SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
-    if [ $SERVER_PORT_COUNT -gt 0 ]; then
-        echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"
-        exit 1
-    fi
-fi
-
-LOGS_DIR=""
-if [ -n "$LOGS_FILE" ]; then
-    LOGS_DIR=`dirname $LOGS_FILE`
-else
-    LOGS_DIR=$DEPLOY_DIR/logs
-fi
-if [ ! -d $LOGS_DIR ]; then
-    mkdir $LOGS_DIR
-fi
-STDOUT_FILE=$LOGS_DIR/stdout.log
-
-LIB_DIR=$DEPLOY_DIR/lib
-LIB_JARS=`ls $LIB_DIR|grep .jar|awk '{print "'$LIB_DIR'/"$0}'|tr "\n" ":"`
-
-JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
-JAVA_DEBUG_OPTS=""
-if [ "$1" = "debug" ]; then
-    JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
-fi
-JAVA_JMX_OPTS=""
-if [ "$1" = "jmx" ]; then
-    JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
-fi
-JAVA_MEM_OPTS=""
-BITS=`java -version 2>&1 | grep -i 64-bit`
-if [ -n "$BITS" ]; then
-    JAVA_MEM_OPTS=" -server -Xmx2g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 "
-else
-    JAVA_MEM_OPTS=" -server -Xms1g -Xmx1g -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
-fi
-
-echo -e "Starting the $SERVER_NAME ...\c"
-nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -classpath $CONF_DIR:$LIB_JARS com.alibaba.dubbo.container.Main > $STDOUT_FILE 2>&1 &
-
-COUNT=0
-while [ $COUNT -lt 1 ]; do    
-    echo -e ".\c"
-    sleep 1 
-    if [ -n "$SERVER_PORT" ]; then
-        if [ "$SERVER_PROTOCOL" == "dubbo" ]; then
-    	    COUNT=`echo status | nc -i 1 $SERVER_HOST $SERVER_PORT | grep -c OK`
-        else
-            COUNT=`netstat -an | grep $SERVER_PORT | wc -l`
-        fi
-    else
-    	COUNT=`ps -f | grep java | grep -v grep | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`
-    fi
-    if [ $COUNT -gt 0 ]; then
-        break
-    fi
-done
-
-echo "OK!"
-PIDS=`ps -f | grep java | grep -v grep | grep "$DEPLOY_DIR" | awk '{print $2}'`
-echo "PID: $PIDS"
-echo "STDOUT: $STDOUT_FILE"
diff --git a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/stop.sh b/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/stop.sh
deleted file mode 100755
index 8fca15e..0000000
--- a/dubbo-registry-simple/src/main/resources/META-INF/assembly/bin/stop.sh
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/bin/bash
-cd `dirname $0`
-BIN_DIR=`pwd`
-cd ..
-DEPLOY_DIR=`pwd`
-CONF_DIR=$DEPLOY_DIR/conf
-
-SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
-
-if [ -z "$SERVER_NAME" ]; then
-    SERVER_NAME=`hostname`
-fi
-
-PIDS=`ps -ef | grep java | grep -v grep | grep "$CONF_DIR" |awk '{print $2}'`
-if [ -z "$PIDS" ]; then
-    echo "ERROR: The $SERVER_NAME does not started!"
-    exit 1
-fi
-
-if [ "$1" != "skip" ]; then
-    $BIN_DIR/dump.sh
-fi
-
-echo -e "Stopping the $SERVER_NAME ...\c"
-for PID in $PIDS ; do
-    kill $PID > /dev/null 2>&1
-done
-
-COUNT=0
-while [ $COUNT -lt 1 ]; do    
-    echo -e ".\c"
-    sleep 1
-    COUNT=1
-    for PID in $PIDS ; do
-        PID_EXIST=`ps -f -p $PID | grep java`
-        if [ -n "$PID_EXIST" ]; then
-            COUNT=0
-            break
-        fi
-    done
-done
-
-echo "OK!"
-echo "PID: $PIDS"
diff --git a/dubbo-registry-simple/src/main/resources/META-INF/spring/dubbo-registry-simple.xml b/dubbo-registry-simple/src/main/resources/META-INF/spring/dubbo-registry-simple.xml
deleted file mode 100644
index 8be8861..0000000
--- a/dubbo-registry-simple/src/main/resources/META-INF/spring/dubbo-registry-simple.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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.
--->
-<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
-       xmlns="http://www.springframework.org/schema/beans"
-       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
-    http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
-
-    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
-        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
-        <property name="location" value="classpath:dubbo.properties"/>
-    </bean>
-
-    <dubbo:application name="${dubbo.application.name}" owner="${dubbo.application.owner}"/>
-
-    <dubbo:protocol name="dubbo" port="${dubbo.protocol.port}" heartbeat="180000"/>
-
-    <dubbo:service id="registryServiceConfig" interface="com.alibaba.dubbo.registry.RegistryService"
-                   ref="registryService" registry="N/A" ondisconnect="disconnect" callbacks="1000">
-        <dubbo:method name="subscribe">
-            <dubbo:argument index="1" callback="true"/>
-        </dubbo:method>
-        <dubbo:method name="unsubscribe">
-            <dubbo:argument index="1" callback="false"/>
-        </dubbo:method>
-    </dubbo:service>
-
-    <bean id="registryService" class="com.alibaba.dubbo.registry.simple.SimpleRegistryService"/>
-
-</beans>
\ No newline at end of file
diff --git a/dubbo-registry-simple/src/main/resources/conf/dubbo.properties b/dubbo-registry-simple/src/main/resources/conf/dubbo.properties
deleted file mode 100644
index a7ce85e..0000000
--- a/dubbo-registry-simple/src/main/resources/conf/dubbo.properties
+++ /dev/null
@@ -1,21 +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.
-
-dubbo.container=log4j,spring
-dubbo.application.name=simple-registry
-dubbo.application.owner=dubbo
-dubbo.protocol.port=9090
-dubbo.log4j.file=logs/dubbo-simple-registry.log
-dubbo.log4j.level=WARN
\ No newline at end of file
diff --git a/dubbo-registry-simple/src/test/java/com/alibaba/dubbo/registry/simple/SimpleRegistry.java b/dubbo-registry-simple/src/test/java/com/alibaba/dubbo/registry/simple/SimpleRegistry.java
deleted file mode 100644
index c7b1d9a..0000000
--- a/dubbo-registry-simple/src/test/java/com/alibaba/dubbo/registry/simple/SimpleRegistry.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 com.alibaba.dubbo.registry.simple;
-
-public class SimpleRegistry {
-
-    public static void main(String[] args) {
-        com.alibaba.dubbo.container.Main.main(args);
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-registry-simple/src/test/java/com/alibaba/dubbo/registry/simple/SimpleRegistryServiceTest.java b/dubbo-registry-simple/src/test/java/com/alibaba/dubbo/registry/simple/SimpleRegistryServiceTest.java
deleted file mode 100644
index f008a75..0000000
--- a/dubbo-registry-simple/src/test/java/com/alibaba/dubbo/registry/simple/SimpleRegistryServiceTest.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 com.alibaba.dubbo.registry.simple;
-
-import org.junit.Test;
-
-/**
- * SimpleRegistryServiceTest
- */
-public class SimpleRegistryServiceTest {
-
-    @Test
-    public void testRegistry() {
-        new SimpleRegistryService();
-    }
-
-}
\ No newline at end of file
diff --git a/dubbo-registry-simple/src/test/resources/dubbo.properties b/dubbo-registry-simple/src/test/resources/dubbo.properties
deleted file mode 100644
index 6add997..0000000
--- a/dubbo-registry-simple/src/test/resources/dubbo.properties
+++ /dev/null
@@ -1,21 +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.
-
-dubbo.container=log4j,spring
-dubbo.application.name=simple-registry
-dubbo.application.owner=
-dubbo.protocol.port=9090
-#dubbo.log4j.file=logs/dubbo-demo-consumer.log
-#dubbo.log4j.level=WARN
\ No newline at end of file
diff --git a/dubbo-registry-simple/src/test/resources/log4j.xml b/dubbo-registry-simple/src/test/resources/log4j.xml
deleted file mode 100644
index 230a044..0000000
--- a/dubbo-registry-simple/src/test/resources/log4j.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-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 log4j:configuration SYSTEM "log4j.dtd">
-<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
-    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
-        <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %t %5p %c{2}: %m%n"/>
-        </layout>
-    </appender>
-    <root>
-        <level value="INFO"/>
-        <appender-ref ref="CONSOLE"/>
-    </root>
-</log4j:configuration>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index fa319d5..69f7144 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,217 +16,73 @@
   ~  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>
+<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>
 
-    <groupId>com.alibaba</groupId>
-    <artifactId>dubbo-ops</artifactId>
-    <version>2.0.0</version>
-    <packaging>pom</packaging>
+	<groupId>org.apache</groupId>
+	<artifactId>dubbo-admin</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<modules>
+		<module>dubbo-admin-frontend</module>
+		<module>dubbo-admin-backend</module>
+	</modules>
+	<packaging>pom</packaging>
 
-    <properties>
-        <dubbo_all_version>2.6.0</dubbo_all_version>
-        <dubbo_version>2.6.0</dubbo_version>
-        <jfreechart_version>1.0.13</jfreechart_version>
+	<name>dubbo-admin</name>
+	<description>Dubbo admin front and back end</description>
 
-        <!-- Temporarily added for lower version compatibility  -->
-        <spring_version>4.3.10.RELEASE</spring_version>
-        <fastjson_version>1.2.31</fastjson_version>
-        <curator_version>2.12.0</curator_version>
-        <jetty_version>6.1.26</jetty_version>
-        <servlet_version>3.1.0</servlet_version>
-        <slf4j_version>1.7.25</slf4j_version>
-        <log4j_version>1.2.16</log4j_version>
-        <commons_lang3_version>3.4</commons_lang3_version>
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.0.2.RELEASE</version>
+		<relativePath/> <!-- lookup parent from repository -->
+	</parent>
 
-        <!-- Test libs -->
-        <junit_version>4.12</junit_version>
-        <easymock_version>3.4</easymock_version>
-        <jmockit_version>1.33</jmockit_version>
-        <apache_rat_plugin.version>0.12</apache_rat_plugin.version>
-        <maven_compiler_version>3.6.0</maven_compiler_version>
-        <maven_jacoco_version>0.8.1</maven_jacoco_version>
-    </properties>
+	<properties>
+		<main.basedir>${project.basedir}</main.basedir>
+        <commons-lang3-version>3.7</commons-lang3-version>
+		<dubbo-version>2.6.2</dubbo-version>
+		<curator-version>2.12.0</curator-version>
+		<fastjson-version>1.2.46</fastjson-version>
+		<snakeyaml-version>1.22</snakeyaml-version>
+	</properties>
 
-    <modules>
-        <module>dubbo-admin</module>
-        <module>dubbo-monitor-simple</module>
-        <module>dubbo-registry-simple</module>
-    </modules>
-
-    <dependencyManagement>
+	<dependencyManagement>
         <dependencies>
-            <!-- Currently, we still use "dubbo-all" as a dependency. -->
-            <dependency>
-                <groupId>com.alibaba</groupId>
-                <artifactId>dubbo</artifactId>
-                <version>${dubbo_all_version}</version>
-            </dependency>
-            <dependency>
-                <groupId>jfree</groupId>
-                <artifactId>jfreechart</artifactId>
-                <version>${jfreechart_version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-framework-bom</artifactId>
-                <version>${spring_version}</version>
-                <type>pom</type>
-                <scope>import</scope>
-            </dependency>
+			<dependency>
+				<groupId>org.apache.commons</groupId>
+				<artifactId>commons-lang3</artifactId>
+				<version>${commons-lang3-version}</version>
+			</dependency>
+
+			<dependency>
+				<groupId>com.alibaba</groupId>
+				<artifactId>dubbo</artifactId>
+				<version>${dubbo-version}</version>
+			</dependency>
+
+			<dependency>
+				<groupId>org.apache.curator</groupId>
+				<artifactId>curator-framework</artifactId>
+				<version>${curator-version}</version>
+			</dependency>
+			<dependency>
+				<groupId>com.alibaba</groupId>
+				<artifactId>fastjson</artifactId>
+				<version>${fastjson-version}</version>
+			</dependency>
+
+			<dependency>
+				<groupId>org.yaml</groupId>
+				<artifactId>snakeyaml</artifactId>
+				<version>${snakeyaml-version}</version>
+			</dependency>
+
+		</dependencies>
+	</dependencyManagement>
 
-            <!-- Temporarily added for lower version compatibility  -->
-            <dependency>
-                <groupId>com.alibaba</groupId>
-                <artifactId>fastjson</artifactId>
-                <version>${fastjson_version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.curator</groupId>
-                <artifactId>curator-framework</artifactId>
-                <version>${curator_version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.mortbay.jetty</groupId>
-                <artifactId>jetty</artifactId>
-                <version>${jetty_version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>org.mortbay.jetty</groupId>
-                        <artifactId>servlet-api</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>javax.servlet</groupId>
-                <artifactId>javax.servlet-api</artifactId>
-                <version>${servlet_version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-api</artifactId>
-                <version>${slf4j_version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-log4j12</artifactId>
-                <version>${slf4j_version}</version>
-            </dependency>
-            <dependency>
-                <groupId>log4j</groupId>
-                <artifactId>log4j</artifactId>
-                <version>${log4j_version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-lang3</artifactId>
-                <version>${commons_lang3_version}</version>
-            </dependency>
-        </dependencies>
-    </dependencyManagement>
 
-    <!-- Temporarily added for lower version compatibility  -->
-    <dependencies>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>${junit_version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.easymock</groupId>
-            <artifactId>easymock</artifactId>
-            <version>${easymock_version}</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.jmockit</groupId>
-            <artifactId>jmockit</artifactId>
-            <version>${jmockit_version}</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
 
-    <build>
-        <pluginManagement>
-            <plugins>
-                <plugin>
-                    <artifactId>maven-dependency-plugin</artifactId>
-                    <version>2.10</version>
-                </plugin>
-                <plugin>
-                    <artifactId>maven-assembly-plugin</artifactId>
-                    <version>2.6</version>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-compiler-plugin</artifactId>
-                    <version>${maven_compiler_version}</version>
-                    <configuration>
-                        <fork>true</fork>
-                        <source>1.6</source>
-                        <target>1.6</target>
-                        <encoding>UTF-8</encoding>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.jacoco</groupId>
-                    <artifactId>jacoco-maven-plugin</artifactId>
-                    <version>${maven_jacoco_version}</version>
-                    <executions>
-                        <execution>
-                            <id>jacoco-initialize</id>
-                            <goals>
-                                <goal>prepare-agent</goal>
-                            </goals>
-                            <configuration>
-                                <propertyName>jacocoArgLine</propertyName>
-                            </configuration>
-                        </execution>
-                        <execution>
-                            <id>jacoco-site</id>
-                            <phase>package</phase>
-                            <goals>
-                                <goal>report</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.rat</groupId>
-                    <artifactId>apache-rat-plugin</artifactId>
-                    <version>${apache_rat_plugin.version}</version>
-                    <executions>
-                        <execution>
-                            <id>verify.rat</id>
-                            <phase>verify</phase>
-                            <goals>
-                                <goal>check</goal>
-                            </goals>
-                            <configuration>
-                                <excludes>
-                                    <exclude>**/.idea/</exclude>
-                                    <exclude>**/*.iml</exclude>
-                                    <exclude>.git/</exclude>
-                                    <exclude>.gitignore</exclude>
-                                    <exclude>.repository/</exclude>
-                                    <exclude>**/.settings/*</exclude>
-                                    <exclude>**/.classpath</exclude>
-                                    <exclude>**/.project</exclude>
-                                    <exclude>**/target/**</exclude>
-                                    <exclude>**/*.log</exclude>
-                                    <exclude>.codecov.yml</exclude>
-                                    <exclude>.travis.yml</exclude>
-                                    <exclude>README.md</exclude>
-                                </excludes>
-                            </configuration>
-                        </execution>
-                    </executions>
-                </plugin>
-            </plugins>
-        </pluginManagement>
-    </build>
 
-</project>
\ No newline at end of file
+</project>