blob: b72afc4a77a096f4cd60577fc4ee5a3615736b0f [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Ember from 'ember';
import ColumnDef from 'em-table/utils/column-definition';
import Converter from 'yarn-ui/utils/converter';
import TableDefinition from 'em-table/utils/table-definition';
function createColumn() {
var columns = [];
tableDefinition: TableDefinition.create({
searchType: 'manual',
}),
// Generate columns
columns.push({
id: 'appId',
headerTitle: 'Application ID',
contentPath: 'appId',
cellComponentName: 'em-table-linked-cell',
minWidth: "300px",
getCellContent: function (row) {
return {
routeName: 'yarn-app.attempts',
id: row.get('appId'),
displayText: row.get('appId')
};
}
});
columns.push({
id: 'appType',
headerTitle: 'Application Type',
contentPath: 'type'
});
columns.push({
id: 'state',
headerTitle: 'State',
contentPath: 'state',
cellComponentName: 'em-table-status-cell',
});
columns.push({
id: 'elapsedTs',
headerTitle: 'Elapsed Time',
contentPath: 'elapsedTs',
getCellContent: function(row) {
return Converter.msToElapsedTimeUnit(row.get('elapsedTs'));
}
});
columns.push({
id: 'cpuVCores',
headerTitle: 'CPU VCores',
contentPath: 'cpuVCores',
getCellContent: function(row) {
if (row.get('cpuVCores') > -1) {
return row.get('cpuVCores');
}
return 'N/A';
}
});
columns.push({
id: 'memoryUsed',
headerTitle: 'Memory Used',
contentPath: 'memoryUsed',
getCellContent: function(row) {
if (row.get('memoryUsed') > -1) {
return Converter.memoryBytesToMB(row.get('memoryUsed'));
}
return 'N/A';
}
});
return ColumnDef.make(columns);
}
export default Ember.Controller.extend({
vizWidgets: {
cpuVcores: true,
memoryUsed: false
},
actions: {
addVizWidget(widget) {
Ember.set(this.vizWidgets, widget, true);
},
removeVizWidget(widget) {
Ember.set(this.vizWidgets, widget, false);
}
},
columns: createColumn(),
cpuVCoresVizData: function() {
var data = [];
this.get('model.apps').forEach(function(app) {
var vizData = app.getCpuVCoresVizDataForBarChart();
if (vizData.value > 0) {
data.push(vizData);
}
});
data = this.getSortedVizDataInDesc(data);
return this.getRefactoredVizData(data);
}.property('model.apps'),
memoryVizData: function() {
var data = [];
this.get('model.apps').forEach(function(app) {
var vizData = app.getMemoryVizDataForBarChart();
if (vizData.value > 0) {
data.push(vizData);
}
});
data = this.getSortedVizDataInDesc(data);
return this.getRefactoredVizData(data);
}.property('model.apps'),
memoryFormatter: function(tick) {
return Converter.memoryBytesToMB(tick);
},
onBarChartClick: function() {
var self = this;
return function(data) {
self.transitionToRoute('yarn-app', data.appId);
};
}.property(),
getSortedVizDataInDesc: function(data) {
return data.sort(function(d1, d2) {
return d2.value - d1.value;
});
},
getRefactoredVizData: function(data) {
data.forEach(function(viz, idx) {
viz.appId = viz.label;
viz.label = "App " + (++idx);
}, this);
return data;
}
});