Support dropping jobs.
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/ca106b82 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/ca106b82 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/ca106b82 Branch: refs/heads/master Commit: ca106b824f50613385c98f8276bcbfaa04cb6cde Parents: 8a4b6b9 Author: nichunen <chunen...@kyligence.io> Authored: Wed May 3 15:30:34 2017 +0800 Committer: hongbin ma <m...@kyligence.io> Committed: Thu May 4 22:32:55 2017 +0800 ---------------------------------------------------------------------- .../kylin/rest/controller/JobController.java | 23 +++++++++++++++ .../apache/kylin/rest/service/JobService.java | 6 ++++ webapp/app/js/controllers/job.js | 30 ++++++++++++++++++++ webapp/app/js/model/jobListModel.js | 1 + webapp/app/js/services/jobs.js | 3 +- webapp/app/partials/jobs/jobList.html | 4 +++ 6 files changed, 66 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/ca106b82/server-base/src/main/java/org/apache/kylin/rest/controller/JobController.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/controller/JobController.java b/server-base/src/main/java/org/apache/kylin/rest/controller/JobController.java index 6dc7887..7b1de37 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/controller/JobController.java +++ b/server-base/src/main/java/org/apache/kylin/rest/controller/JobController.java @@ -28,7 +28,9 @@ import java.util.Map; import org.apache.kylin.job.JobInstance; import org.apache.kylin.job.constant.JobStatusEnum; import org.apache.kylin.job.constant.JobTimeFilterEnum; +import org.apache.kylin.job.exception.JobException; import org.apache.kylin.rest.exception.InternalErrorException; +import org.apache.kylin.rest.exception.NotFoundException; import org.apache.kylin.rest.request.JobListRequest; import org.apache.kylin.rest.service.JobService; import org.slf4j.Logger; @@ -194,6 +196,27 @@ public class JobController extends BasicController { } } + /** + * Drop a cube job + * + * @return + * @throws IOException + */ + @RequestMapping(value = "/{jobId}/drop", method = { RequestMethod.DELETE }) + @ResponseBody + public JobInstance dropJob(@PathVariable String jobId) { + JobInstance jobInstance = null; + try { + jobInstance = jobService.getJobInstance(jobId); + jobService.dropJob(jobInstance); + } catch (Exception e) { + logger.error(e.getLocalizedMessage(), e); + throw new InternalErrorException(e); + } + + return jobInstance; + } + public void setJobService(JobService jobService) { this.jobService = jobService; } http://git-wip-us.apache.org/repos/asf/kylin/blob/ca106b82/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java ---------------------------------------------------------------------- diff --git a/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java b/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java index 4ba426e..56a148d 100644 --- a/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java +++ b/server-base/src/main/java/org/apache/kylin/rest/service/JobService.java @@ -321,6 +321,12 @@ public class JobService extends BasicService implements InitializingBean { return job; } + @PreAuthorize(Constant.ACCESS_HAS_ROLE_ADMIN + " or hasPermission(#job, 'ADMINISTRATION') or hasPermission(#job, 'OPERATION') or hasPermission(#job, 'MANAGEMENT')") + public void dropJob(JobInstance job) throws IOException, JobException { + cancelJob(job); + getExecutableManager().deleteJob(job.getId()); + } + /** * currently only support substring match * @return http://git-wip-us.apache.org/repos/asf/kylin/blob/ca106b82/webapp/app/js/controllers/job.js ---------------------------------------------------------------------- diff --git a/webapp/app/js/controllers/job.js b/webapp/app/js/controllers/job.js index e6aba7e..abb3bed 100644 --- a/webapp/app/js/controllers/job.js +++ b/webapp/app/js/controllers/job.js @@ -215,6 +215,36 @@ KylinApp }); } + $scope.drop = function (job) { + SweetAlert.swal({ + title: '', + text: 'Are you sure to drop the job?', + type: '', + showCancelButton: true, + confirmButtonColor: '#DD6B55', + confirmButtonText: "Yes", + closeOnConfirm: true + }, function(isConfirm) { + if(isConfirm) { + loadingRequest.show(); + JobService.drop({jobId: job.uuid}, {}, function (job) { + loadingRequest.hide(); + SweetAlert.swal('Success!', 'Job has been dropped successfully!', 'success'); + $scope.jobList.jobs[job.uuid].dropped = true; + },function(e){ + loadingRequest.hide(); + if(e.data&& e.data.exception){ + var message =e.data.exception; + var msg = !!(message) ? message : 'Failed to take action.'; + SweetAlert.swal('Oops...', msg, 'error'); + }else{ + SweetAlert.swal('Oops...', "Failed to take action.", 'error'); + } + }); + } + }); + } + $scope.diagnosisJob =function(job) { if (!job){ SweetAlert.swal('', "No job selected.", 'info'); http://git-wip-us.apache.org/repos/asf/kylin/blob/ca106b82/webapp/app/js/model/jobListModel.js ---------------------------------------------------------------------- diff --git a/webapp/app/js/model/jobListModel.js b/webapp/app/js/model/jobListModel.js index da35309..ee75d2f 100755 --- a/webapp/app/js/model/jobListModel.js +++ b/webapp/app/js/model/jobListModel.js @@ -38,6 +38,7 @@ KylinApp.service('JobList',function(JobService,$q){ } else { _this.jobs[id] = job; } + _this.jobs[id].dropped = false; }); defer.resolve(jobs.length); http://git-wip-us.apache.org/repos/asf/kylin/blob/ca106b82/webapp/app/js/services/jobs.js ---------------------------------------------------------------------- diff --git a/webapp/app/js/services/jobs.js b/webapp/app/js/services/jobs.js index 3619fbc..337126a 100644 --- a/webapp/app/js/services/jobs.js +++ b/webapp/app/js/services/jobs.js @@ -23,6 +23,7 @@ KylinApp.factory('JobService', ['$resource', function ($resource, config) { stepOutput: {method: 'GET', params: {propName: 'steps', action: 'output'}, isArray: false}, resume: {method: 'PUT', params: {action: 'resume'}, isArray: false}, cancel: {method: 'PUT', params: {action: 'cancel'}, isArray: false}, - pause: {method: 'PUT', params: {action: 'pause'}, isArray: false} + pause: {method: 'PUT', params: {action: 'pause'}, isArray: false}, + drop: {method: 'DELETE', params: {action: 'drop'}, isArray: false} }); }]); http://git-wip-us.apache.org/repos/asf/kylin/blob/ca106b82/webapp/app/partials/jobs/jobList.html ---------------------------------------------------------------------- diff --git a/webapp/app/partials/jobs/jobList.html b/webapp/app/partials/jobs/jobList.html index 4d65ac1..0e45522 100644 --- a/webapp/app/partials/jobs/jobList.html +++ b/webapp/app/partials/jobs/jobList.html @@ -84,6 +84,7 @@ <tbody class="odd table table-striped table-bordered table-hover dataTable no-footer"> <tr ng-repeat="(uuid,job) in jobList.jobs | orderObjectBy:state.filterAttr:state.filterReverse" + ng-if="!job.dropped" ng-class="{accordion:true}" ng-click="state.selectedJob = job" ng-dblclick="state.showSteps= !state.showSteps; state.selectedJob = job" style="cursor: pointer" @@ -142,6 +143,9 @@ <li ng-if="job.job_status=='RUNNING' || job.job_status=='NEW' || job.job_status=='PENDING' || job.job_status=='ERROR' || job.job_status=='STOPPED'"> <a ng-click="cancel(job)">Discard</a> </li> + <li ng-if="job.job_status=='FINISHED' || job.job_status=='DISCARDED' || job.job_status=='ERROR' || job.job_status=='STOPPED'"> + <a ng-click="drop(job)">Drop</a> + </li> <li> <a ng-click="diagnosisJob(job)" tooltip="Download Diagnosis Info For This Job">Diagnosis</a> </li>