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    
019    import javax.servlet.http.HttpServletRequest;
020    import javax.servlet.http.HttpServletResponse;
021    
022    import org.apache.hadoop.conf.Configuration;
023    import org.apache.oozie.DagEngine;
024    import org.apache.oozie.DagEngineException;
025    import org.apache.oozie.client.rest.JsonBean;
026    import org.apache.oozie.service.DagEngineService;
027    import org.apache.oozie.service.Services;
028    import org.json.simple.JSONObject;
029    import org.apache.oozie.ErrorCode;
030    
031    @SuppressWarnings("serial")
032    public class V0JobServlet extends BaseJobServlet {
033    
034        private static final String INSTRUMENTATION_NAME = "v0job";
035    
036        public V0JobServlet() {
037            super(INSTRUMENTATION_NAME);
038        }
039    
040        /*
041         * v0 service method to start a job
042         */
043        @Override
044        protected void startJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
045                IOException {
046            DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
047                                                                                          getAuthToken(request));
048    
049            String jobId = getResourceName(request);
050            try {
051                dagEngine.start(jobId);
052            }
053            catch (DagEngineException ex) {
054                throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
055            }
056        }
057    
058        /*
059         * v0 service method to resume a job
060         */
061        @Override
062        protected void resumeJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
063                IOException {
064            DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
065                                                                                          getAuthToken(request));
066    
067            String jobId = getResourceName(request);
068            try {
069                dagEngine.resume(jobId);
070            }
071            catch (DagEngineException ex) {
072                throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
073            }
074        }
075    
076        /*
077         * v0 service method to suspend a job
078         */
079        @Override
080        protected void suspendJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
081                IOException {
082            DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
083                                                                                          getAuthToken(request));
084    
085            String jobId = getResourceName(request);
086            try {
087                dagEngine.suspend(jobId);
088            }
089            catch (DagEngineException ex) {
090                throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
091            }
092        }
093    
094        /*
095         * v0 service method to kill a job
096         */
097        @Override
098        protected void killJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
099                IOException {
100            DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
101                                                                                          getAuthToken(request));
102    
103            String jobId = getResourceName(request);
104            try {
105                dagEngine.kill(jobId);
106            }
107            catch (DagEngineException ex) {
108                throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
109            }
110        }
111    
112        /*
113         * v0 service method to change a job
114         */
115        protected void changeJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
116                IOException {
117            // This code should not be reached. But if it happens somehow, we throw
118            // bad request exception.
119            throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E1014);
120        }
121    
122        /*
123         * v0 service method to reRun a job
124         */
125        @Override
126        protected JSONObject reRunJob(HttpServletRequest request, HttpServletResponse response, Configuration conf)
127                throws XServletException, IOException {
128            DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
129                                                                                          getAuthToken(request));
130    
131            String jobId = getResourceName(request);
132            try {
133                dagEngine.reRun(jobId, conf);
134            }
135            catch (DagEngineException ex) {
136                throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
137            }
138            return null;
139        }
140    
141        /*
142         * v0 service method to get a job in JsonBean representation
143         */
144        @Override
145        protected JsonBean getJob(HttpServletRequest request, HttpServletResponse response) throws XServletException,
146                IOException {
147            DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
148                                                                                          getAuthToken(request));
149    
150            JsonBean jobBean = null;
151            String jobId = getResourceName(request);
152            try {
153                jobBean = (JsonBean) dagEngine.getJob(jobId);
154            }
155            catch (DagEngineException ex) {
156                throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
157            }
158    
159            return jobBean;
160        }
161    
162        /*
163         * v0 service method to get a job definition in String format
164         */
165        @Override
166        protected String getJobDefinition(HttpServletRequest request, HttpServletResponse response)
167                throws XServletException, IOException {
168            DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
169                                                                                          getAuthToken(request));
170    
171            String wfDefinition = null;
172            String jobId = getResourceName(request);
173            try {
174                wfDefinition = dagEngine.getDefinition(jobId);
175            }
176            catch (DagEngineException ex) {
177                throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
178            }
179            return wfDefinition;
180        }
181    
182        /*
183         * v0 service method to stream a job log into response object
184         */
185        @Override
186        protected void streamJobLog(HttpServletRequest request, HttpServletResponse response) throws XServletException,
187                IOException {
188            DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request),
189                                                                                          getAuthToken(request));
190    
191            String jobId = getResourceName(request);
192            try {
193                dagEngine.streamLog(jobId, response.getWriter());
194            }
195            catch (DagEngineException ex) {
196                throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex);
197            }
198        }
199    
200    }