YARN-7071. Add vcores and number of containers in new YARN UI node heat map. Contributed by Abdullah Yousufi.
This commit is contained in:
parent
621b43e254
commit
a756704f5a
|
@ -27,6 +27,10 @@ export default BaseChartComponent.extend({
|
||||||
RACK_MARGIN: 20,
|
RACK_MARGIN: 20,
|
||||||
filter: "",
|
filter: "",
|
||||||
selectedCategory: 0,
|
selectedCategory: 0,
|
||||||
|
memoryLabel: "Memory",
|
||||||
|
cpuLabel: "VCores",
|
||||||
|
containersLabel: "Containers",
|
||||||
|
totalContainers: 0,
|
||||||
|
|
||||||
bindTP: function(element, cell) {
|
bindTP: function(element, cell) {
|
||||||
element.on("mouseover", function() {
|
element.on("mouseover", function() {
|
||||||
|
@ -75,8 +79,7 @@ export default BaseChartComponent.extend({
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var usage = node.get("usedMemoryMB") /
|
var usage = this.calcUsage(node);
|
||||||
(node.get("usedMemoryMB") + node.get("availMemoryMB"));
|
|
||||||
var lowerLimit = (this.selectedCategory - 1) * 0.2;
|
var lowerLimit = (this.selectedCategory - 1) * 0.2;
|
||||||
var upperLimit = this.selectedCategory * 0.2;
|
var upperLimit = this.selectedCategory * 0.2;
|
||||||
if (lowerLimit <= usage && usage <= upperLimit) {
|
if (lowerLimit <= usage && usage <= upperLimit) {
|
||||||
|
@ -89,6 +92,7 @@ export default BaseChartComponent.extend({
|
||||||
// [{label=label1, value=value1}, ...]
|
// [{label=label1, value=value1}, ...]
|
||||||
// ...
|
// ...
|
||||||
renderCells: function (model, title) {
|
renderCells: function (model, title) {
|
||||||
|
var selectedOption = d3.select("select").property("value");
|
||||||
var data = [];
|
var data = [];
|
||||||
model.forEach(function (o) {
|
model.forEach(function (o) {
|
||||||
data.push(o);
|
data.push(o);
|
||||||
|
@ -149,6 +153,7 @@ export default BaseChartComponent.extend({
|
||||||
|
|
||||||
var chartXOffset = -1;
|
var chartXOffset = -1;
|
||||||
|
|
||||||
|
this.totalContainers = 0;
|
||||||
for (i = 0; i < racksArray.length; i++) {
|
for (i = 0; i < racksArray.length; i++) {
|
||||||
text = g.append("text")
|
text = g.append("text")
|
||||||
.text(racksArray[i])
|
.text(racksArray[i])
|
||||||
|
@ -166,6 +171,7 @@ export default BaseChartComponent.extend({
|
||||||
var rack = data[j].get("rack");
|
var rack = data[j].get("rack");
|
||||||
|
|
||||||
if (rack === racksArray[i]) {
|
if (rack === racksArray[i]) {
|
||||||
|
this.totalContainers += data[j].get("numContainers");
|
||||||
this.addNode(g, xOffset, yOffset, colorFunc, data[j]);
|
this.addNode(g, xOffset, yOffset, colorFunc, data[j]);
|
||||||
xOffset += this.CELL_MARGIN + this.CELL_WIDTH;
|
xOffset += this.CELL_MARGIN + this.CELL_WIDTH;
|
||||||
if (xOffset + this.CELL_MARGIN + this.CELL_WIDTH >= layout.x2 -
|
if (xOffset + this.CELL_MARGIN + this.CELL_WIDTH >= layout.x2 -
|
||||||
|
@ -192,7 +198,7 @@ export default BaseChartComponent.extend({
|
||||||
|
|
||||||
layout.y2 = yOffset + layout.margin;
|
layout.y2 = yOffset + layout.margin;
|
||||||
this.adjustMaxHeight(layout.y2);
|
this.adjustMaxHeight(layout.y2);
|
||||||
this.renderTitleAndBG(g, title, layout, false);
|
this.renderTitleAndBG(g, title + selectedOption + ")" , layout, false);
|
||||||
},
|
},
|
||||||
|
|
||||||
addNode: function (g, xOffset, yOffset, colorFunc, data) {
|
addNode: function (g, xOffset, yOffset, colorFunc, data) {
|
||||||
|
@ -200,10 +206,9 @@ export default BaseChartComponent.extend({
|
||||||
.attr("y", yOffset)
|
.attr("y", yOffset)
|
||||||
.attr("x", xOffset)
|
.attr("x", xOffset)
|
||||||
.attr("height", this.CELL_HEIGHT)
|
.attr("height", this.CELL_HEIGHT)
|
||||||
.attr("fill", colorFunc(data.get("usedMemoryMB") /
|
.attr("fill", colorFunc(this.calcUsage(data)))
|
||||||
(data.get("usedMemoryMB") + data.get("availMemoryMB"))))
|
|
||||||
.attr("width", this.CELL_WIDTH)
|
.attr("width", this.CELL_WIDTH)
|
||||||
.attr("tooltiptext", data.get("toolTipText"));
|
.attr("tooltiptext", data.get("toolTipText") + this.getToolTipText(data));
|
||||||
|
|
||||||
if (this.isNodeSelected(data)) {
|
if (this.isNodeSelected(data)) {
|
||||||
rect.style("opacity", 0.8);
|
rect.style("opacity", 0.8);
|
||||||
|
@ -243,6 +248,18 @@ export default BaseChartComponent.extend({
|
||||||
},
|
},
|
||||||
|
|
||||||
didInsertElement: function () {
|
didInsertElement: function () {
|
||||||
|
var parentId = this.get("parentId");
|
||||||
|
var self = this;
|
||||||
|
var optionsData = [this.memoryLabel, this.cpuLabel, this.containersLabel];
|
||||||
|
d3.select("#heatmap-select")
|
||||||
|
.on('change', function() {
|
||||||
|
self.renderCells(self.get("model"), self.get("title"), self.get("textWidth"));
|
||||||
|
})
|
||||||
|
.selectAll('option')
|
||||||
|
.data(optionsData).enter()
|
||||||
|
.append('option')
|
||||||
|
.text(function (d) { return d; });
|
||||||
|
|
||||||
this.draw();
|
this.draw();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -252,5 +269,38 @@ export default BaseChartComponent.extend({
|
||||||
this.selectedCategory = 0;
|
this.selectedCategory = 0;
|
||||||
this.didInsertElement();
|
this.didInsertElement();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
calcUsage: function(data) {
|
||||||
|
var selectedOption = d3.select('select').property("value");
|
||||||
|
if (selectedOption === this.memoryLabel) {
|
||||||
|
return data.get("usedMemoryMB") /
|
||||||
|
(data.get("usedMemoryMB") + data.get("availMemoryMB"));
|
||||||
|
}
|
||||||
|
else if (selectedOption === this.cpuLabel) {
|
||||||
|
return data.get("usedVirtualCores") /
|
||||||
|
(data.get("usedVirtualCores") + data.get("availableVirtualCores"));
|
||||||
|
}
|
||||||
|
else if (selectedOption === this.containersLabel) {
|
||||||
|
var totalContainers = this.totalContainers;
|
||||||
|
if (totalContainers === 0) { return 0; }
|
||||||
|
return data.get("numContainers") / totalContainers;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
getToolTipText: function(data) {
|
||||||
|
var selectedOption = d3.select('select').property("value");
|
||||||
|
if (selectedOption === this.memoryLabel) {
|
||||||
|
return "<p>Used Memory: " + Math.round(data.get("usedMemoryMB")) + " MB</p>" +
|
||||||
|
"<p>Available Memory: " + Math.round(data.get("availMemoryMB")) + " MB</p>";
|
||||||
|
}
|
||||||
|
else if (selectedOption === this.cpuLabel) {
|
||||||
|
return "<p>Used VCores: " + Math.round(data.get("usedVirtualCores")) + " VCores</p>" +
|
||||||
|
"<p>Available VCores: " + Math.round(data.get("availableVirtualCores")) + " VCores</p>";
|
||||||
|
}
|
||||||
|
else if (selectedOption === this.containersLabel) {
|
||||||
|
return "<p>Containers: " + Math.round(data.get("numContainers")) + " Containers</p>" +
|
||||||
|
"<p>Total Containers: " + this.totalContainers + " Containers</p>";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -92,9 +92,7 @@ export default DS.Model.extend({
|
||||||
|
|
||||||
toolTipText: function() {
|
toolTipText: function() {
|
||||||
return "<p>Rack: " + this.get("rack") + '</p>' +
|
return "<p>Rack: " + this.get("rack") + '</p>' +
|
||||||
"<p>Host: " + this.get("nodeHostName") + '</p>' +
|
"<p>Host: " + this.get("nodeHostName") + '</p>';
|
||||||
"<p>Used Memory: " + Math.round(this.get("usedMemoryMB")) + ' MB</p>' +
|
|
||||||
"<p>Available Memory: " + Math.round(this.get("availMemoryMB")) + ' MB</p>';
|
|
||||||
}.property(),
|
}.property(),
|
||||||
|
|
||||||
usedMemoryBytes: function() {
|
usedMemoryBytes: function() {
|
||||||
|
|
|
@ -22,6 +22,9 @@
|
||||||
<input type="text" class="form-control" aria-label="..." placeholder="Enter part of host/rack to filter nodes"
|
<input type="text" class="form-control" aria-label="..." placeholder="Enter part of host/rack to filter nodes"
|
||||||
onchange={{action "applyFilter"}}>
|
onchange={{action "applyFilter"}}>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-6 container-fluid">
|
||||||
|
<select id="heatmap-select" class="form-control"></select>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p/>
|
<p/>
|
|
@ -21,7 +21,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-12 container-fluid" id="nodes-heatmap-chart">
|
<div class="col-lg-12 container-fluid" id="nodes-heatmap-chart">
|
||||||
{{nodes-heatmap model=model.nodes parentId="nodes-heatmap-chart"
|
{{nodes-heatmap model=model.nodes parentId="nodes-heatmap-chart"
|
||||||
title="Node Heatmap Chart (Usage of Memory)"}}
|
title="Node Heatmap Chart (Usage of "}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue