You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2016/03/28 10:48:09 UTC

[29/50] [abbrv] ignite git commit: IGNITE-2597 Cleanup code. Support legacy agents.

IGNITE-2597 Cleanup code. Support legacy agents.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/3262283f
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/3262283f
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/3262283f

Branch: refs/heads/ignite-2875
Commit: 3262283f38570fd3764a460c2857644c3835d389
Parents: 625dcef
Author: Andrey <an...@gridgain.com>
Authored: Wed Mar 23 08:53:41 2016 +0700
Committer: Andrey <an...@gridgain.com>
Committed: Wed Mar 23 08:53:41 2016 +0700

----------------------------------------------------------------------
 .../control-center-web/src/main/js/.eslintrc    |  5 +--
 .../ui-ace-java/ui-ace-java.directive.js        | 10 ++---
 .../js/app/directives/ui-ace-tabs.directive.js  |  4 +-
 .../ui-ace-xml/ui-ace-xml.directive.js          | 10 ++---
 .../src/main/js/app/filters/hasPojo.filter.js   | 10 +----
 .../control-center-web/src/main/js/app/index.js |  3 +-
 .../app/modules/JavaTypes/JavaTypes.provider.js |  4 +-
 .../src/main/js/app/modules/ace.module.js       | 10 ++---
 .../app/modules/branding/features.directive.js  |  2 +-
 .../js/app/modules/branding/footer.directive.js |  2 +-
 .../modules/branding/header-title.directive.js  |  2 +-
 .../js/app/modules/dialog/dialog.directive.js   |  2 +-
 .../js/app/modules/form/field/down.directive.js |  2 +-
 .../app/modules/form/field/tooltip.directive.js |  2 +-
 .../js/app/modules/form/field/up.directive.js   |  2 +-
 .../js/app/modules/form/group/add.directive.js  |  2 +-
 .../app/modules/form/group/tooltip.directive.js |  2 +-
 .../app/modules/form/panel/chevron.directive.js |  2 +-
 .../app/modules/form/panel/revert.directive.js  | 16 ++++----
 .../configuration/summary/summary.resource.js   |  4 +-
 .../js/app/services/AgentMonitor.service.js     |  7 +++-
 .../src/main/js/app/services/cleanup.service.js | 43 +++++---------------
 .../control-center-web/src/main/js/config.js    | 39 ++++++++----------
 .../main/js/controllers/caches-controller.js    |  4 +-
 .../main/js/controllers/clusters-controller.js  |  4 +-
 .../src/main/js/controllers/common-module.js    |  6 +--
 .../main/js/controllers/domains-controller.js   |  3 +-
 .../src/main/js/controllers/sql-controller.js   |  6 +--
 .../src/main/js/gulpfile.js/tasks/jade.js       |  4 +-
 .../control-center-web/src/main/js/package.json | 38 ++++++++---------
 modules/control-center-web/src/main/js/serve.js | 12 ++++++
 .../src/main/js/serve/agent.js                  | 15 ++++++-
 .../src/main/js/serve/settings.js               |  3 +-
 33 files changed, 130 insertions(+), 150 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/.eslintrc
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/.eslintrc b/modules/control-center-web/src/main/js/.eslintrc
index 3e543f4..0a1fed1 100644
--- a/modules/control-center-web/src/main/js/.eslintrc
+++ b/modules/control-center-web/src/main/js/.eslintrc
@@ -92,7 +92,6 @@ rules:
     no-else-return: 2
     no-empty: 2
     no-empty-character-class: 2
-    no-empty-label: 2
     no-eq-null: 2
     no-eval: 2
     no-ex-assign: 2
@@ -167,7 +166,6 @@ rules:
     no-var: 2
     no-warning-comments: 0
     no-with: 2
-    new-parens: 2
     newline-after-var: 0
     object-shorthand: [2, "always"]
     one-var: [2, "never"]
@@ -182,12 +180,11 @@ rules:
     semi: [2, "always"]
     semi-spacing: [2, {"before": false, "after": true}]
     sort-vars: 0
-    space-after-keywords: [2, "always"]
+    keyword-spacing: 2
     space-before-blocks: [2, "always"]
     space-before-function-paren: [2, "never"]
     space-in-parens: 0
     space-infix-ops: 2
-    space-return-throw-case: 2
     space-unary-ops: [2, { "words": true, "nonwords": false }]
     spaced-comment: [1, "always"]
     use-isnan: 2

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.directive.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.directive.js
index 77cb774..948f82c 100644
--- a/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.directive.js
+++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-java/ui-ace-java.directive.js
@@ -50,10 +50,8 @@ export default ['igniteUiAceJava', ['GeneratorJava', (generator) => {
             switch (method) {
                 case 'clusterCaches':
                     ctrl.generator = (cluster) => {
-                        let caches;
-
-                        caches = _.reduce(scope.detail, (acc, cache) => {
-                            if (_.contains(cluster.caches, cache.value))
+                        const caches = _.reduce(scope.detail, (acc, cache) => {
+                            if (_.includes(cluster.caches, cache.value))
                                 acc.push(cache.cache);
 
                             return acc;
@@ -67,7 +65,7 @@ export default ['igniteUiAceJava', ['GeneratorJava', (generator) => {
                 case 'igfss':
                     ctrl.generator = (cluster) => {
                         const igfss = _.reduce(scope.detail, (acc, igfs) => {
-                            if (_.contains(cluster.igfss, igfs.value))
+                            if (_.includes(cluster.igfss, igfs.value))
                                 acc.push(igfs.igfs);
 
                             return acc;
@@ -81,7 +79,7 @@ export default ['igniteUiAceJava', ['GeneratorJava', (generator) => {
                 case 'cacheStore':
                     ctrl.generator = (cache) => {
                         const domains = _.reduce(scope.detail, (acc, domain) => {
-                            if (_.contains(cache.domains, domain.value))
+                            if (_.includes(cache.domains, domain.value))
                                 acc.push(domain.meta);
 
                             return acc;

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/directives/ui-ace-tabs.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-tabs.directive.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-tabs.directive.js
index dd13d83..a9649c8 100644
--- a/modules/control-center-web/src/main/js/app/directives/ui-ace-tabs.directive.js
+++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-tabs.directive.js
@@ -16,10 +16,8 @@
  */
 
 export default ['igniteUiAceTabs', [() => {
-    const controller = () => {};
-
     return {
         restrict: 'AE',
-        controller
+        controller: _.noop
     };
 }]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.directive.js b/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.directive.js
index 215c1b9..79787a2 100644
--- a/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.directive.js
+++ b/modules/control-center-web/src/main/js/app/directives/ui-ace-xml/ui-ace-xml.directive.js
@@ -50,10 +50,8 @@ export default ['igniteUiAceXml', ['GeneratorXml', (generator) => {
             switch (method) {
                 case 'clusterCaches':
                     ctrl.generator = (cluster) => {
-                        let caches;
-
-                        caches = _.reduce(scope.detail, (acc, cache) => {
-                            if (_.contains(cluster.caches, cache.value))
+                        const caches = _.reduce(scope.detail, (acc, cache) => {
+                            if (_.includes(cluster.caches, cache.value))
                                 acc.push(cache.cache);
 
                             return acc;
@@ -67,7 +65,7 @@ export default ['igniteUiAceXml', ['GeneratorXml', (generator) => {
                 case 'igfss':
                     ctrl.generator = (cluster) => {
                         const igfss = _.reduce(scope.detail, (acc, igfs) => {
-                            if (_.contains(cluster.igfss, igfs.value))
+                            if (_.includes(cluster.igfss, igfs.value))
                                 acc.push(igfs.igfs);
 
                             return acc;
@@ -81,7 +79,7 @@ export default ['igniteUiAceXml', ['GeneratorXml', (generator) => {
                 case 'cacheStore':
                     ctrl.generator = (cache) => {
                         const domains = _.reduce(scope.detail, (acc, domain) => {
-                            if (_.contains(cache.domains, domain.value))
+                            if (_.includes(cache.domains, domain.value))
                                 acc.push(domain.meta);
 
                             return acc;

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/filters/hasPojo.filter.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/filters/hasPojo.filter.js b/modules/control-center-web/src/main/js/app/filters/hasPojo.filter.js
index db47585..3ccbf22 100644
--- a/modules/control-center-web/src/main/js/app/filters/hasPojo.filter.js
+++ b/modules/control-center-web/src/main/js/app/filters/hasPojo.filter.js
@@ -15,12 +15,4 @@
  * limitations under the License.
  */
 
-export default ['hasPojo', [() => {
-    const filter = (cache) => {
-        return cache.domains && cache.domains.length;
-    };
-
-    return ({caches} = {}) => {
-        return caches && _.chain(caches).filter(filter).first().value();
-    };
-}]];
+export default ['hasPojo', [() => ({caches}) => _.find(caches, (cache) => cache.domains && cache.domains.length)]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/index.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/index.js b/modules/control-center-web/src/main/js/app/index.js
index 60a3a8b..d5d480e 100644
--- a/modules/control-center-web/src/main/js/app/index.js
+++ b/modules/control-center-web/src/main/js/app/index.js
@@ -15,7 +15,6 @@
  * limitations under the License.
  */
 
-import jQuery from 'jquery';
 import _ from 'lodash';
 import ace from 'ace';
 import angular from 'angular';
@@ -200,6 +199,6 @@ angular
 }])
 .run(['$rootScope', ($root) => {
     $root.$on('$stateChangeStart', () => {
-        _.each(angular.element('.modal'), (m) => angular.element(m).scope().$hide());
+        _.forEach(angular.element('.modal'), (m) => angular.element(m).scope().$hide());
     });
 }]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/JavaTypes/JavaTypes.provider.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/JavaTypes/JavaTypes.provider.js b/modules/control-center-web/src/main/js/app/modules/JavaTypes/JavaTypes.provider.js
index 7b87ba7..eaa3341 100644
--- a/modules/control-center-web/src/main/js/app/modules/JavaTypes/JavaTypes.provider.js
+++ b/modules/control-center-web/src/main/js/app/modules/JavaTypes/JavaTypes.provider.js
@@ -35,7 +35,7 @@ angular
                  * @returns boolean 'true' if given class name non a Java built-in type.
                  */
                 nonBuiltInClass(cls) {
-                    return !(_.contains(JAVA_CLASSES, cls) || _.contains(JAVA_FULLNAME_CLASSES, cls));
+                    return !(_.includes(JAVA_CLASSES, cls) || _.includes(JAVA_FULLNAME_CLASSES, cls));
                 },
                 /**
                  * @param value text to check.
@@ -60,7 +60,7 @@ angular
                  * @returns boolean 'true' if given text non Java keyword.
                  */
                 isKeywords(value) {
-                    return _.contains(JAVA_KEYWORDS, value);
+                    return _.includes(JAVA_KEYWORDS, value);
                 }
             };
         }];

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/ace.module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/ace.module.js b/modules/control-center-web/src/main/js/app/modules/ace.module.js
index 475cfa0..8a9024e 100644
--- a/modules/control-center-web/src/main/js/app/modules/ace.module.js
+++ b/modules/control-center-web/src/main/js/app/modules/ace.module.js
@@ -50,8 +50,7 @@ angular
             }
 
             // Ace requires loading.
-            if (angular.isDefined(opts.require))
-                opts.require.forEach((n) => window.ace.require(n));
+            _.forEach(opts.require, (n) => window.ace.require(n));
 
             // Boolean options.
             if (angular.isDefined(opts.showGutter))
@@ -80,7 +79,7 @@ angular
                         win: 'Ctrl-F',
                         mac: 'Command-F'
                     },
-                    exec: () => false,
+                    exec: _.constant(false),
                     readOnly: true
                 }]);
             }
@@ -126,10 +125,7 @@ angular
             }
 
             // onLoad callbacks.
-            angular.forEach(opts.callbacks, (cb) => {
-                if (angular.isFunction(cb))
-                    cb(acee);
-            });
+            _.forEach(opts.callbacks, (cb) => angular.isFunction(cb) && cb(acee));
         };
 
         return {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/branding/features.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/features.directive.js b/modules/control-center-web/src/main/js/app/modules/branding/features.directive.js
index 0477be6..9226a3f 100644
--- a/modules/control-center-web/src/main/js/app/modules/branding/features.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/branding/features.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const template = `<div class='features' ng-bind-html='features.html'></div>`;
+const template = '<div class="features" ng-bind-html="features.html"></div>';
 
 export default ['igniteFeatures', ['IgniteBranding', (branding) => {
     function controller() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/branding/footer.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/footer.directive.js b/modules/control-center-web/src/main/js/app/modules/branding/footer.directive.js
index 1312f98..f0b1994 100644
--- a/modules/control-center-web/src/main/js/app/modules/branding/footer.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/branding/footer.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const template = `<div class='footer' ng-bind-html='footer.html'></div>`;
+const template = '<div class="footer" ng-bind-html="footer.html"></div>';
 
 export default ['igniteFooter', ['IgniteBranding', (branding) => {
     function controller() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/branding/header-title.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/branding/header-title.directive.js b/modules/control-center-web/src/main/js/app/modules/branding/header-title.directive.js
index 7a78175..d560e0a 100644
--- a/modules/control-center-web/src/main/js/app/modules/branding/header-title.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/branding/header-title.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const template = `<h1 class='title'>{{::title.text}}</h1>`;
+const template = '<h1 class="title">{{::title.text}}</h1>';
 
 export default ['igniteHeaderTitle', ['IgniteBranding', (branding) => {
     function controller() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/dialog/dialog.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/dialog/dialog.directive.js b/modules/control-center-web/src/main/js/app/modules/dialog/dialog.directive.js
index e712219..7aab10f 100644
--- a/modules/control-center-web/src/main/js/app/modules/dialog/dialog.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/dialog/dialog.directive.js
@@ -17,7 +17,7 @@
 
 import controller from './dialog.controller';
 
-const template = `<a ng-click='ctrl.show()'><span ng-transclude=''></span></a>`;
+const template = '<a ng-click="ctrl.show()"><span ng-transclude=""></span></a>';
 
 export default ['igniteDialog', [() => {
     return {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/form/field/down.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/down.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/down.directive.js
index c73a5e0..91be945 100644
--- a/modules/control-center-web/src/main/js/app/modules/form/field/down.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/down.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const template = `<i class='tipField fa fa-arrow-down ng-scope' ng-click='down()'></i>`;
+const template = '<i class="tipField fa fa-arrow-down ng-scope" ng-click="down()"></i>';
 
 export default ['igniteFormFieldDown', ['$tooltip', ($tooltip) => {
     const link = (scope, $element) => {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/form/field/tooltip.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/tooltip.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/tooltip.directive.js
index e24df9c..5005280 100644
--- a/modules/control-center-web/src/main/js/app/modules/form/field/tooltip.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/tooltip.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const template = `<i class='tipField fa fa-question-circle'></i>`;
+const template = '<i class="tipField fa fa-question-circle"></i>';
 
 export default ['igniteFormFieldTooltip', ['$tooltip', ($tooltip) => {
     const link = ($scope, $element, $attrs, [form, field], $transclude) => {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/form/field/up.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/field/up.directive.js b/modules/control-center-web/src/main/js/app/modules/form/field/up.directive.js
index b8d7ac6..d31bdc5 100644
--- a/modules/control-center-web/src/main/js/app/modules/form/field/up.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/form/field/up.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const template = `<i class='tipField fa fa-arrow-up ng-scope' ng-click='up()'></i>`;
+const template = '<i class="tipField fa fa-arrow-up ng-scope" ng-click="up()"></i>';
 
 export default ['igniteFormFieldUp', ['$tooltip', ($tooltip) => {
     const link = (scope, $element) => {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/form/group/add.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/group/add.directive.js b/modules/control-center-web/src/main/js/app/modules/form/group/add.directive.js
index 382790d..98560b5 100644
--- a/modules/control-center-web/src/main/js/app/modules/form/group/add.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/form/group/add.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const template = `<i class='group-legend-btn fa fa-plus'></i>`;
+const template = '<i class="group-legend-btn fa fa-plus"></i>';
 
 export default ['igniteFormGroupAdd', ['$tooltip', ($tooltip) => {
     const link = ($scope, $element, $attrs, $ctrls, $transclude) => {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/form/group/tooltip.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/group/tooltip.directive.js b/modules/control-center-web/src/main/js/app/modules/form/group/tooltip.directive.js
index fa87ba7..2202e7b 100644
--- a/modules/control-center-web/src/main/js/app/modules/form/group/tooltip.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/form/group/tooltip.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const template = `<i class='group-legend-btn fa fa-question-circle'></i>`;
+const template = '<i class="group-legend-btn fa fa-question-circle"></i>';
 
 export default ['igniteFormGroupTooltip', ['$tooltip', ($tooltip) => {
     const link = ($scope, $element, $attrs, $ctrls, $transclude) => {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/form/panel/chevron.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/panel/chevron.directive.js b/modules/control-center-web/src/main/js/app/modules/form/panel/chevron.directive.js
index 9f7e1d0..6af560b 100644
--- a/modules/control-center-web/src/main/js/app/modules/form/panel/chevron.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/form/panel/chevron.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const template = `<i class='fa' ng-class='isOpen ? "fa-chevron-circle-down" : "fa-chevron-circle-right"'></i>`;
+const template = `<i class='fa' ng-class='isOpen ? "fa-chevron-circle-down" : "fa-chevron-circle-right"'></i>`; // eslint-disable-line quotes
 
 export default ['igniteFormPanelChevron', [() => {
     const controller = [() => {}];

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/form/panel/revert.directive.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/form/panel/revert.directive.js b/modules/control-center-web/src/main/js/app/modules/form/panel/revert.directive.js
index 874b466..c0f07b9 100644
--- a/modules/control-center-web/src/main/js/app/modules/form/panel/revert.directive.js
+++ b/modules/control-center-web/src/main/js/app/modules/form/panel/revert.directive.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-const template = `<i ng-show='form.$dirty' class='fa fa-undo pull-right' ng-click='revert($event)'></i>`;
+const template = '<i ng-show="form.$dirty" class="fa fa-undo pull-right" ng-click="revert($event)"></i>';
 
 export default ['igniteFormRevert', ['$tooltip', ($tooltip) => {
     const link = (scope, $element, $attrs, [form]) => {
@@ -26,13 +26,15 @@ export default ['igniteFormRevert', ['$tooltip', ($tooltip) => {
         scope.revert = (e) => {
             e.stopPropagation();
 
-            for (const name in form.$defaults) {
-                if ({}.hasOwnProperty.call(form.$defaults, name) && form[name]) {
-                    form[name].$setViewValue(form.$defaults[name]);
-                    form[name].$setPristine();
-                    form[name].$render();
+            _.forOwn(form.$defaults, (value, name) => {
+                const field = form[name];
+
+                if (field) {
+                    field.$setViewValue(value);
+                    field.$setPristine();
+                    field.$render();
                 }
-            }
+            });
 
             form.$setPristine();
         };

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.resource.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.resource.js b/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.resource.js
index 5fd8017..0ef53ac 100644
--- a/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.resource.js
+++ b/modules/control-center-web/src/main/js/app/modules/states/configuration/summary/summary.resource.js
@@ -28,8 +28,8 @@ export default ['ConfigurationSummaryResource', ['$q', '$http', ($q, $http) => {
                         return {};
 
                     _.forEach(clusters, (cluster) => {
-                        cluster.igfss = _.filter(igfss, ({_id}) => _.contains(cluster.igfss, _id));
-                        cluster.caches = _.filter(caches, ({_id}) => _.contains(cluster.caches, _id));
+                        cluster.igfss = _.filter(igfss, ({_id}) => _.includes(cluster.igfss, _id));
+                        cluster.caches = _.filter(caches, ({_id}) => _.includes(cluster.caches, _id));
                     });
 
                     return {clusters};

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/services/AgentMonitor.service.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/services/AgentMonitor.service.js b/modules/control-center-web/src/main/js/app/services/AgentMonitor.service.js
index 1b661a3..364e1db 100644
--- a/modules/control-center-web/src/main/js/app/services/AgentMonitor.service.js
+++ b/modules/control-center-web/src/main/js/app/services/AgentMonitor.service.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import io from 'socket.io-client';
+import io from 'socket.io-client'; // eslint-disable-line no-unused-vars
 
 class IgniteAgentMonitor {
     constructor(socketFactory, $root, $q, $state, $modal, $common) {
@@ -48,7 +48,10 @@ class IgniteAgentMonitor {
          * Close dialog and go by specified link.
          */
         this._scope.back = () => {
-            $state.go(this._scope.backState);
+            this._downloadAgentModal.hide();
+
+            if (this._scope.backState)
+                this._scope.$$postDigest(() => $state.go(this._scope.backState));
         };
 
         this._scope.downloadAgent = () => {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/app/services/cleanup.service.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/app/services/cleanup.service.js b/modules/control-center-web/src/main/js/app/services/cleanup.service.js
index c50bfe0..f92631f 100644
--- a/modules/control-center-web/src/main/js/app/services/cleanup.service.js
+++ b/modules/control-center-web/src/main/js/app/services/cleanup.service.js
@@ -15,45 +15,24 @@
  * limitations under the License.
  */
 
-import angular from 'angular';
-
-const isArray = angular.isArray;
-const isDefined = angular.isDefined;
-const isNumber = angular.isNumber;
-const isObject = angular.isObject;
-const isString = angular.isString;
-const isUndefined = angular.isUndefined;
-const isBoolean = (val) => typeof val === 'boolean';
-
 export default ['$cleanup', () => {
     const cleanup = (original, dist) => {
-        if (isUndefined(original))
+        if (_.isUndefined(original))
             return dist;
 
-        if (isObject(original)) {
-            let key;
-
-            for (key in original) {
-                if (original.hasOwnProperty(key)) {
-                    const attr = cleanup(original[key]);
+        if (_.isObject(original)) {
+            _.forOwn(original, (value, key) => {
+                const attr = cleanup(value);
 
-                    if (isDefined(attr)) {
-                        dist = dist || {};
-                        dist[key] = attr;
-                    }
+                if (!_.isNil(attr)) {
+                    dist = dist || {};
+                    dist[key] = attr;
                 }
-            }
-        } else if ((isString(original) && original.length) || isNumber(original) || isBoolean(original))
+            });
+        } else if ((_.isString(original) && original.length) || _.isNumber(original) || _.isBoolean(original))
             dist = original;
-        else if (isArray(original) && original.length) {
-            dist = [];
-
-            let i = 0;
-            const l = original.length;
-
-            for (; i < l; i++)
-                dist[i] = cleanup(original[i], {});
-        }
+        else if (_.isArray(original) && original.length)
+            dist = _.map(original, (value) => cleanup(value, {}));
 
         return dist;
     };

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/config.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/config.js b/modules/control-center-web/src/main/js/config.js
index a54b40f..5837fa9 100644
--- a/modules/control-center-web/src/main/js/config.js
+++ b/modules/control-center-web/src/main/js/config.js
@@ -17,16 +17,16 @@ System.config({
     "Blob": "github:eligrey/Blob.js@master",
     "FileSaver": "github:eligrey/FileSaver.js@master",
     "ace": "github:ajaxorg/ace-builds@1.2.3",
-    "angular": "github:angular/bower-angular@1.5.1",
+    "angular": "github:angular/bower-angular@1.5.2",
     "angular-ag-grid": "github:ceolter/ag-grid@2.3.5",
-    "angular-animate": "github:angular/bower-angular-animate@1.5.1",
+    "angular-animate": "github:angular/bower-angular-animate@1.5.2",
     "angular-drag-and-drop-lists": "github:marceljuenemann/angular-drag-and-drop-lists@1.4.0",
     "angular-grid": "github:ceolter/ag-grid@2.3.5",
     "angular-loading": "github:darthwade/angular-loading@0.1.4",
     "angular-motion": "github:mgcrea/angular-motion@0.4.3",
     "angular-nvd3": "github:krispo/angular-nvd3@1.0.5",
     "angular-retina": "github:jrief/angular-retina@0.3.8",
-    "angular-sanitize": "github:angular/bower-angular-sanitize@1.5.1",
+    "angular-sanitize": "github:angular/bower-angular-sanitize@1.5.2",
     "angular-smart-table": "github:lorenzofox3/Smart-Table@2.1.7",
     "angular-socket-io": "github:btford/angular-socket-io@0.7.0",
     "angular-strap": "github:mgcrea/angular-strap@2.3.7",
@@ -36,8 +36,8 @@ System.config({
     "angular-ui-router": "github:angular-ui/ui-router@0.2.18",
     "angular-ui-router-metatags": "github:tinusn/ui-router-metatags@1.0.3",
     "angular-ui-router-title": "github:nonplus/angular-ui-router-title@0.0.4",
-    "babel": "npm:babel-core@5.8.35",
-    "babel-runtime": "npm:babel-runtime@5.8.35",
+    "babel": "npm:babel-core@5.8.38",
+    "babel-runtime": "npm:babel-runtime@5.8.38",
     "blob": "github:eligrey/Blob.js@master",
     "bootstrap": "github:twbs/bootstrap@3.3.6",
     "bootstrap-carousel": "github:twbs/bootstrap@3.3.6",
@@ -51,7 +51,7 @@ System.config({
     "jquery": "github:components/jquery@2.2.1",
     "json": "github:systemjs/plugin-json@0.1.0",
     "jszip": "github:Stuk/jszip@2.5.0",
-    "lodash": "npm:lodash@3.10.1",
+    "lodash": "github:lodash/lodash@4.6.1",
     "nvd3": "npm:nvd3@1.8.1",
     "pdfmake": "github:bpampuch/pdfmake@0.1.20",
     "query-command-supported": "github:zenorocha/document.queryCommandSupported@1.0.0",
@@ -65,15 +65,15 @@ System.config({
       "ace": "github:ajaxorg/ace-builds@1.2.3"
     },
     "github:angular-ui/ui-router@0.2.18": {
-      "angular": "github:angular/bower-angular@1.5.1"
+      "angular": "github:angular/bower-angular@1.5.2"
     },
-    "github:angular/bower-angular-animate@1.5.1": {
-      "angular": "github:angular/bower-angular@1.5.1"
+    "github:angular/bower-angular-animate@1.5.2": {
+      "angular": "github:angular/bower-angular@1.5.2"
     },
-    "github:angular/bower-angular-sanitize@1.5.1": {
-      "angular": "github:angular/bower-angular@1.5.1"
+    "github:angular/bower-angular-sanitize@1.5.2": {
+      "angular": "github:angular/bower-angular@1.5.2"
     },
-    "github:angular/bower-angular@1.5.1": {
+    "github:angular/bower-angular@1.5.2": {
       "jquery": "github:components/jquery@2.2.1"
     },
     "github:btford/angular-socket-io@0.7.0": {
@@ -142,20 +142,20 @@ System.config({
       "nvd3": "npm:nvd3@1.8.1"
     },
     "github:mgcrea/angular-motion@0.4.3": {
-      "angular": "github:angular/bower-angular@1.5.1",
+      "angular": "github:angular/bower-angular@1.5.2",
       "css": "github:systemjs/plugin-css@0.1.20"
     },
     "github:mgcrea/angular-strap@2.3.7": {
-      "angular": "github:angular/bower-angular@1.5.1",
-      "angular-animate": "github:angular/bower-angular-animate@1.5.1",
+      "angular": "github:angular/bower-angular@1.5.2",
+      "angular-animate": "github:angular/bower-angular-animate@1.5.2",
       "angular-motion": "github:mgcrea/angular-motion@0.4.3",
-      "angular-sanitize": "github:angular/bower-angular-sanitize@1.5.1"
+      "angular-sanitize": "github:angular/bower-angular-sanitize@1.5.2"
     },
     "github:twbs/bootstrap@3.3.6": {
       "jquery": "github:components/jquery@2.2.1"
     },
     "github:wix/angular-tree-control@0.2.23": {
-      "angular": "github:angular/bower-angular@1.5.1"
+      "angular": "github:angular/bower-angular@1.5.2"
     },
     "npm:acorn-globals@1.0.9": {
       "acorn": "npm:acorn@2.7.0"
@@ -192,7 +192,7 @@ System.config({
     "npm:async@0.2.10": {
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
-    "npm:babel-runtime@5.8.35": {
+    "npm:babel-runtime@5.8.38": {
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
     "npm:buffer@3.6.0": {
@@ -302,9 +302,6 @@ System.config({
     "npm:lazy-cache@1.0.3": {
       "process": "github:jspm/nodelibs-process@0.1.2"
     },
-    "npm:lodash@3.10.1": {
-      "process": "github:jspm/nodelibs-process@0.1.2"
-    },
     "npm:mkdirp@0.5.1": {
       "fs": "github:jspm/nodelibs-fs@0.1.2",
       "minimist": "npm:minimist@0.0.8",

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/caches-controller.js b/modules/control-center-web/src/main/js/controllers/caches-controller.js
index 055417b..3b9c9c6 100644
--- a/modules/control-center-web/src/main/js/controllers/caches-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/caches-controller.js
@@ -71,7 +71,7 @@ consoleModule.controller('cachesController', [
 
         function cacheDomains(item) {
             return _.reduce($scope.domains, function (memo, domain) {
-                if (item && _.contains(item.domains, domain.value)) {
+                if (item && _.includes(item.domains, domain.value)) {
                     memo.push(domain.meta);
                 }
 
@@ -214,7 +214,7 @@ consoleModule.controller('cachesController', [
 
         function checkDataSources() {
             var clusters = _.filter($scope.clusters, function (cluster) {
-                return _.contains($scope.backupItem.clusters, cluster.value);
+                return _.includes($scope.backupItem.clusters, cluster.value);
             });
 
             var checkRes = { checked: true };

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/controllers/clusters-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/clusters-controller.js b/modules/control-center-web/src/main/js/controllers/clusters-controller.js
index ce133cf..4df0871 100644
--- a/modules/control-center-web/src/main/js/controllers/clusters-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/clusters-controller.js
@@ -94,7 +94,7 @@ consoleModule.controller('clustersController', [
 
         function clusterCaches(item) {
             return _.reduce($scope.caches, function (memo, cache) {
-                if (item && _.contains(item.caches, cache.value)) {
+                if (item && _.includes(item.caches, cache.value)) {
                     memo.push(cache.cache);
                 }
 
@@ -277,7 +277,7 @@ consoleModule.controller('clustersController', [
             var caches = _.filter(_.map($scope.caches, function (scopeCache) {
                 return scopeCache.cache;
             }), function (cache) {
-                return _.contains($scope.backupItem.caches, cache._id);
+                return _.includes($scope.backupItem.caches, cache._id);
             });
 
             var checkRes = $common.checkCachesDataSources(caches);

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/controllers/common-module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/common-module.js b/modules/control-center-web/src/main/js/controllers/common-module.js
index d4f692d..151d15a 100644
--- a/modules/control-center-web/src/main/js/controllers/common-module.js
+++ b/modules/control-center-web/src/main/js/controllers/common-module.js
@@ -187,7 +187,7 @@ consoleModule.service('$common', [
             if (isEmptyString(cls))
                 return false;
 
-            return _.contains(javaBuiltInClasses, cls) || _.contains(javaBuiltInFullNameClasses, cls);
+            return _.includes(javaBuiltInClasses, cls) || _.includes(javaBuiltInFullNameClasses, cls);
         }
 
         var SUPPORTED_JDBC_TYPES = [
@@ -272,7 +272,7 @@ consoleModule.service('$common', [
             if (isEmptyString(ident))
                 return showPopoverMessage(panels, panelId, elemId, msg + ' is invalid!');
 
-            if (_.contains(JAVA_KEYWORDS, ident))
+            if (_.includes(JAVA_KEYWORDS, ident))
                 return showPopoverMessage(panels, panelId, elemId, msg + ' could not contains reserved java keyword: "' + ident + '"!');
 
             if (!VALID_JAVA_IDENTIFIER.test(ident))
@@ -585,7 +585,7 @@ consoleModule.service('$common', [
 
                     if (!activePanels || activePanels.length < 1)
                         ui.activePanels = [idx];
-                    else if (!_.contains(activePanels, idx)) {
+                    else if (!_.includes(activePanels, idx)) {
                         var newActivePanels = angular.copy(activePanels);
 
                         newActivePanels.push(idx);

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/controllers/domains-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/domains-controller.js b/modules/control-center-web/src/main/js/controllers/domains-controller.js
index 0b88662..d90f2a7 100644
--- a/modules/control-center-web/src/main/js/controllers/domains-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/domains-controller.js
@@ -456,7 +456,6 @@ consoleModule.controller('domainsController', [
                 $scope.importDomain.loadingOptions = LOADING_JDBC_DRIVERS;
 
                 IgniteAgentMonitor.startWatch({
-                        state: 'base.configuration.domains',
                         text: 'Back to Domain models',
                         goal: 'import domain model from database schema'
                     })
@@ -936,7 +935,7 @@ consoleModule.controller('domainsController', [
 
                         newDomain.caches = [cacheId];
 
-                        if (!_.contains(checkedCaches, cacheId)) {
+                        if (!_.includes(checkedCaches, cacheId)) {
                             var cache = _.find($scope.caches, {value: cacheId}).cache;
 
                             var change = $common.autoCacheStoreConfiguration(cache, [newDomain]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/controllers/sql-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/sql-controller.js b/modules/control-center-web/src/main/js/controllers/sql-controller.js
index 35c0126..abae869 100644
--- a/modules/control-center-web/src/main/js/controllers/sql-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/sql-controller.js
@@ -151,7 +151,7 @@ consoleModule.controller('sqlController', [
             var idx = _.findIndex($scope.notebook.paragraphs, {id: paragraphId});
 
             if (idx >= 0) {
-                if (!_.contains($scope.notebook.expandedParagraphs, idx))
+                if (!_.includes($scope.notebook.expandedParagraphs, idx))
                     $scope.notebook.expandedParagraphs.push(idx);
 
                 setTimeout(function () {
@@ -480,13 +480,13 @@ consoleModule.controller('sqlController', [
             'java.lang.Float', 'java.lang.Integer', 'java.lang.Long', 'java.lang.Short'];
 
         var _numberType = function(cls) {
-            return _.contains(_numberClasses, cls);
+            return _.includes(_numberClasses, cls);
         };
 
         var _intClasses = ['java.lang.Byte', 'java.lang.Integer', 'java.lang.Long', 'java.lang.Short'];
 
         function _intType(cls) {
-            return _.contains(_intClasses, cls);
+            return _.includes(_intClasses, cls);
         }
 
         var _rebuildColumns = function (paragraph) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/gulpfile.js/tasks/jade.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/gulpfile.js/tasks/jade.js b/modules/control-center-web/src/main/js/gulpfile.js/tasks/jade.js
index 9082093..58a9bf5 100644
--- a/modules/control-center-web/src/main/js/gulpfile.js/tasks/jade.js
+++ b/modules/control-center-web/src/main/js/gulpfile.js/tasks/jade.js
@@ -18,7 +18,6 @@
 var gulp = require('gulp');
 var gulpJade = require('gulp-jade');
 var sequence = require('gulp-sequence');
-var connect = require('gulp-connect');
 
 var igniteModules = process.env.IGNITE_MODULES || './ignite_modules';
 
@@ -47,8 +46,7 @@ gulp.task('jade:source', function (cb) {
 gulp.task('jade:ignite_modules', function (cb) {
     return gulp.src(igniteModulePaths)
         .pipe(gulpJade(jadeOptions))
-        .pipe(gulp.dest('./build/ignite_modules'))
-        .pipe(connect.reload());
+        .pipe(gulp.dest('./build/ignite_modules'));
 });
 
 gulp.task('jade:watch', function (cb) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/package.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/package.json b/modules/control-center-web/src/main/js/package.json
index 02cdcd9..a160801 100644
--- a/modules/control-center-web/src/main/js/package.json
+++ b/modules/control-center-web/src/main/js/package.json
@@ -22,11 +22,11 @@
   },
   "dependencies": {
     "async": "1.5.2",
-    "babel-eslint": "^4.1.6",
-    "body-parser": "~1.14.1",
+    "babel-eslint": "^6.0.0-beta.6",
+    "body-parser": "^1.15.0",
     "bootstrap-sass": "^3.3.6",
-    "connect-modrewrite": "^0.8.2",
-    "connect-mongo": "^0.8.1",
+    "connect-modrewrite": "^0.9.0",
+    "connect-mongo": "^1.1.0",
     "cookie-parser": "~1.4.0",
     "debug": "~2.2.0",
     "ejs": "^2.3.4",
@@ -38,10 +38,10 @@
     "gulp": "^3.9.0",
     "gulp-cached": "^1.1.0",
     "gulp-concat": "^2.6.0",
-    "gulp-connect": "^2.2.0",
+    "gulp-connect": "^3.2.0",
     "gulp-environments": "^0.1.1",
-    "gulp-eslint": "^1.1.1",
-    "gulp-inject": "^3.0.0",
+    "gulp-eslint": "^2.0.0",
+    "gulp-inject": "^4.0.0",
     "gulp-jade": "^1.1.0",
     "gulp-rimraf": "^0.2.0",
     "gulp-sass": "^2.1.0",
@@ -49,24 +49,24 @@
     "gulp-util": "^3.0.7",
     "jade": "~1.11.0",
     "jszip": "^2.5.0",
-    "lodash": "3.10.1",
-    "mongoose": "^4.2.8",
-    "mongoose-deep-populate": "2.0.3",
+    "lodash": "^4.0.0",
+    "mongoose": "^4.4.8",
+    "mongoose-deep-populate": "^3.0.0",
     "nconf": "^0.8.2",
-    "nodemailer": "1.10.0",
+    "nodemailer": "^2.3.0",
     "passport": "^0.3.2",
     "passport-local": "^1.0.0",
-    "passport-local-mongoose": "3.1.0",
+    "passport-local-mongoose": "^4.0.0",
     "passport.socketio": "^3.6.1",
     "require-dir": "^0.3.0",
-    "serve-favicon": "~2.3.0",
-    "socket.io": "^1.4.5"
+    "socket.io": "^1.4.5",
+    "ws": "^0.8.0"
   },
   "devDependencies": {
-    "jspm": "^0.16.15",
-    "mocha": "~2.3.3",
-    "morgan": "~1.6.1",
-    "should": "~7.1.1",
+    "jspm": "^0.16.31",
+    "mocha": "^2.4.5",
+    "morgan": "^1.6.1",
+    "should": "^8.2.2",
     "supertest": "^1.1.0"
   },
   "jspm": {
@@ -96,7 +96,7 @@
       "jquery": "github:components/jquery@^2.1.4",
       "json": "github:systemjs/plugin-json@^0.1.0",
       "jszip": "github:Stuk/jszip@^2.5.0",
-      "lodash": "npm:lodash@^3.10.1",
+      "lodash": "github:lodash/lodash@^4.2.6",
       "pdfmake": "github:bpampuch/pdfmake@^0.1.20",
       "query-command-supported": "github:zenorocha/document.queryCommandSupported@^1.0.0",
       "socket.io-client": "github:socketio/socket.io-client@1.4.5",

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/serve.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/serve.js b/modules/control-center-web/src/main/js/serve.js
index cba74d3..891855c 100644
--- a/modules/control-center-web/src/main/js/serve.js
+++ b/modules/control-center-web/src/main/js/serve.js
@@ -84,6 +84,18 @@ Promise.all([fireUp('settings'), fireUp('app'), fireUp('agent-manager'), fireUp(
         app.listen(server);
         browserMgr.attach(server);
 
+        // Start legacy agent server for reject connection with message.
+        if (settings.agent.legacyPort) {
+            const agentLegacySrv = settings.agent.SSLOptions
+                ? https.createServer(settings.agent.SSLOptions) : http.createServer();
+
+            agentLegacySrv.listen(settings.agent.legacyPort);
+            agentLegacySrv.on('error', _onError.bind(null, settings.agent.legacyPort));
+            agentLegacySrv.on('listening', _onListening.bind(null, agentLegacySrv.address()));
+
+            agentMgr.attachLegacy(agentLegacySrv);
+        }
+
         // Start agent server.
         const agentServer = settings.agent.SSLOptions
             ? https.createServer(settings.agent.SSLOptions) : http.createServer();

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/serve/agent.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/serve/agent.js b/modules/control-center-web/src/main/js/serve/agent.js
index 6e249f0..9d4ca4c 100644
--- a/modules/control-center-web/src/main/js/serve/agent.js
+++ b/modules/control-center-web/src/main/js/serve/agent.js
@@ -24,7 +24,7 @@
  */
 module.exports = {
     implements: 'agent-manager',
-    inject: ['require(lodash)', 'require(fs)', 'require(path)', 'require(jszip)', 'require(socket.io)', 'require(apache-ignite)', 'settings', 'mongo']
+    inject: ['require(lodash)', 'require(ws)', 'require(fs)', 'require(path)', 'require(jszip)', 'require(socket.io)', 'require(apache-ignite)', 'settings', 'mongo']
 };
 
 /**
@@ -38,7 +38,7 @@ module.exports = {
  * @param mongo
  * @returns {AgentManager}
  */
-module.exports.factory = function(_, fs, path, JSZip, socketio, apacheIgnite, settings, mongo) {
+module.exports.factory = function(_, ws, fs, path, JSZip, socketio, apacheIgnite, settings, mongo) {
     /**
      * Creates an instance of server for Ignite.
      */
@@ -347,6 +347,17 @@ module.exports.factory = function(_, fs, path, JSZip, socketio, apacheIgnite, se
                 this.supportedAgents.latest = this.supportedAgents[latest];
         }
 
+        attachLegacy(server) {
+            const wsSrv = new ws.Server({server});
+
+            wsSrv.on('connection', (_wsClient) => {
+                _wsClient.send(JSON.stringify({
+                    method: 'authResult',
+                    args: ['You are using an older version of the agent. Please reload agent archive']
+                }));
+            });
+        }
+
         /**
          * @param {http.Server|https.Server} srv Server instance that we want to attach agent handler.
          */

http://git-wip-us.apache.org/repos/asf/ignite/blob/3262283f/modules/control-center-web/src/main/js/serve/settings.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/serve/settings.js b/modules/control-center-web/src/main/js/serve/settings.js
index b8a3c71..5b14bcc 100644
--- a/modules/control-center-web/src/main/js/serve/settings.js
+++ b/modules/control-center-web/src/main/js/serve/settings.js
@@ -50,7 +50,8 @@ module.exports.factory = function(nconf, fs) {
     return {
         agent: {
             dists: 'serve/agent_dists',
-            port: _normalizePort(nconf.get('agent-server:port') || 3001),
+            port: _normalizePort(nconf.get('agent-server:port') || 3002),
+            legacyPort: _normalizePort(nconf.get('agent-server:legacyPort')),
             SSLOptions: nconf.get('agent-server:ssl') && {
                 key: fs.readFileSync(nconf.get('agent-server:key')),
                 cert: fs.readFileSync(nconf.get('agent-server:cert')),