diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-flowrun.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-flowrun.js
new file mode 100644
index 0000000..ec0ace6
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app-flowrun.js
@@ -0,0 +1,33 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "YTS",
+
+ urlForQuery(query, modelName){
+ var url = this._buildURL();
+ var flowrunUid = query['flowrunUid'];
+ url = url + '/run-uid/' + flowrunUid + '/apps?fields=info';
+ console.log('url', url)
+ return url;
+ }
+});
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js
index fd6a6f8..c2c8056 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-container.js
@@ -36,14 +36,14 @@ export default DS.JSONAPIAdapter.extend({
var rmHosts = this.get(`hosts.rmWebAddress`);
var tsHosts = this.get(`hosts.timelineWebAddress`);
var rmNamespaces = this.get(`env.app.namespaces.cluster`);
- var tsNamespaces = this.get(`env.app.namespaces.timeline`);
+ var ahsNamespaces = this.get(`env.app.namespaces.applicationHistory`);
if (query.is_rm) {
this.set("host", rmHosts);
this.set("namespace", rmNamespaces);
} else {
this.set("host", tsHosts);
- this.set("namespace", tsNamespaces);
+ this.set("namespace", ahsNamespaces);
}
var url = this._buildURL();
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flow-activity.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flow-activity.js
new file mode 100644
index 0000000..2c0d9f7
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flow-activity.js
@@ -0,0 +1,30 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "YTS",
+
+ pathForType(modelName) {
+ return 'flows'; // move to some common place, return path by modelname.
+ },
+});
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun-brief.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun-brief.js
new file mode 100644
index 0000000..2685d9c
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun-brief.js
@@ -0,0 +1,31 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "YTS",
+
+ urlForQuery(query, modelName){
+ var url = this._buildURL();
+ var flowuid = query['flowuid'];
+ return url + '/flow-uid/' + flowuid + '/runs';
+ },
+});
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun.js
new file mode 100644
index 0000000..9b3bc8a
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-flowrun.js
@@ -0,0 +1,30 @@
+/**
+ * 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 AbstractAdapter from './abstract';
+
+export default AbstractAdapter.extend({
+ address: "timelineWebAddress",
+ restNameSpace: "timelineV2",
+ serverName: "YTS",
+
+ pathForType(modelName) {
+ return 'run-uid'; // move to some common place, return path by modelname.
+ }
+});
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/application.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/application.js
index 2effb13..30c5d70 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/application.js
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/application.js
@@ -48,7 +48,12 @@ export default Ember.Controller.extend({
html = html + ' class="active"';
}
html = html + '>Nodes' +
- '(current)';
+ '(current)
Flow Activities(current)';
return Ember.String.htmlSafe(html);
}.property('currentPath')
});
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow-activity.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow-activity.js
new file mode 100644
index 0000000..56c0339
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow-activity.js
@@ -0,0 +1,86 @@
+/**
+ * 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 TableDef from 'em-table/utils/table-definition';
+import ColumnDef from 'em-table/utils/column-definition';
+
+function createColumn() {
+ var columns = [];
+
+ // Generate columns
+ columns.push({
+ id: 'cluster',
+ headerTitle: 'Cluster Name',
+ contentPath: 'cluster',
+ observePath: true
+ });
+
+ columns.push({
+ id: 'user',
+ headerTitle: 'User',
+ contentPath: 'user',
+ observePath: true
+ });
+
+ columns.push({
+ id: 'flowName',
+ headerTitle: 'Flow Name',
+ contentPath: 'flowName',
+ observePath: true,
+ cellComponentName: 'em-table-linked-cell',
+ getCellContent: function (row) {
+ return {
+ routeName: 'yarn-flow',
+ id: row.get('uid'),
+ displayText: row.get('flowName')
+ };
+ }
+ });
+
+ columns.push({
+ id: 'execdate',
+ headerTitle: 'Last Execution Date',
+ contentPath: 'lastExecDate',
+ observePath: true
+ });
+
+ return ColumnDef.make(columns);
+}
+
+export default Ember.Controller.extend({
+ //columns: ColumnDef.makeFromModel(YarnFlowList),
+ columns: createColumn(),
+ rows: function() {
+ var data = [],
+ row;
+ // Generate static part of data
+ this.get('model').forEach(function(currFlow) {
+ row = Ember.Object.create();
+ row.set('flowName', currFlow.get('flowName'));
+ row.set('user', currFlow.get('user'));
+ row.set('cluster', currFlow.get('cluster'));
+ row.set('lastExecDate', currFlow.get('lastExecDate'));
+ row.set('uid', currFlow.get('uid'));
+ data.push(row);
+ });
+
+ return Ember.A(data);
+ }.property('model')
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow.js
new file mode 100644
index 0000000..cf20457
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flow.js
@@ -0,0 +1,120 @@
+/**
+ * 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 Converter from 'yarn-ui/utils/converter';
+
+import TableDef from 'em-table/utils/table-definition';
+import ColumnDef from 'em-table/utils/column-definition';
+
+function createColumn() {
+ var columns = [];
+
+ // Generate columns
+ columns.push({
+ id: 'flowName',
+ headerTitle: 'Flow Name',
+ contentPath: 'flowName',
+ observePath: true
+ });
+
+ columns.push({
+ id: 'user',
+ headerTitle: 'User',
+ contentPath: 'user',
+ observePath: true
+ });
+
+ columns.push({
+ id: 'runid',
+ headerTitle: 'Run ID',
+ contentPath: 'runid',
+ observePath: true,
+ cellComponentName: 'em-table-linked-cell',
+ getCellContent: function (row) {
+ return {
+ routeName: 'yarn-flowrun',
+ id: row.get('uid'),
+ displayText: row.get('shownid')
+ };
+ }
+ });
+
+ columns.push({
+ id: 'createTime',
+ headerTitle: 'Creation Time',
+ contentPath: 'createTime',
+ observePath: true
+ });
+
+ columns.push({
+ id: 'endTime',
+ headerTitle: 'End Time',
+ contentPath: 'endTime',
+ observePath: true
+ });
+
+ return ColumnDef.make(columns);
+}
+
+export default Ember.Controller.extend({
+ columns: createColumn(),
+ rows: function() {
+ var data = [],
+ row;
+ // Generate static part of data
+ this.get('model').forEach(function(currFlow) {
+ row = Ember.Object.create();
+ row.set('flowName', currFlow.get('flowName'));
+ row.set('runid', currFlow.get('runid'));
+ row.set('type', currFlow.get('type'));
+ row.set('createTime', currFlow.get('createTime'));
+ row.set('endTime', currFlow.get('endTime'));
+ row.set('user', currFlow.get('user'));
+ row.set('uid', currFlow.get('uid'));
+ row.set('shownid', currFlow.get('shownid'));
+ data.push(row);
+ });
+ return Ember.A(data);
+ }.property('model'),
+ flowName: function() {
+ var flowName;
+ this.get('model').forEach(function(flowrun) {
+ flowName = flowrun.get('flowName');
+ });
+ return flowName;
+ }.property('model'),
+ earliestStartTime: function() {
+ var earliestStart = Number.MAX_VALUE;
+ this.get('model').forEach(function(flowrun) {
+ if (flowrun.get('createTimeRaw') < earliestStart) {
+ earliestStart = flowrun.get('createTimeRaw');
+ }
+ });
+ return Converter.timeStampToDate(earliestStart);
+ }.property('model'),
+ latestFinishTime: function() {
+ var latestFinish = 0;
+ this.get('model').forEach(function(flowrun) {
+ if (flowrun.get('endTimeRaw') > latestFinish) {
+ latestFinish = flowrun.get('endTimeRaw');
+ }
+ });
+ return Converter.timeStampToDate(latestFinish);
+ }.property('model')
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun.js
new file mode 100644
index 0000000..c5982da
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-flowrun.js
@@ -0,0 +1,66 @@
+/**
+ * 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 TableDef from 'em-table/utils/table-definition';
+import ColumnDef from 'em-table/utils/column-definition';
+
+function createColumn() {
+ var columns = [];
+
+ // Generate columns
+ columns.push({
+ id: 'appId',
+ headerTitle: 'Application ID',
+ contentPath: 'appId',
+ observePath: true,
+ cellComponentName: 'em-table-linked-cell',
+ getCellContent: function (row) {
+ return {
+ routeName: 'yarn-app',
+ id: row.get('appId'),
+ displayText: row.get('appId')
+ };
+ }
+ });
+
+ columns.push({
+ id: 'appType',
+ headerTitle: 'Application Type',
+ contentPath: 'type',
+ observePath: true
+ });
+
+ return ColumnDef.make(columns);
+}
+
+export default Ember.Controller.extend({
+ columns: createColumn(),
+ rows: function() {
+ var data = [],
+ row;
+ this.get('apps').forEach(function(currApp) {
+ row = Ember.Object.create();
+ row.set('appId', currApp.get('appId'));
+ row.set('type', currApp.get('type'));
+ data.push(row);
+ });
+ return Ember.A(data);
+ }.property('model')
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-flowrun.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-flowrun.js
new file mode 100644
index 0000000..64daf72
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app-flowrun.js
@@ -0,0 +1,24 @@
+/**
+ * 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 DS from 'ember-data';
+
+export default DS.Model.extend({
+ appId: DS.attr('string'),
+ type: DS.attr('string')
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flow-activity.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flow-activity.js
new file mode 100644
index 0000000..b93778f
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flow-activity.js
@@ -0,0 +1,28 @@
+/**
+ * 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 DS from 'ember-data';
+
+export default DS.Model.extend({
+ cluster: DS.attr('string'),
+ flowName: DS.attr('string'),
+ lastExecDate: DS.attr('string'),
+ user: DS.attr('string'),
+ flowruns: DS.attr('string'),
+ uid: DS.attr('string')
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun-brief.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun-brief.js
new file mode 100644
index 0000000..f5aeb04
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun-brief.js
@@ -0,0 +1,32 @@
+/**
+ * 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 DS from 'ember-data';
+
+export default DS.Model.extend({
+ flowName: DS.attr('string'),
+ runid: DS.attr('string'),
+ shownid: DS.attr('string'),
+ type: DS.attr('string'),
+ createTime: DS.attr('string'),
+ createTimeRaw: DS.attr(),
+ endTime: DS.attr('string'),
+ endTimeRaw: DS.attr(),
+ user: DS.attr('string'),
+ uid: DS.attr('string')
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun.js
new file mode 100644
index 0000000..a837750
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-flowrun.js
@@ -0,0 +1,31 @@
+/**
+ * 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 DS from 'ember-data';
+
+// For now, similar to yarn-flowrun-brief, but may add more in future.
+
+export default DS.Model.extend({
+ flowName: DS.attr('string'),
+ runid: DS.attr('string'),
+ shownid: DS.attr('string'),
+ type: DS.attr('string'),
+ createTime: DS.attr('string'),
+ endTime: DS.attr('string'),
+ user: DS.attr('string'),
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/router.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/router.js
index 8f7ce5f..dd23e96 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/router.js
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/router.js
@@ -40,6 +40,9 @@ Router.map(function() {
this.route('cluster-overview');
this.route('yarn-app', { path: '/yarn-app/:app_id' });
this.route('yarn-app-attempt', { path: '/yarn-app-attempt/:app_attempt_id'});
+ this.route('yarn-flow-activity');
+ this.route('yarn-flow', { path: '/yarn-flow/:flow_uid'});
+ this.route('yarn-flowrun', { path: '/yarn-flowrun/:flowrun_uid'});
this.route('error');
this.route('notfound', { path: '*:' });
});
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow-activity.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow-activity.js
new file mode 100644
index 0000000..f2431c0
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow-activity.js
@@ -0,0 +1,30 @@
+/**
+ * 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';
+
+export default Ember.Route.extend({
+ model() {
+ return this.store.findAll('yarn-flow-activity');
+ },
+
+ /*setupController: function(controller, model) {
+ controller.set('flowList', this.get('model'));
+ this._super(controller, model)
+ }*/
+});
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow.js
new file mode 100644
index 0000000..73878f8
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flow.js
@@ -0,0 +1,25 @@
+/**
+ * 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';
+
+export default Ember.Route.extend({
+ model(params) {
+ return this.store.query('yarn-flowrun-brief', {flowuid: params.flow_uid});
+ }
+});
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun.js
new file mode 100644
index 0000000..54dd703
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-flowrun.js
@@ -0,0 +1,41 @@
+/**
+ * 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';
+
+export default Ember.Route.extend({
+ model: function(params) {
+ console.log('flowrun uid:', params.flowrun_uid);
+ return Ember.RSVP.hash({
+ flowrun: this.store.findRecord('yarn-flowrun', params.flowrun_uid),
+ apps: this.store.query('yarn-app-flowrun', {flowrunUid: params.flowrun_uid})
+ // apps: this.store.query('yarn-app-flowrun', {flowrunUid: params.flowrun_uid}).then(this.store.('yarn-app-flowrun', function(item) {
+ // return item.info.UID.startsWith(params.flowrun_uid);
+ // }))
+ });
+ },
+ setupController: function(controller, model) {
+ controller.set('flowrun', model.flowrun);
+ controller.set('apps', model.apps);
+ },
+ actions: {
+ reload: function() {
+ this.modelFor('apps').reload()
+ }
+ }
+});
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-flowrun.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-flowrun.js
new file mode 100644
index 0000000..05d2275
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-app-flowrun.js
@@ -0,0 +1,51 @@
+/**
+ * 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 DS from 'ember-data';
+
+export default DS.JSONAPISerializer.extend({
+
+ normalizeSingleResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ var fixedPayload = {
+ id: id,
+ type: primaryModelClass.modelName, // yarn-app
+ attributes: {
+ appId: payload.id,
+ type: payload.info.YARN_APPLICATION_TYPE
+ }
+ };
+
+ return this._super(store, primaryModelClass, fixedPayload, id,
+ requestType);
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ // return expected is { data: [ {}, {} ] }
+ var normalizedArrayResponse = {};
+
+ // payload has apps : { app: [ {},{},{} ] }
+ // need some error handling for ex apps or app may not be defined.
+ normalizedArrayResponse.data = payload.map(singleApp => {
+ return this.normalizeSingleResponse(store, primaryModelClass,
+ singleApp, singleApp.id, requestType);
+ }, this);
+ return normalizedArrayResponse;
+ }
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flow-activity.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flow-activity.js
new file mode 100644
index 0000000..ea46009
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flow-activity.js
@@ -0,0 +1,56 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.JSONAPISerializer.extend({
+
+ normalizeSingleResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ var fixedPayload = {
+ id: id,
+ type: primaryModelClass.modelName, // yarn-timeline-flow
+ attributes: {
+ cluster: payload.info.SYSTEM_INFO_CLUSTER,
+ flowName: payload.info.SYSTEM_INFO_FLOW_NAME,
+ lastExecDate: Converter.timeStampToDateOnly(payload.info.SYSTEM_INFO_DATE),
+ user: payload.info.SYSTEM_INFO_USER,
+ flowruns: payload.flowruns,
+ uid: payload.info.UID
+ }
+ };
+
+ return this._super(store, primaryModelClass, fixedPayload, id,
+ requestType);
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ // return expected is { data: [ {}, {} ] }
+ var normalizedArrayResponse = {};
+
+ // payload has apps : { app: [ {},{},{} ] }
+ // need some error handling for ex apps or app may not be defined.
+ normalizedArrayResponse.data = payload.map(singleEntity => {
+ return this.normalizeSingleResponse(store, primaryModelClass,
+ singleEntity, singleEntity.id, requestType);
+ }, this);
+ return normalizedArrayResponse;
+ }
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun-brief.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun-brief.js
new file mode 100644
index 0000000..178051a
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun-brief.js
@@ -0,0 +1,60 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.JSONAPISerializer.extend({
+
+ normalizeSingleResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ var fixedPayload = {
+ id: id,
+ type: primaryModelClass.modelName, // yarn-app
+ attributes: {
+ flowName: payload.info.SYSTEM_INFO_FLOW_NAME,
+ runid: payload.info.SYSTEM_INFO_FLOW_RUN_ID,
+ shownid: payload.id,
+ type: payload.type,
+ createTime: Converter.timeStampToDate(payload.createdtime),
+ createTimeRaw: payload.createdtime,
+ endTime: Converter.timeStampToDate(payload.info.SYSTEM_INFO_FLOW_RUN_END_TIME),
+ endTimeRaw: payload.info.SYSTEM_INFO_FLOW_RUN_END_TIME,
+ user: payload.info.SYSTEM_INFO_USER,
+ uid: payload.info.UID
+ }
+ };
+
+ return this._super(store, primaryModelClass, fixedPayload, id,
+ requestType);
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ // return expected is { data: [ {}, {} ] }
+ var normalizedArrayResponse = {};
+
+ // payload has apps : { app: [ {},{},{} ] }
+ // need some error handling for ex apps or app may not be defined.
+ normalizedArrayResponse.data = payload.map(singleApp => {
+ return this.normalizeSingleResponse(store, primaryModelClass,
+ singleApp, singleApp.id, requestType);
+ }, this);
+ return normalizedArrayResponse;
+ }
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun.js
new file mode 100644
index 0000000..195d1f0
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/serializers/yarn-flowrun.js
@@ -0,0 +1,63 @@
+/**
+ * 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 DS from 'ember-data';
+import Converter from 'yarn-ui/utils/converter';
+
+export default DS.JSONAPISerializer.extend({
+
+ internalNormalizeSingleResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ var fixedPayload = {
+ id: id,
+ type: primaryModelClass.modelName,
+ attributes: {
+ flowName: payload.info.SYSTEM_INFO_FLOW_NAME,
+ runid: payload.info.SYSTEM_INFO_FLOW_RUN_ID,
+ shownid: payload.id,
+ type: payload.type,
+ createTime: Converter.timeStampToDate(payload.createdtime),
+ endTime: Converter.timeStampToDate(payload.info.SYSTEM_INFO_FLOW_RUN_END_TIME),
+ user: payload.info.SYSTEM_INFO_USER,
+ }
+ };
+
+ return fixedPayload;
+ },
+
+ normalizeSingleResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ var p = this.internalNormalizeSingleResponse(store,
+ primaryModelClass, payload, id, requestType);
+ return { data: p };
+ },
+
+ normalizeArrayResponse(store, primaryModelClass, payload, id,
+ requestType) {
+ // return expected is { data: [ {}, {} ] }
+ var normalizedArrayResponse = {};
+
+ // payload has apps : { app: [ {},{},{} ] }
+ // need some error handling for ex apps or app may not be defined.
+ normalizedArrayResponse.data = payload.map(singleApp => {
+ return this.internalNormalizeSingleResponse(store, primaryModelClass,
+ singleApp, singleApp.id, requestType);
+ }, this);
+ return normalizedArrayResponse;
+ }
+});
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow-activity.hbs hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow-activity.hbs
new file mode 100644
index 0000000..ef1e3ff
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow-activity.hbs
@@ -0,0 +1,24 @@
+{{!--
+ 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.
+--}}
+
+Recent YARN Flow Activities
+
+{{em-table columns=columns rows=rows model=model}}
+
+{{outlet}}
+
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow.hbs hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow.hbs
new file mode 100644
index 0000000..f3d14f3
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flow.hbs
@@ -0,0 +1,39 @@
+{{!--
+ 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.
+--}}
+
+
+
+
+-
+First run started {{earliestStartTime}}
+
+-
+Last run finished {{latestFinishTime}}
+
+
+
+
+
+Runs in this flow
+
+{{em-table columns=columns rows=rows model=model}}
+
+{{outlet}}
+
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun.hbs hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun.hbs
new file mode 100644
index 0000000..a2c81a8
--- /dev/null
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-flowrun.hbs
@@ -0,0 +1,45 @@
+{{!--
+ 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.
+--}}
+
+
+
+
+-
+Flow name {{flowrun.flowName}}, run sequence id: {{flowrun.runid}}
+
+-
+Launched by: {{flowrun.user}}
+
+-
+Start time: {{flowrun.createTime}}
+
+-
+End time: {{flowrun.endTime}}
+
+
+
+
+
+Applications
+
+{{em-table columns=columns rows=rows}}
+
+{{outlet}}
+
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/converter.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/converter.js
index fd8f491..702f858 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/converter.js
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/utils/converter.js
@@ -85,6 +85,10 @@ export default {
var dateTimeString = moment(parseInt(timeStamp)).format("YYYY/MM/DD HH:mm:ss");
return dateTimeString;
},
+ timeStampToDateOnly: function(timeStamp) {
+ var dateTimeString = moment(parseInt(timeStamp)).format("YYYY/MM/DD");
+ return dateTimeString;
+ },
dateToTimeStamp: function(date) {
if (date) {
var ts = moment(date, "YYYY/MM/DD HH:mm:ss").valueOf();
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js
index 92d0721..c322e79 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/config/default-config.js
@@ -24,9 +24,11 @@ module.exports = { // Yarn UI App configurations
protocolScheme: "http:"
},
namespaces: {
- timeline: 'ws/v1/applicationhistory',
+ applicationHistory: 'ws/v1/applicationhistory',
cluster: 'ws/v1/cluster',
metrics: 'ws/v1/cluster/metrics',
- node: 'ws/v1/node'
+ node: 'ws/v1/node',
+ timeline: 'ws/v1/timeline',
+ timelineV2: 'ws/v2/timeline'
},
};
\ No newline at end of file
diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/package.json hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/package.json
index 40febda..f2c2a52 100644
--- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/package.json
+++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/package.json
@@ -21,6 +21,7 @@
"devDependencies": {
"broccoli-asset-rev": "2.4.2",
"broccoli-funnel": "1.0.1",
+ "em-table": "0.1.6",
"ember-bootstrap": "0.5.1",
"ember-cli": "1.13.13",
"ember-cli-app-version": "1.0.0",