1
0
Fork 0

Wired DBServers -> Databases -> Collections -> Shards to backend

This commit is contained in:
Michael Hackstein 2014-01-21 14:42:09 +01:00
parent 7cd01e816c
commit 43f7248f44
8 changed files with 100 additions and 78 deletions

View File

@ -28,70 +28,75 @@
/// @author Copyright 2011-2013, triAGENS GmbH, Cologne, Germany
////////////////////////////////////////////////////////////////////////////////
(function() {
"use strict";
// Initialise a new FoxxController called controller under the urlPrefix: "cluster".
var FoxxController = require("org/arangodb/foxx").Controller,
controller = new FoxxController(applicationContext),
_ = require("underscore"),
Communication = require("org/arangodb/sharding/agency-communication"),
comm = new Communication.Communication();
/** Get all DBServers
*
* Get a list of all running and expected DBServers
* within the cluster
*/
controller.get("/DBServers", function(req, res) {
var list = {
Pavel: {
role: "primary",
secondary: "Sally",
address: "tcp://192.168.0.1:1337"
},
Pancho: {
role: "primary",
secondary: "none",
address: "tcp://192.168.0.2:1337"
},
Pablo: {
role: "primary",
secondary: "Sandy",
address: "tcp://192.168.0.5:1337"
},
Sally: {
role: "secondary",
address: "tcp://192.168.1.1:1337"
},
Sandy: {
role: "secondary",
address: "tcp://192.168.1.5:1337"
}
},
noBeat = ["Sandy"],
serving = ["Pancho", "Pavel"],
"use strict";
// Initialise a new FoxxController called controller under the urlPrefix: "cluster".
var FoxxController = require("org/arangodb/foxx").Controller,
controller = new FoxxController(applicationContext),
_ = require("underscore"),
Communication = require("org/arangodb/sharding/agency-communication"),
comm = new Communication.Communication(),
beats = comm.sync.Heartbeats(),
resList = [];
servers = comm.current.DBServers(),
dbs = comm.current.Databases(),
coords = comm.current.Coordinators();
list = comm.current.DBServers().getList();
noBeat = beats.noBeat();
serving = beats.getServing();
/** Get all DBServers
*
* Get a list of all running and expected DBServers
* within the cluster
*/
controller.get("/DBServers", function(req, res) {
var resList = [],
list = servers.getList(),
noBeat = beats.noBeat(),
serving = beats.getServing();
_.each(list, function(v, k) {
v.name = k;
resList.push(v);
if (_.contains(noBeat, k)) {
v.status = "critical";
return;
}
if (v.role === "primary" && !_.contains(serving, k)) {
v.status = "warning";
return;
}
v.status = "ok";
_.each(list, function(v, k) {
v.name = k;
resList.push(v);
if (_.contains(noBeat, k)) {
v.status = "critical";
return;
}
if (v.role === "primary" && !_.contains(serving, k)) {
v.status = "warning";
return;
}
v.status = "ok";
});
res.json(resList);
});
res.json(resList);
});
controller.get("/Databases", function(req, res) {
var list = dbs.getList();
res.json(_.map(list, function(d) {
return {name: d};
}));
});
controller.get("/:dbname/Collections", function(req, res) {
var dbname = req.params("dbname"),
selected = dbs.select(dbname);
res.json(_.map(selected.getCollections(),
function(c) {
return {name: c};
})
);
});
controller.get("/:dbname/:colname/Shards/:servername", function(req, res) {
var dbname = req.params("dbname"),
colname = req.params("colname"),
servername = req.params("servername"),
selected = dbs.select(dbname).collection(colname);
res.json(_.map(selected.getShardsForServer(servername),
function(c) {
return {id: c};
})
);
});
}());

View File

@ -5,9 +5,14 @@
window.ClusterCollections = Backbone.Collection.extend({
model: window.ClusterCollection,
url: "/_admin/aardvark/cluster/Collections",
url: function() {
return "/_admin/aardvark/cluster/"
+ this.dbname + "/"
+ "Collections";
},
getList: function() {
getList: function(db) {
this.dbname = db;
this.fetch({
async: false
});

View File

@ -8,9 +8,18 @@
model: window.ClusterShard,
url: "/_admin/aardvark/cluster/Shards",
url: function() {
return "/_admin/aardvark/cluster/"
+ this.dbname + "/"
+ this.colname + "/"
+ "Shards/"
+ this.server;
},
getList: function() {
getList: function(dbname, colname, server) {
this.dbname = dbname;
this.colname = colname;
this.server = server;
this.fetch({
async: false
});

View File

@ -13,7 +13,7 @@
<ul>
<% _.each(shards, function(v) { %>
<li>
<button id="<%=v.name%>" class="btn btn-server btn-<%=statusClass(v.status)%> shard"><%=v.name%></button>
<button id="<%=v.id%>" class="btn btn-server btn-<%=statusClass(v.status)%> shard"><%=v.id%></button>
</li>
<% }); %>
</ul>

View File

@ -22,9 +22,11 @@
loadCollection: function(e) {
var id = e.currentTarget.id;
this.shardsView.render({
name: id
});
this.shardsView.render(
this.db,
id,
this.server
);
},
unrender: function() {
@ -32,9 +34,11 @@
this.shardsView.unrender();
},
render: function() {
render: function(db, server) {
this.db = db;
this.server = server;
$(this.el).html(this.template.render({
collections: this.collection.getList()
collections: this.collection.getList(this.db)
}));
this.shardsView.unrender();
return this;

View File

@ -22,7 +22,7 @@
loadDatabase: function(e) {
var id = e.currentTarget.id;
this.colView.render(id);
this.colView.render(id, this.server);
},
unrender: function() {
@ -30,7 +30,8 @@
this.colView.unrender();
},
render: function(){
render: function(server) {
this.server = server;
$(this.el).html(this.template.render({
databases: this.collection.getList()
}));

View File

@ -22,9 +22,7 @@
loadServer: function(e) {
var id = e.currentTarget.id;
this.dbView.render({
name: id
});
this.dbView.render(id);
this.render(true);
},

View File

@ -14,9 +14,9 @@
$(this.el).html("");
},
render: function() {
render: function(db, col, server) {
$(this.el).html(this.template.render({
shards: this.collection.getList()
shards: this.collection.getList(db, col, server)
}));
return this;
}