001 /** 002 * Copyright (c) 2010 Yahoo! Inc. All rights reserved. 003 * Licensed under the Apache License, Version 2.0 (the "License"); 004 * you may not use this file except in compliance with the License. 005 * You may obtain a copy of the License at 006 * 007 * http://www.apache.org/licenses/LICENSE-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, software 010 * distributed under the License is distributed on an "AS IS" BASIS, 011 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012 * See the License for the specific language governing permissions and 013 * limitations under the License. See accompanying LICENSE file. 014 */ 015 package org.apache.oozie.servlet; 016 017 import java.io.IOException; 018 import java.util.List; 019 020 import javax.servlet.http.HttpServletRequest; 021 import javax.servlet.http.HttpServletResponse; 022 023 import org.apache.hadoop.conf.Configuration; 024 import org.apache.oozie.DagEngine; 025 import org.apache.oozie.DagEngineException; 026 import org.apache.oozie.ErrorCode; 027 import org.apache.oozie.WorkflowJobBean; 028 import org.apache.oozie.WorkflowsInfo; 029 import org.apache.oozie.client.OozieClient; 030 import org.apache.oozie.client.rest.JsonTags; 031 import org.apache.oozie.client.rest.RestConstants; 032 import org.apache.oozie.service.DagEngineService; 033 import org.apache.oozie.service.Services; 034 import org.json.simple.JSONObject; 035 036 public class V0JobsServlet extends BaseJobsServlet { 037 038 private static final String INSTRUMENTATION_NAME = "v0jobs"; 039 040 public V0JobsServlet() { 041 super(INSTRUMENTATION_NAME); 042 } 043 044 045 /** 046 * v0 service implementation to submit a workflow job 047 */ 048 @Override 049 protected JSONObject submitJob(HttpServletRequest request, Configuration conf) throws XServletException, IOException { 050 051 JSONObject json = new JSONObject(); 052 053 try { 054 String action = request.getParameter(RestConstants.ACTION_PARAM); 055 if (action != null && !action.equals(RestConstants.JOB_ACTION_START)) { 056 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0303, RestConstants.ACTION_PARAM, action); 057 } 058 boolean startJob = (action != null); 059 String user = conf.get(OozieClient.USER_NAME); 060 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(user, getAuthToken(request)); 061 String id = dagEngine.submitJob(conf, startJob); 062 json.put(JsonTags.JOB_ID, id); 063 } 064 catch (DagEngineException ex) { 065 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 066 } 067 068 return json; 069 } 070 071 /** 072 * v0 service implementation to get a JSONObject representation of a job from its external ID 073 */ 074 @Override 075 protected JSONObject getJobIdForExternalId(HttpServletRequest request, String externalId) throws XServletException, IOException { 076 JSONObject json = new JSONObject(); 077 try { 078 DagEngine dagEngine = Services.get().get(DagEngineService.class) 079 .getDagEngine(getUser(request), getAuthToken(request)); 080 String jobId = dagEngine.getJobIdForExternalId(externalId); 081 json.put(JsonTags.JOB_ID, jobId); 082 } 083 catch (DagEngineException ex) { 084 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 085 } 086 return json; 087 } 088 089 /** 090 * v0 service implementation to get a list of workflows, with filtering or interested windows embedded in the 091 * request object 092 */ 093 @Override 094 protected JSONObject getJobs(HttpServletRequest request) throws XServletException, IOException { 095 JSONObject json = new JSONObject(); 096 try { 097 String filter = request.getParameter(RestConstants.JOBS_FILTER_PARAM); 098 String startStr = request.getParameter(RestConstants.OFFSET_PARAM); 099 String lenStr = request.getParameter(RestConstants.LEN_PARAM); 100 int start = (startStr != null) ? Integer.parseInt(startStr) : 1; 101 start = (start < 1) ? 1 : start; 102 int len = (lenStr != null) ? Integer.parseInt(lenStr) : 50; 103 len = (len < 1) ? 50 : len; 104 DagEngine dagEngine = Services.get().get(DagEngineService.class) 105 .getDagEngine(getUser(request), getAuthToken(request)); 106 WorkflowsInfo jobs = dagEngine.getJobs(filter, start, len); 107 List<WorkflowJobBean> jsonWorkflows = jobs.getWorkflows(); 108 json.put(JsonTags.WORKFLOWS_JOBS, WorkflowJobBean.toJSONArray(jsonWorkflows)); 109 json.put(JsonTags.WORKFLOWS_TOTAL, jobs.getTotal()); 110 json.put(JsonTags.WORKFLOWS_OFFSET, jobs.getStart()); 111 json.put(JsonTags.WORKFLOWS_LEN, jobs.getLen()); 112 113 } 114 catch (DagEngineException ex) { 115 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 116 } 117 118 return json; 119 } 120 }