diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/abstract.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/abstract.js index 0db27a6..ca6fa08 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/abstract.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/abstract.js @@ -24,7 +24,8 @@ export default DS.JSONAPIAdapter.extend({ serverName: null, //Must be set by inheriting classes headers: { - Accept: 'application/json' + 'Accept': 'application/json', + 'Content-Type': 'application/json' }, host: Ember.computed("address", function () { @@ -46,4 +47,4 @@ export default DS.JSONAPIAdapter.extend({ options.targetServer = this.get('serverName'); return this._super(url, method, options); } -}); \ No newline at end of file +}); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app.js index b34c606..755123f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/adapters/yarn-app.js @@ -40,4 +40,13 @@ export default AbstractAdapter.extend({ pathForType(/*modelName*/) { return 'apps'; // move to some common place, return path by modelname. }, + + sendKillApplication(id) { + var url = this._buildURL(); + url += '/apps/' + id + '/state'; + var data = { + "state": "KILLED" + }; + return this.ajax(url, "PUT", { data: data }); + } }); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js index 638e5b0..c7bf2b1 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/models/yarn-app.js @@ -102,5 +102,10 @@ export default DS.Model.extend({ } return "label label-" + style; - }.property("finalStatus") + }.property("finalStatus"), + + isKillable: function() { + const killableStates = ['NEW', 'NEW_SAVING', 'SUBMITTED', 'ACCEPTED', 'RUNNING']; + return killableStates.indexOf(this.get("state")) > -1; + }.property("isKillable") }); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app.js index 86d845c..d36611e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/routes/yarn-app.js @@ -43,6 +43,16 @@ export default AbstractRoute.extend({ }); }, + actions: { + killApplication(app) { + const adapter = this.store.adapterFor('yarn-app'); + adapter.sendKillApplication(app.id); + Ember.run.later(this, function () { + this.refresh(); + }, 500); + } + }, + unloadAll() { this.store.unloadAll('yarn-app'); this.store.unloadAll('yarn-app-attempt'); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs index 8ce8e8b..bcac700 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/templates/yarn-app.hbs @@ -72,6 +72,9 @@ Priority Progress Is Unmanaged AM + {{#if model.app.isKillable}} + + {{/if}} @@ -102,6 +105,11 @@ {{model.app.unmanagedApplication}} + {{#if model.app.isKillable}} + + + + {{/if}}