diff --git a/js/apps/system/_admin/aardvark/APP/frontend/js/arango/arango.js b/js/apps/system/_admin/aardvark/APP/frontend/js/arango/arango.js index d6c2a49f26..c7e47283f9 100644 --- a/js/apps/system/_admin/aardvark/APP/frontend/js/arango/arango.js +++ b/js/apps/system/_admin/aardvark/APP/frontend/js/arango/arango.js @@ -273,9 +273,32 @@ this.buildSubNavBar(menus); }, + scaleability: undefined, + //nav for cluster/nodes view buildNodesSubNav: function(type) { + if (this.scaleability === undefined) { + var self = this; + + $.ajax({ + type: "GET", + cache: false, + url: arangoHelper.databaseUrl("/_admin/cluster/numberOfServers"), + contentType: "application/json", + processData: false, + success: function(data) { + if (data.numberOfCoordinators !== null && data.numberOfDBServers !== null) { + self.scaleability = true; + self.buildNodesSubNav(); + } + else { + self.scaleability = false; + } + } + }); + } + var menus = { Coordinators: { route: '#cNodes' @@ -285,13 +308,30 @@ } }; + menus.Scale = { + route: '#sNodes', + disabled: true + }; + if (type === 'coordinator') { menus.Coordinators.active = true; } + else if (type === 'scale') { + if (this.scaleability === true) { + menus.Scale.active = true; + } + else { + window.App.navigate('#nodes', {trigger: true}); + } + } else { menus.DBServers.active = true; } + if (this.scaleability === true) { + menus.Scale.disabled = false; + } + this.buildSubNavBar(menus); }, diff --git a/js/apps/system/_admin/aardvark/APP/frontend/js/routers/router.js b/js/apps/system/_admin/aardvark/APP/frontend/js/routers/router.js index 0fbc003d58..4561f7ff5b 100644 --- a/js/apps/system/_admin/aardvark/APP/frontend/js/routers/router.js +++ b/js/apps/system/_admin/aardvark/APP/frontend/js/routers/router.js @@ -37,6 +37,7 @@ "nodes": "cNodes", "cNodes": "cNodes", "dNodes": "dNodes", + "sNodes": "sNodes", "node/:name": "node", //"nLogs/:name": "nLogs", "logs": "logs", @@ -160,7 +161,10 @@ window.isCoordinator(callback); - this.initFinished = true; + if (frontendConfig.isCluster === false) { + this.initFinished = true; + } + this.arangoDatabase = new window.ArangoDatabase(); this.currentDB = new window.CurrentDatabase(); @@ -320,6 +324,25 @@ this.nodesView.render(); }, + sNodes: function (initialized) { + this.checkUser(); + if (!initialized || this.isCluster === undefined) { + this.waitForInit(this.sNodes.bind(this)); + return; + } + if (this.isCluster === false) { + this.routes[""] = 'dashboard'; + this.navigate("#dashboard", {trigger: true}); + return; + } + + this.scaleView = new window.ScaleView({ + coordinators: this.coordinatorCollection, + dbServers: this.dbServers[0] + }); + this.scaleView.render(); + }, + addAuth: function (xhr) { var u = this.clusterPlan.get("user"); if (!u) { @@ -823,8 +846,9 @@ this.userManagementView.render(true); }, - fetchDBS: function() { + fetchDBS: function(callback) { var self = this; + var cb = false; this.coordinatorCollection.each(function(coordinator) { self.dbServers.push( @@ -833,8 +857,20 @@ }) ); }); + + this.initFinished = true; + _.each(this.dbServers, function(dbservers) { - dbservers.fetch(); + dbservers.fetch({ + success: function() { + if (cb === false) { + if (callback) { + callback(); + cb = true; + } + } + } + }); }); }, diff --git a/js/apps/system/_admin/aardvark/APP/frontend/js/templates/clusterView.ejs b/js/apps/system/_admin/aardvark/APP/frontend/js/templates/clusterView.ejs index 2c428a39f8..d49c7044af 100644 --- a/js/apps/system/_admin/aardvark/APP/frontend/js/templates/clusterView.ejs +++ b/js/apps/system/_admin/aardvark/APP/frontend/js/templates/clusterView.ejs @@ -1,5 +1,17 @@