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 fc52f7c..824fb9b 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 @@ -38,4 +38,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/controllers/yarn-app.js b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-app.js index f699a22..b5ec939 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-app.js +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-ui/src/main/webapp/app/controllers/yarn-app.js @@ -41,5 +41,11 @@ export default Ember.Controller.extend({ amHostAddress = 'http://' + amHostAddress; } return amHostAddress; - }) + }), + + isKillable: Ember.computed("model.app.state", function () { + const killableStates = ['NEW', 'NEW_SAVING', 'SUBMITTED', 'ACCEPTED', 'RUNNING']; + return killableStates.indexOf(this.get("model.app.state")) > -1; + }), + killMessage: '' }); 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..d98e5ff 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,21 @@ export default AbstractRoute.extend({ }); }, + actions: { + killApplication(app) { + var self = this; + const adapter = this.store.adapterFor('yarn-app'); + adapter.sendKillApplication(app.id).then(function(json) { + // success + self.refresh(); + }, function(reason) { + // error + console.log(reason); + self.controller.set('killMessage', reason); + }); + } + }, + 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..57efef0 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 @@ -106,6 +106,18 @@ + {{#if isKillable}} +
+ + {{#if killMessage}} + + {{killMessage}} + + {{/if}} +
+ {{/if}} @@ -255,5 +267,22 @@ --> + + {{/if}} {{outlet}}