You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2019/02/25 16:17:22 UTC

[ignite] branch master updated: IGNITE-11096 Web Agent: Implemented support for "--disable-demo".

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

akuznetsov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 71ae9c0  IGNITE-11096 Web Agent: Implemented support for "--disable-demo".
71ae9c0 is described below

commit 71ae9c07627b8a677c49d70650f28eb05cec2d4d
Author: Vasiliy Sisko <vs...@gridgain.com>
AuthorDate: Mon Feb 25 23:16:32 2019 +0700

    IGNITE-11096 Web Agent: Implemented support for "--disable-demo".
---
 modules/web-console/backend/app/agentSocket.js     | 23 ----------------
 modules/web-console/backend/app/agentsHandler.js   | 13 +++++++--
 modules/web-console/backend/app/browsersHandler.js |  2 +-
 .../components/demo-mode-button/controller.ts      | 31 +++++++++++++++-------
 .../app/modules/agent/AgentManager.service.js      |  8 +++---
 .../console/agent/handlers/RestListener.java       |  3 +++
 6 files changed, 41 insertions(+), 39 deletions(-)

diff --git a/modules/web-console/backend/app/agentSocket.js b/modules/web-console/backend/app/agentSocket.js
index dfebda0..0df5c5e 100644
--- a/modules/web-console/backend/app/agentSocket.js
+++ b/modules/web-console/backend/app/agentSocket.js
@@ -113,29 +113,6 @@ module.exports.factory = function() {
         }
 
         /**
-         * @param {String} token
-         * @param {Array.<Socket>} browserSockets
-         */
-        runDemoCluster(token, browserSockets) {
-            this.emitEvent('demo:broadcast:start')
-                .then(() => {
-                    this.demo.tokens.push(token);
-                    this.demo.browserSockets.push(...browserSockets);
-
-                    this.socket.on('demo:topology', (res) => {
-                        try {
-                            const top = this.restResultParse(res);
-
-                            _.forEach(this.demo.browserSockets, (sock) => sock.emit('topology', top));
-                        }
-                        catch (err) {
-                            _.forEach(this.demo.browserSockets, (sock) => sock.emit('topology:err', err));
-                        }
-                    });
-                });
-        }
-
-        /**
          * @param {Socket} browserSocket
          */
         attachToDemoCluster(browserSocket) {
diff --git a/modules/web-console/backend/app/agentsHandler.js b/modules/web-console/backend/app/agentsHandler.js
index fd55ac3..f6e3da9 100644
--- a/modules/web-console/backend/app/agentsHandler.js
+++ b/modules/web-console/backend/app/agentsHandler.js
@@ -347,7 +347,7 @@ module.exports.factory = function(settings, mongo, AgentSocket) {
 
                                     cb(null, activeTokens);
 
-                                    return this.onConnect(sock, accounts, activeTokens, disableDemo);
+                                    return this.onConnect(sock, accounts, activeTokens, !disableDemo);
                                 })
                                 // TODO IGNITE-1379 send error to web master.
                                 .catch(() => cb(`Invalid token(s): ${tokens.join(',')}. Please reload agent archive or check settings`));
@@ -368,7 +368,16 @@ module.exports.factory = function(settings, mongo, AgentSocket) {
             if (_.isEmpty(socks))
                 return Promise.reject(new Error('Failed to find connected agent for this account'));
 
-            if (demo || _.isNil(clusterId))
+            if (demo) {
+                const sock = _.find(socks, (sock) => sock.demo.enabled);
+
+                if (sock)
+                    return Promise.resolve(sock);
+
+                return Promise.reject(new Error('Demo mode disabled by administrator'));
+            }
+
+            if (_.isNil(clusterId))
                 return Promise.resolve(_.head(socks));
 
             const sock = _.find(socks, (agentSock) => _.get(agentSock, 'cluster.id') === clusterId);
diff --git a/modules/web-console/backend/app/browsersHandler.js b/modules/web-console/backend/app/browsersHandler.js
index 919b1f0..1bfba89 100644
--- a/modules/web-console/backend/app/browsersHandler.js
+++ b/modules/web-console/backend/app/browsersHandler.js
@@ -111,7 +111,7 @@ module.exports = {
                     .then((agentSocks) => {
                         const stat = _.reduce(agentSocks, (acc, agentSock) => {
                             acc.count += 1;
-                            acc.hasDemo |= _.get(agentSock, 'demo.enabled');
+                            acc.hasDemo = acc.hasDemo || _.get(agentSock, 'demo.enabled');
 
                             if (agentSock.cluster)
                                 acc.clusters.push(agentSock.cluster);
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/controller.ts b/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/controller.ts
index 1a1bd1e..23280d9 100644
--- a/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/controller.ts
+++ b/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/controller.ts
@@ -19,12 +19,15 @@ import {StateService} from '@uirouter/angularjs';
 import {default as LegacyConfirmFactory} from 'app/services/Confirm.service';
 
 export default class DemoModeButton {
-    static $inject = ['$rootScope', '$state', '$window', 'IgniteConfirm'];
+    static $inject = ['$rootScope', '$state', '$window', 'IgniteConfirm', 'AgentManager', 'IgniteMessages'];
+
     constructor(
         private $root: ng.IRootScopeService,
         private $state: StateService,
         private $window: ng.IWindowService,
-        private Confirm: ReturnType<typeof LegacyConfirmFactory>
+        private Confirm: ReturnType<typeof LegacyConfirmFactory>,
+        private agentMgr: AgentManager,
+        private Messages
     ) {}
 
     private _openTab(stateName: string) {
@@ -32,15 +35,23 @@ export default class DemoModeButton {
     }
 
     startDemo() {
-        if (!this.$root.user.demoCreated)
-            return this._openTab('demo.reset');
+        const connectionState = this.agentMgr.connectionSbj.getValue();
+        const disconnected = _.get(connectionState, 'state') === 'AGENT_DISCONNECTED';
+        const demoEnabled = _.get(connectionState, 'hasDemo');
+
+        if (disconnected || demoEnabled || _.isNil(demoEnabled)) {
+            if (!this.$root.user.demoCreated)
+                return this._openTab('demo.reset');
 
-        this.Confirm.confirm('Would you like to continue with previous demo session?', true, false)
-            .then((resume) => {
-                if (resume)
-                    return this._openTab('demo.resume');
+            this.Confirm.confirm('Would you like to continue with previous demo session?', true, false)
+                .then((resume) => {
+                    if (resume)
+                        return this._openTab('demo.resume');
 
-                this._openTab('demo.reset');
-            });
+                    this._openTab('demo.reset');
+                });
+        }
+        else
+            this.Messages.showError('Demo mode disabled by administrator');
     }
 }
diff --git a/modules/web-console/frontend/app/modules/agent/AgentManager.service.js b/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
index 23953cb..0c698c1 100644
--- a/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
+++ b/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
@@ -79,7 +79,7 @@ class ConnectionState {
         return cluster;
     }
 
-    update(demo, count, clusters) {
+    update(demo, count, clusters, hasDemo) {
         this.clusters = clusters;
 
         if (_.isEmpty(this.clusters))
@@ -91,6 +91,8 @@ class ConnectionState {
         if (this.cluster)
             this.cluster.connected = !!_.find(clusters, {id: this.cluster.id});
 
+        this.hasDemo = hasDemo;
+
         if (count === 0)
             this.state = State.AGENT_DISCONNECTED;
         else if (demo || _.get(this.cluster, 'connected'))
@@ -240,10 +242,10 @@ export default class AgentManager {
 
         this.socket.on('disconnect', onDisconnect);
 
-        this.socket.on('agents:stat', ({clusters, count}) => {
+        this.socket.on('agents:stat', ({clusters, count, hasDemo}) => {
             const conn = this.connectionSbj.getValue();
 
-            conn.update(this.isDemoMode(), count, clusters);
+            conn.update(this.isDemoMode(), count, clusters, hasDemo);
 
             this.connectionSbj.next(conn);
         });
diff --git a/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/handlers/RestListener.java b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/handlers/RestListener.java
index 0db8904..89fac44 100644
--- a/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/handlers/RestListener.java
+++ b/modules/web-console/web-agent/src/main/java/org/apache/ignite/console/agent/handlers/RestListener.java
@@ -77,6 +77,9 @@ public class RestListener extends AbstractListener {
         try {
             if (demo) {
                 if (AgentClusterDemo.getDemoUrl() == null) {
+                    if (cfg.disableDemo())
+                        return RestResult.fail(404, "Demo mode disabled by administrator.");
+
                     AgentClusterDemo.tryStart().await();
 
                     if (AgentClusterDemo.getDemoUrl() == null)