/** * 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'; function createColumn() { var columns = []; // 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; } });