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>

Reply via email to