diff --git a/js/apps/system/aardvark/clusterFrontend/js/views/showClusterView.js b/js/apps/system/aardvark/clusterFrontend/js/views/showClusterView.js
index 99f1d47f53..f8f83b06c8 100644
--- a/js/apps/system/aardvark/clusterFrontend/js/views/showClusterView.js
+++ b/js/apps/system/aardvark/clusterFrontend/js/views/showClusterView.js
@@ -549,16 +549,20 @@
dashboard: function(e) {
this.stopUpdating();
+
var tar = $(e.currentTarget);
var serv = {};
var cur;
var coord;
+
var ip_port = tar.attr("id");
ip_port = ip_port.replace(/\-/g,'.');
ip_port = ip_port.replace(/\_/g,':');
ip_port = ip_port.substr(2);
+
serv.raw = ip_port;
serv.isDBServer = tar.hasClass("dbserver");
+
if (serv.isDBServer) {
cur = this.dbservers.findWhere({
address: serv.raw
@@ -577,6 +581,7 @@
+ "://"
+ cur.get("address");
}
+
serv.target = encodeURIComponent(cur.get("name"));
window.App.serverToShow = serv;
window.App.dashboard();
diff --git a/js/apps/system/aardvark/frontend/js/views/dashboardView.js b/js/apps/system/aardvark/frontend/js/views/dashboardView.js
index c1d7f75bfd..b25675fcd3 100644
--- a/js/apps/system/aardvark/frontend/js/views/dashboardView.js
+++ b/js/apps/system/aardvark/frontend/js/views/dashboardView.js
@@ -115,7 +115,7 @@
this.detailGraph = new Dygraph(
document.getElementById("lineChartDetail"),
- this.history[figure],
+ this.history[this.server][figure],
options
);
},
@@ -150,7 +150,7 @@
options.width = dimensions.width;
self.graphs[f] = new Dygraph(
document.getElementById(options.div),
- self.history[f] || [],
+ self.history[self.server][f] || [],
options
);
});
@@ -158,11 +158,18 @@
initialize: function () {
this.dygraphConfig = this.options.dygraphConfig;
- this.server = this.options.serverToShow;
this.d3NotInitialised = true;
this.events["click .dashboard-sub-bar-menu-sign"] = this.showDetail.bind(this);
this.events["mousedown .dygraph-rangesel-zoomhandle"] = this.stopUpdating.bind(this);
this.events["mouseup .dygraph-rangesel-zoomhandle"] = this.startUpdating.bind(this);
+
+ this.server = this.options.serverToShow;
+
+ if (! this.server) {
+ this.server = "-local-";
+ }
+
+ this.history[this.server] = {};
},
updateCharts: function () {
@@ -184,7 +191,7 @@
var tempColor = "";
Object.keys(map).forEach(function (a) {
- var v = self.history[a][1];
+ var v = self.history[self.server][a][1];
var p = "";
if (v < 0) {
@@ -194,7 +201,7 @@
tempColor = "green";
p = "+";
}
- $("#" + a).html(self.history[a][0] + '
' + p + v + '%');
});
},
@@ -217,7 +224,7 @@
updateLineChart: function (figure, isDetailChart) {
var g = isDetailChart ? this.detailGraph : this.graphs[figure],
opts = {
- file: this.history[figure],
+ file: this.history[this.server][figure],
dateWindow: this.updateDateWindow(g, isDetailChart)
};
g.updateOptions(opts);
@@ -234,8 +241,8 @@
}
// need at least an empty history
- if (! self.history[f]) {
- self.history[f] = [];
+ if (! self.history[self.server][f]) {
+ self.history[self.server][f] = [];
}
// generate values for this key
@@ -256,7 +263,7 @@
// if we found at list one value besides times, then use the entry
if (valueList.length > 1) {
- self.history[f].push(valueList);
+ self.history[self.server][f].push(valueList);
}
});
},
@@ -264,14 +271,14 @@
cutOffHistory: function (f, cutoff) {
var self = this;
- while (self.history[f].length !== 0) {
- var v = self.history[f][0][0];
+ while (self.history[self.server][f].length !== 0) {
+ var v = self.history[self.server][f][0][0];
if (v >= cutoff) {
break;
}
- self.history[f].shift();
+ self.history[self.server][f].shift();
}
},
@@ -287,7 +294,7 @@
}
// history must be non-empty
- if (! self.history[f]) {
+ if (! self.history[self.server][f]) {
return;
}
@@ -320,7 +327,7 @@
n1 = 0;
}
- self.history[a] = [
+ self.history[self.server][a] = [
fmtNumber(newData[self.tendencies[a][0]], n1),
fmtNumber(newData[self.tendencies[a][1]] * 100, n2)
];
@@ -328,16 +335,16 @@
// update distribution
Object.keys(this.barCharts).forEach(function (a) {
- self.history[a] = self.mergeBarChartData(self.barCharts[a], newData);
+ self.history[self.server][a] = self.mergeBarChartData(self.barCharts[a], newData);
});
// update physical memory
- self.history.physicalMemory = newData.physicalMemory;
- self.history.residentSizeCurrent = newData.residentSizeCurrent;
- self.history.residentSizePercent = newData.residentSizePercent;
+ self.history[self.server].physicalMemory = newData.physicalMemory;
+ self.history[self.server].residentSizeCurrent = newData.residentSizeCurrent;
+ self.history[self.server].residentSizePercent = newData.residentSizePercent;
// generate chart description
- self.history.residentSizeChart =
+ self.history[self.server].residentSizeChart =
[
{
"key": "",
@@ -402,16 +409,20 @@
var url = "statistics/short";
var urlParams = "?start=";
- if (this.nextStart) {
- urlParams += this.nextStart;
+ if (self.nextStart) {
+ urlParams += self.nextStart;
}
else {
- urlParams += (new Date().getTime() - this.defaultTimeFrame) / 1000;
+ urlParams += (new Date().getTime() - self.defaultTimeFrame) / 1000;
}
- if (this.server) {
- url = this.server.endpoint + "/_admin/aardvark/statistics/cluster";
- urlParams += "&DBserver=" + this.server.target;
+ if (self.server !== "-local-") {
+ url = self.server.endpoint + "/_admin/aardvark/statistics/cluster";
+ urlParams += "&type=short&DBserver=" + self.server.target;
+
+ if (! self.history.hasOwnProperty(self.server)) {
+ self.history[self.server] = {};
+ }
}
$.ajax(
@@ -434,9 +445,13 @@
var urlParams
= "?filter=" + this.dygraphConfig.mapStatToFigure[figure].join();
- if (this.server) {
- url = this.server.endpoint + "/_admin/aardvark/statistics/cluster";
- urlParams += "&DBserver=" + this.server.target;
+ if (self.server !== "-local-") {
+ url = self.server.endpoint + "/_admin/aardvark/statistics/cluster";
+ urlParams += "&type=long&DBserver=" + self.server.target;
+
+ if (! self.history.hasOwnProperty(self.server)) {
+ self.history[self.server] = {};
+ }
}
$.ajax(
@@ -446,7 +461,7 @@
function (d) {
var i;
- self.history[figure] = [];
+ self.history[self.server][figure] = [];
for (i = 0; i < d.times.length; ++i) {
self.mergeDygraphHistory(d, i, true);
@@ -460,7 +475,7 @@
var dimensions = this.getCurrentSize('#residentSizeChartContainer');
- var current = self.history.residentSizeCurrent / 1024 / 1024;
+ var current = self.history[self.server].residentSizeCurrent / 1024 / 1024;
var currentA = "";
if (current < 1025) {
@@ -470,8 +485,8 @@
currentA = fmtNumber(current / 1024, 2) + " GB";
}
- var currentP = fmtNumber(self.history.residentSizePercent * 100, 2);
- var data = [fmtNumber(self.history.physicalMemory / 1024 / 1024 / 1024, 0) + " GB"];
+ var currentP = fmtNumber(self.history[self.server].residentSizePercent * 100, 2);
+ var data = [fmtNumber(self.history[self.server].physicalMemory / 1024 / 1024 / 1024, 0) + " GB"];
nv.addGraph(function () {
var chart = nv.models.multiBarHorizontalChart()
@@ -504,7 +519,7 @@
chart.xAxis.showMaxMin(false);
d3.select('#residentSizeChart svg')
- .datum(self.history.residentSizeChart)
+ .datum(self.history[self.server].residentSizeChart)
.call(chart);
d3.select('#residentSizeChart svg').select('.nv-zeroLine').remove();
@@ -624,7 +639,7 @@
.tickFormat(function (d) {return fmtNumber(((d * 100 * 100) / 100), 0) + "%";});
d3.select(selector)
- .datum(self.history[k])
+ .datum(self.history[self.server][k])
.call(chart);
nv.utils.windowResize(chart.update);
diff --git a/js/apps/system/aardvark/statistics.js b/js/apps/system/aardvark/statistics.js
index 7be19d04e5..d38dc99364 100644
--- a/js/apps/system/aardvark/statistics.js
+++ b/js/apps/system/aardvark/statistics.js
@@ -40,20 +40,6 @@ var db = require("org/arangodb").db;
var STATISTICS_INTERVALL = require("org/arangodb/statistics").STATISTICS_INTERVALL;
var STATISTICS_HISTORY_INTERVALL = require("org/arangodb/statistics").STATISTICS_HISTORY_INTERVALL;
-// -----------------------------------------------------------------------------
-// --SECTION-- private variables
-// -----------------------------------------------------------------------------
-
-////////////////////////////////////////////////////////////////////////////////
-/// @brief cluster id or undefined for standalone
-////////////////////////////////////////////////////////////////////////////////
-
-var clusterId;
-
-if (cluster.isCluster()) {
- clusterId = ArangoServerState.id();
-}
-
// -----------------------------------------------------------------------------
// --SECTION-- private functions
// -----------------------------------------------------------------------------
@@ -460,6 +446,17 @@ controller.get("short", function (req, res) {
start = internal.time() - STATISTICS_INTERVALL * 10;
}
+ var clusterId;
+
+ if (dbServer === undefined) {
+ if (cluster.isCluster()) {
+ clusterId = ArangoServerState.id();
+ }
+ }
+ else {
+ clusterId = dbServer;
+ }
+
var series = computeStatisticsShort(start, clusterId);
res.json(series);
@@ -488,6 +485,17 @@ controller.get("long", function (req, res) {
attrs[s[i]] = true;
}
+ var clusterId;
+
+ if (dbServer === undefined) {
+ if (cluster.isCluster()) {
+ clusterId = ArangoServerState.id();
+ }
+ }
+ else {
+ clusterId = dbServer;
+ }
+
var series = computeStatisticsLong(attrs, clusterId);
res.json(series);
@@ -512,10 +520,15 @@ controller.get("cluster", function (req, res) {
}
var DBserver = req.parameters.DBserver;
+ var type = req.parameters.type;
var coord = { coordTransactionID: ArangoClusterInfo.uniqid() };
var options = { coordTransactionID: coord.coordTransactionID, timeout:10 };
- var url = "/_admin/aardvark/statistics/full";
+ if (type !== "short" && type !== "long") {
+ type = short;
+ }
+
+ var url = "/_admin/aardvark/statistics/" + type;
var sep = "?";
if (req.parameters.hasOwnProperty("start")) {
diff --git a/js/common/modules/org/arangodb/statistics.js b/js/common/modules/org/arangodb/statistics.js
index 3dc1a4e2f4..de9d12e45c 100644
--- a/js/common/modules/org/arangodb/statistics.js
+++ b/js/common/modules/org/arangodb/statistics.js
@@ -37,20 +37,6 @@ var db = internal.db;
// --SECTION-- module "org/arangodb/statistics"
// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-// --SECTION-- private variables
-// -----------------------------------------------------------------------------
-
-////////////////////////////////////////////////////////////////////////////////
-/// @brief cluster id or undefined for standalone
-////////////////////////////////////////////////////////////////////////////////
-
-var clusterId;
-
-if (cluster.isCluster()) {
- clusterId = ArangoServerState.id();
-}
-
// -----------------------------------------------------------------------------
// --SECTION-- private functions
// -----------------------------------------------------------------------------
@@ -59,7 +45,7 @@ if (cluster.isCluster()) {
/// @brief lastEntry
////////////////////////////////////////////////////////////////////////////////
-function lastEntry (collection, start) {
+function lastEntry (collection, start, clusterId) {
'use strict';
var filter = "";
@@ -251,7 +237,7 @@ function computePerSeconds (current, prev) {
/// @brief computes the 15 minute averages
////////////////////////////////////////////////////////////////////////////////
-function compute15Minute (start) {
+function compute15Minute (start, clusterId) {
'use strict';
var filter = "";
@@ -395,9 +381,18 @@ exports.historian = function () {
var statsRaw = db._statisticsRaw;
var statsCol = db._statistics;
+ var clusterId;
+
+ if (cluster.isCluster()) {
+ clusterId = ArangoServerState.id();
+ }
+
try {
var now = internal.time();
- var prevRaw = lastEntry('_statisticsRaw', now - 2 * exports.STATISTICS_INTERVALL);
+ var prevRaw = lastEntry(
+ '_statisticsRaw',
+ now - 2 * exports.STATISTICS_INTERVALL,
+ clusterId);
// create new raw statistics
var raw = {};
@@ -420,7 +415,7 @@ exports.historian = function () {
if (perSecs !== null) {
if (clusterId !== undefined) {
- statsCol.clusterId = clusterId;
+ perSecs.clusterId = clusterId;
}
statsCol.save(perSecs);
@@ -441,20 +436,33 @@ exports.historianAverage = function () {
var stats15m = db._statistics15;
+ var clusterId;
+
+ if (cluster.isCluster()) {
+ clusterId = ArangoServerState.id();
+ }
+
try {
var now = internal.time();
// check if need to create a new 15 min intervall
- var prev15 = lastEntry('_statistics15', now - 2 * exports.STATISTICS_HISTORY_INTERVALL);
+ var prev15 = lastEntry(
+ '_statistics15',
+ now - 2 * exports.STATISTICS_HISTORY_INTERVALL,
+ clusterId);
+
var stat15;
+ var start;
if (prev15 === null) {
- stat15 = compute15Minute(now - exports.STATISTICS_HISTORY_INTERVALL);
+ start = now - exports.STATISTICS_HISTORY_INTERVALL;
}
else {
- stat15 = compute15Minute(prev15.time);
+ start = prev15.time;
}
+ stat15 = compute15Minute(start, clusterId);
+
if (stat15 !== undefined) {
if (clusterId !== undefined) {
stat15.clusterId = clusterId;