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.ServletInputStream; 021 import javax.servlet.http.HttpServletRequest; 022 import javax.servlet.http.HttpServletResponse; 023 024 import org.apache.hadoop.conf.Configuration; 025 import org.apache.oozie.BaseEngineException; 026 import org.apache.oozie.BundleEngine; 027 import org.apache.oozie.BundleEngineException; 028 import org.apache.oozie.CoordinatorActionBean; 029 import org.apache.oozie.CoordinatorActionInfo; 030 import org.apache.oozie.CoordinatorEngine; 031 import org.apache.oozie.CoordinatorEngineException; 032 import org.apache.oozie.DagEngine; 033 import org.apache.oozie.DagEngineException; 034 import org.apache.oozie.ErrorCode; 035 import org.apache.oozie.client.rest.JsonBean; 036 import org.apache.oozie.client.rest.JsonCoordinatorJob; 037 import org.apache.oozie.client.rest.JsonTags; 038 import org.apache.oozie.client.rest.RestConstants; 039 import org.apache.oozie.service.BundleEngineService; 040 import org.apache.oozie.service.CoordinatorEngineService; 041 import org.apache.oozie.service.DagEngineService; 042 import org.apache.oozie.service.Services; 043 import org.apache.oozie.util.XLog; 044 import org.json.simple.JSONObject; 045 046 @SuppressWarnings("serial") 047 public class V1JobServlet extends BaseJobServlet { 048 049 private static final String INSTRUMENTATION_NAME = "v1job"; 050 051 public V1JobServlet() { 052 super(INSTRUMENTATION_NAME); 053 } 054 055 /* 056 * protected method to start a job 057 */ 058 @Override 059 protected void startJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 060 IOException { 061 /* 062 * Configuration conf = new XConfiguration(request.getInputStream()); 063 * String wfPath = conf.get(OozieClient.APP_PATH); String coordPath = 064 * conf.get(OozieClient.COORDINATOR_APP_PATH); 065 * 066 * ServletUtilities.ValidateAppPath(wfPath, coordPath); 067 */ 068 String jobId = getResourceName(request); 069 if (jobId.endsWith("-W")) { 070 startWorkflowJob(request, response); 071 } 072 else if (jobId.endsWith("-B")) { 073 startBundleJob(request, response); 074 } 075 else { 076 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ErrorCode.E0303); 077 } 078 079 } 080 081 /* 082 * protected method to resume a job 083 */ 084 @Override 085 protected void resumeJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 086 IOException { 087 /* 088 * Configuration conf = new XConfiguration(request.getInputStream()); 089 * String wfPath = conf.get(OozieClient.APP_PATH); String coordPath = 090 * conf.get(OozieClient.COORDINATOR_APP_PATH); 091 * 092 * ServletUtilities.ValidateAppPath(wfPath, coordPath); 093 */ 094 String jobId = getResourceName(request); 095 if (jobId.endsWith("-W")) { 096 resumeWorkflowJob(request, response); 097 } 098 else if (jobId.endsWith("-B")) { 099 resumeBundleJob(request, response); 100 } 101 else { 102 resumeCoordinatorJob(request, response); 103 } 104 } 105 106 /* 107 * protected method to suspend a job 108 */ 109 @Override 110 protected void suspendJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 111 IOException { 112 /* 113 * Configuration conf = new XConfiguration(request.getInputStream()); 114 * String wfPath = conf.get(OozieClient.APP_PATH); String coordPath = 115 * conf.get(OozieClient.COORDINATOR_APP_PATH); 116 * 117 * ServletUtilities.ValidateAppPath(wfPath, coordPath); 118 */ 119 String jobId = getResourceName(request); 120 if (jobId.endsWith("-W")) { 121 suspendWorkflowJob(request, response); 122 } 123 else if (jobId.endsWith("-B")) { 124 suspendBundleJob(request, response); 125 } 126 else { 127 suspendCoordinatorJob(request, response); 128 } 129 } 130 131 /* 132 * protected method to kill a job 133 */ 134 @Override 135 protected void killJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 136 IOException { 137 /* 138 * Configuration conf = new XConfiguration(request.getInputStream()); 139 * String wfPath = conf.get(OozieClient.APP_PATH); String coordPath = 140 * conf.get(OozieClient.COORDINATOR_APP_PATH); 141 * 142 * ServletUtilities.ValidateAppPath(wfPath, coordPath); 143 */ 144 String jobId = getResourceName(request); 145 if (jobId.endsWith("-W")) { 146 killWorkflowJob(request, response); 147 } 148 else if (jobId.endsWith("-B")) { 149 killBundleJob(request, response); 150 } 151 else { 152 killCoordinatorJob(request, response); 153 } 154 } 155 156 /** 157 * protected method to change a coordinator job 158 * @param request request object 159 * @param response response object 160 * @throws XServletException 161 * @throws IOException 162 */ 163 protected void changeJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 164 IOException { 165 String jobId = getResourceName(request); 166 if (jobId.endsWith("-B")) { 167 changeBundleJob(request, response); 168 } 169 else { 170 changeCoordinatorJob(request, response); 171 } 172 } 173 174 /* 175 * protected method to reRun a job 176 * 177 * @seeorg.apache.oozie.servlet.BaseJobServlet#reRunJob(javax.servlet.http. 178 * HttpServletRequest, javax.servlet.http.HttpServletResponse, 179 * org.apache.hadoop.conf.Configuration) 180 */ 181 @Override 182 protected JSONObject reRunJob(HttpServletRequest request, HttpServletResponse response, Configuration conf) 183 throws XServletException, IOException { 184 JSONObject json = null; 185 String jobId = getResourceName(request); 186 if (jobId.endsWith("-W")) { 187 reRunWorkflowJob(request, response, conf); 188 } 189 else if (jobId.endsWith("-B")) { 190 rerunBundleJob(request, response, conf); 191 } 192 else { 193 json = reRunCoordinatorActions(request, response, conf); 194 } 195 return json; 196 } 197 198 /* 199 * protected method to get a job in JsonBean representation 200 */ 201 @Override 202 protected JsonBean getJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 203 IOException, BaseEngineException { 204 ServletInputStream is = request.getInputStream(); 205 byte[] b = new byte[101]; 206 while (is.readLine(b, 0, 100) != -1) { 207 XLog.getLog(getClass()).warn("Printing :" + new String(b)); 208 } 209 210 JsonBean jobBean = null; 211 String jobId = getResourceName(request); 212 if (jobId.endsWith("-B")) { 213 jobBean = getBundleJob(request, response); 214 } 215 else { 216 if (jobId.endsWith("-W")) { 217 jobBean = getWorkflowJob(request, response); 218 } 219 else { 220 if (jobId.contains("-W@")) { 221 jobBean = getWorkflowAction(request, response); 222 } 223 else { 224 if (jobId.contains("-C@")) { 225 jobBean = getCoordinatorAction(request, response); 226 } 227 else { 228 jobBean = getCoordinatorJob(request, response); 229 } 230 } 231 } 232 } 233 234 return jobBean; 235 } 236 237 /* 238 * protected method to get a job definition in String format 239 */ 240 @Override 241 protected String getJobDefinition(HttpServletRequest request, HttpServletResponse response) 242 throws XServletException, IOException { 243 String jobDefinition = null; 244 String jobId = getResourceName(request); 245 if (jobId.endsWith("-W")) { 246 jobDefinition = getWorkflowJobDefinition(request, response); 247 } 248 else if (jobId.endsWith("-B")) { 249 jobDefinition = getBundleJobDefinition(request, response); 250 } 251 else { 252 jobDefinition = getCoordinatorJobDefinition(request, response); 253 } 254 return jobDefinition; 255 } 256 257 /* 258 * protected method to stream a job log into response object 259 */ 260 @Override 261 protected void streamJobLog(HttpServletRequest request, HttpServletResponse response) throws XServletException, 262 IOException { 263 String jobId = getResourceName(request); 264 if (jobId.endsWith("-W")) { 265 streamWorkflowJobLog(request, response); 266 } 267 else if (jobId.endsWith("-B")) { 268 streamBundleJob(request, response); 269 } 270 else { 271 streamCoordinatorJobLog(request, response); 272 } 273 } 274 275 /** 276 * Start wf job 277 * 278 * @param request servlet request 279 * @param response servlet response 280 * @throws XServletException 281 */ 282 private void startWorkflowJob(HttpServletRequest request, HttpServletResponse response) throws XServletException { 283 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request), 284 getAuthToken(request)); 285 286 String jobId = getResourceName(request); 287 try { 288 dagEngine.start(jobId); 289 } 290 catch (DagEngineException ex) { 291 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 292 } 293 } 294 295 /** 296 * Start bundle job 297 * 298 * @param request servlet request 299 * @param response servlet response 300 * @throws XServletException 301 */ 302 private void startBundleJob(HttpServletRequest request, HttpServletResponse response) throws XServletException { 303 BundleEngine bundleEngine = Services.get().get(BundleEngineService.class).getBundleEngine(getUser(request), 304 getAuthToken(request)); 305 String jobId = getResourceName(request); 306 try { 307 bundleEngine.start(jobId); 308 } 309 catch (BundleEngineException ex) { 310 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 311 } 312 } 313 314 /** 315 * Resume workflow job 316 * 317 * @param request servlet request 318 * @param response servlet response 319 * @throws XServletException 320 */ 321 private void resumeWorkflowJob(HttpServletRequest request, HttpServletResponse response) throws XServletException { 322 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request), 323 getAuthToken(request)); 324 325 String jobId = getResourceName(request); 326 try { 327 dagEngine.resume(jobId); 328 } 329 catch (DagEngineException ex) { 330 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 331 } 332 } 333 334 /** 335 * Resume bundle job 336 * 337 * @param request servlet request 338 * @param response servlet response 339 * @throws XServletException 340 */ 341 private void resumeBundleJob(HttpServletRequest request, HttpServletResponse response) throws XServletException { 342 BundleEngine bundleEngine = Services.get().get(BundleEngineService.class).getBundleEngine(getUser(request), 343 getAuthToken(request)); 344 String jobId = getResourceName(request); 345 try { 346 bundleEngine.resume(jobId); 347 } 348 catch (BundleEngineException ex) { 349 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 350 } 351 } 352 353 /** 354 * Resume coordinator job 355 * 356 * @param request servlet request 357 * @param response servlet response 358 * @throws XServletException 359 * @throws CoordinatorEngineException 360 */ 361 private void resumeCoordinatorJob(HttpServletRequest request, HttpServletResponse response) 362 throws XServletException { 363 String jobId = getResourceName(request); 364 CoordinatorEngine coordEngine = Services.get().get(CoordinatorEngineService.class).getCoordinatorEngine( 365 getUser(request), getAuthToken(request)); 366 try { 367 coordEngine.resume(jobId); 368 } 369 catch (CoordinatorEngineException ex) { 370 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 371 } 372 } 373 374 /** 375 * Suspend a wf job 376 * 377 * @param request servlet request 378 * @param response servlet response 379 * @throws XServletException 380 */ 381 private void suspendWorkflowJob(HttpServletRequest request, HttpServletResponse response) throws XServletException { 382 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request), 383 getAuthToken(request)); 384 385 String jobId = getResourceName(request); 386 try { 387 dagEngine.suspend(jobId); 388 } 389 catch (DagEngineException ex) { 390 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 391 } 392 } 393 394 /** 395 * Suspend bundle job 396 * 397 * @param request servlet request 398 * @param response servlet response 399 * @throws XServletException 400 */ 401 private void suspendBundleJob(HttpServletRequest request, HttpServletResponse response) throws XServletException { 402 BundleEngine bundleEngine = Services.get().get(BundleEngineService.class).getBundleEngine(getUser(request), 403 getAuthToken(request)); 404 String jobId = getResourceName(request); 405 try { 406 bundleEngine.suspend(jobId); 407 } 408 catch (BundleEngineException ex) { 409 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 410 } 411 } 412 413 /** 414 * Suspend coordinator job 415 * 416 * @param request servlet request 417 * @param response servlet response 418 * @throws XServletException 419 */ 420 private void suspendCoordinatorJob(HttpServletRequest request, HttpServletResponse response) 421 throws XServletException { 422 CoordinatorEngine coordEngine = Services.get().get(CoordinatorEngineService.class).getCoordinatorEngine( 423 getUser(request), getAuthToken(request)); 424 String jobId = getResourceName(request); 425 try { 426 coordEngine.suspend(jobId); 427 } 428 catch (CoordinatorEngineException ex) { 429 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 430 } 431 } 432 433 /** 434 * Kill a wf job 435 * @param request servlet request 436 * @param response servlet response 437 * @throws XServletException 438 */ 439 private void killWorkflowJob(HttpServletRequest request, HttpServletResponse response) throws XServletException { 440 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request), 441 getAuthToken(request)); 442 443 String jobId = getResourceName(request); 444 try { 445 dagEngine.kill(jobId); 446 } 447 catch (DagEngineException ex) { 448 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 449 } 450 } 451 452 /** 453 * Kill a coord job 454 * @param request servlet request 455 * @param response servlet response 456 * @throws XServletException 457 */ 458 private void killCoordinatorJob(HttpServletRequest request, HttpServletResponse response) throws XServletException { 459 CoordinatorEngine coordEngine = Services.get().get(CoordinatorEngineService.class).getCoordinatorEngine( 460 getUser(request), getAuthToken(request)); 461 String jobId = getResourceName(request); 462 try { 463 coordEngine.kill(jobId); 464 } 465 catch (CoordinatorEngineException ex) { 466 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 467 } 468 } 469 470 /** 471 * Kill bundle job 472 * 473 * @param request servlet request 474 * @param response servlet response 475 * @throws XServletException 476 */ 477 private void killBundleJob(HttpServletRequest request, HttpServletResponse response) throws XServletException { 478 BundleEngine bundleEngine = Services.get().get(BundleEngineService.class).getBundleEngine(getUser(request), 479 getAuthToken(request)); 480 String jobId = getResourceName(request); 481 try { 482 bundleEngine.kill(jobId); 483 } 484 catch (BundleEngineException ex) { 485 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 486 } 487 } 488 489 /** 490 * Change a coordinator job 491 * 492 * @param request servlet request 493 * @param response servlet response 494 * @throws XServletException 495 */ 496 private void changeCoordinatorJob(HttpServletRequest request, HttpServletResponse response) 497 throws XServletException { 498 CoordinatorEngine coordEngine = Services.get().get(CoordinatorEngineService.class).getCoordinatorEngine( 499 getUser(request), getAuthToken(request)); 500 String jobId = getResourceName(request); 501 String changeValue = request.getParameter(RestConstants.JOB_CHANGE_VALUE); 502 try { 503 coordEngine.change(jobId, changeValue); 504 } 505 catch (CoordinatorEngineException ex) { 506 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 507 } 508 } 509 510 /** 511 * Change a bundle job 512 * 513 * @param request servlet request 514 * @param response servlet response 515 * @throws XServletException 516 */ 517 private void changeBundleJob(HttpServletRequest request, HttpServletResponse response) 518 throws XServletException { 519 BundleEngine bundleEngine = Services.get().get(BundleEngineService.class).getBundleEngine( 520 getUser(request), getAuthToken(request)); 521 String jobId = getResourceName(request); 522 String changeValue = request.getParameter(RestConstants.JOB_CHANGE_VALUE); 523 try { 524 bundleEngine.change(jobId, changeValue); 525 } 526 catch (BundleEngineException ex) { 527 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 528 } 529 } 530 531 /** 532 * Rerun a wf job 533 * 534 * @param request servlet request 535 * @param response servlet response 536 * @param conf configuration object 537 * @throws XServletException 538 */ 539 private void reRunWorkflowJob(HttpServletRequest request, HttpServletResponse response, Configuration conf) 540 throws XServletException { 541 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request), 542 getAuthToken(request)); 543 544 String jobId = getResourceName(request); 545 try { 546 dagEngine.reRun(jobId, conf); 547 } 548 catch (DagEngineException ex) { 549 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 550 } 551 } 552 553 /** 554 * Rerun bundle job 555 * 556 * @param request servlet request 557 * @param response servlet response 558 * @param conf configration object 559 * @throws XServletException 560 */ 561 private void rerunBundleJob(HttpServletRequest request, HttpServletResponse response, Configuration conf) 562 throws XServletException { 563 JSONObject json = new JSONObject(); 564 BundleEngine bundleEngine = Services.get().get(BundleEngineService.class).getBundleEngine(getUser(request), 565 getAuthToken(request)); 566 String jobId = getResourceName(request); 567 568 String coordScope = request.getParameter(RestConstants.JOB_BUNDLE_RERUN_COORD_SCOPE_PARAM); 569 String dateScope = request.getParameter(RestConstants.JOB_BUNDLE_RERUN_DATE_SCOPE_PARAM); 570 String refresh = request.getParameter(RestConstants.JOB_COORD_RERUN_REFRESH_PARAM); 571 String noCleanup = request.getParameter(RestConstants.JOB_COORD_RERUN_NOCLEANUP_PARAM); 572 573 XLog.getLog(getClass()).info( 574 "Rerun Bundle for jobId=" + jobId + ", coordScope=" + coordScope + ", dateScope=" + dateScope + ", refresh=" 575 + refresh + ", noCleanup=" + noCleanup); 576 577 try { 578 bundleEngine.reRun(jobId, coordScope, dateScope, Boolean.valueOf(refresh), Boolean.valueOf(noCleanup)); 579 } 580 catch (BaseEngineException ex) { 581 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 582 } 583 } 584 585 /** 586 * Rerun coordinator actions 587 * 588 * @param request servlet request 589 * @param response servlet response 590 * @param conf configuration object 591 * @throws XServletException 592 */ 593 @SuppressWarnings("unchecked") 594 private JSONObject reRunCoordinatorActions(HttpServletRequest request, HttpServletResponse response, 595 Configuration conf) throws XServletException { 596 JSONObject json = new JSONObject(); 597 CoordinatorEngine coordEngine = Services.get().get(CoordinatorEngineService.class).getCoordinatorEngine(getUser(request), 598 getAuthToken(request)); 599 600 String jobId = getResourceName(request); 601 602 String rerunType = request.getParameter(RestConstants.JOB_COORD_RERUN_TYPE_PARAM); 603 String scope = request.getParameter(RestConstants.JOB_COORD_RERUN_SCOPE_PARAM); 604 String refresh = request.getParameter(RestConstants.JOB_COORD_RERUN_REFRESH_PARAM); 605 String noCleanup = request.getParameter(RestConstants.JOB_COORD_RERUN_NOCLEANUP_PARAM); 606 607 XLog.getLog(getClass()).info( 608 "Rerun coordinator for jobId=" + jobId + ", rerunType=" + rerunType + ",scope=" + scope + ",refresh=" 609 + refresh + ", noCleanup=" + noCleanup); 610 611 try { 612 CoordinatorActionInfo coordInfo = coordEngine.reRun(jobId, rerunType, scope, Boolean.valueOf(refresh), 613 Boolean.valueOf(noCleanup)); 614 List<CoordinatorActionBean> actions = coordInfo.getCoordActions(); 615 json.put(JsonTags.COORDINATOR_ACTIONS, CoordinatorActionBean.toJSONArray(actions)); 616 } 617 catch (BaseEngineException ex) { 618 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 619 } 620 621 return json; 622 } 623 624 /** 625 * Get workflow job 626 * 627 * @param request servlet request 628 * @param response servlet response 629 * @return JsonBean WorkflowJobBean 630 * @throws XServletException 631 */ 632 private JsonBean getWorkflowJob(HttpServletRequest request, HttpServletResponse response) throws XServletException { 633 JsonBean jobBean = null; 634 String jobId = getResourceName(request); 635 String startStr = request.getParameter(RestConstants.OFFSET_PARAM); 636 String lenStr = request.getParameter(RestConstants.LEN_PARAM); 637 int start = (startStr != null) ? Integer.parseInt(startStr) : 1; 638 start = (start < 1) ? 1 : start; 639 int len = (lenStr != null) ? Integer.parseInt(lenStr) : 0; 640 len = (len < 1) ? Integer.MAX_VALUE : len; 641 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request), 642 getAuthToken(request)); 643 try { 644 jobBean = (JsonBean) dagEngine.getJob(jobId, start, len); 645 } 646 catch (DagEngineException ex) { 647 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 648 } 649 650 return jobBean; 651 } 652 653 /** 654 * Get wf action info 655 * 656 * @param request servlet request 657 * @param response servlet response 658 * @return JsonBean WorkflowActionBean 659 * @throws XServletException 660 */ 661 private JsonBean getWorkflowAction(HttpServletRequest request, HttpServletResponse response) 662 throws XServletException { 663 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request), 664 getAuthToken(request)); 665 666 JsonBean actionBean = null; 667 String actionId = getResourceName(request); 668 try { 669 actionBean = dagEngine.getWorkflowAction(actionId); 670 } 671 catch (BaseEngineException ex) { 672 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 673 } 674 675 return actionBean; 676 } 677 678 /** 679 * Get coord job info 680 * 681 * @param request servlet request 682 * @param response servlet response 683 * @return JsonBean CoordinatorJobBean 684 * @throws XServletException 685 * @throws BaseEngineException 686 */ 687 private JsonBean getCoordinatorJob(HttpServletRequest request, HttpServletResponse response) 688 throws XServletException, BaseEngineException { 689 JsonBean jobBean = null; 690 CoordinatorEngine coordEngine = Services.get().get(CoordinatorEngineService.class).getCoordinatorEngine( 691 getUser(request), getAuthToken(request)); 692 String jobId = getResourceName(request); 693 String startStr = request.getParameter(RestConstants.OFFSET_PARAM); 694 String lenStr = request.getParameter(RestConstants.LEN_PARAM); 695 int start = (startStr != null) ? Integer.parseInt(startStr) : 1; 696 start = (start < 1) ? 1 : start; 697 int len = (lenStr != null) ? Integer.parseInt(lenStr) : 0; 698 len = (len < 1) ? Integer.MAX_VALUE : len; 699 try { 700 JsonCoordinatorJob coordJob = coordEngine.getCoordJob(jobId, start, len); 701 jobBean = coordJob; 702 } 703 catch (CoordinatorEngineException ex) { 704 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 705 } 706 707 return jobBean; 708 } 709 710 /** 711 * Get bundle job info 712 * 713 * @param request servlet request 714 * @param response servlet response 715 * @return JsonBean bundle job bean 716 * @throws XServletException 717 * @throws BaseEngineException 718 */ 719 private JsonBean getBundleJob(HttpServletRequest request, HttpServletResponse response) throws XServletException, 720 BaseEngineException { 721 JsonBean jobBean = null; 722 BundleEngine bundleEngine = Services.get().get(BundleEngineService.class).getBundleEngine(getUser(request), 723 getAuthToken(request)); 724 String jobId = getResourceName(request); 725 726 try { 727 jobBean = (JsonBean) bundleEngine.getBundleJob(jobId); 728 729 return jobBean; 730 } 731 catch (BundleEngineException ex) { 732 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 733 } 734 } 735 736 /** 737 * Get coordinator action 738 * 739 * @param request servlet request 740 * @param response servlet response 741 * @return JsonBean CoordinatorActionBean 742 * @throws XServletException 743 * @throws BaseEngineException 744 */ 745 private JsonBean getCoordinatorAction(HttpServletRequest request, HttpServletResponse response) 746 throws XServletException, BaseEngineException { 747 JsonBean actionBean = null; 748 CoordinatorEngine coordEngine = Services.get().get(CoordinatorEngineService.class).getCoordinatorEngine( 749 getUser(request), getAuthToken(request)); 750 String actionId = getResourceName(request); 751 try { 752 actionBean = coordEngine.getCoordAction(actionId); 753 } 754 catch (CoordinatorEngineException ex) { 755 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 756 } 757 758 return actionBean; 759 } 760 761 /** 762 * Get wf job definition 763 * 764 * @param request servlet request 765 * @param response servlet response 766 * @return String wf definition 767 * @throws XServletException 768 */ 769 private String getWorkflowJobDefinition(HttpServletRequest request, HttpServletResponse response) 770 throws XServletException { 771 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request), 772 getAuthToken(request)); 773 774 String wfDefinition; 775 String jobId = getResourceName(request); 776 try { 777 wfDefinition = dagEngine.getDefinition(jobId); 778 } 779 catch (DagEngineException ex) { 780 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 781 } 782 return wfDefinition; 783 } 784 785 /** 786 * Get bundle job definition 787 * 788 * @param request servlet request 789 * @param response servlet response 790 * @return String bundle definition 791 * @throws XServletException 792 */ 793 private String getBundleJobDefinition(HttpServletRequest request, HttpServletResponse response) throws XServletException { 794 BundleEngine bundleEngine = Services.get().get(BundleEngineService.class).getBundleEngine(getUser(request), 795 getAuthToken(request)); 796 String bundleDefinition; 797 String jobId = getResourceName(request); 798 try { 799 bundleDefinition = bundleEngine.getDefinition(jobId); 800 } 801 catch (BundleEngineException ex) { 802 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 803 } 804 return bundleDefinition; 805 } 806 807 /** 808 * Get coordinator job definition 809 * 810 * @param request servlet request 811 * @param response servlet response 812 * @return String coord definition 813 * @throws XServletException 814 */ 815 private String getCoordinatorJobDefinition(HttpServletRequest request, HttpServletResponse response) 816 throws XServletException { 817 818 CoordinatorEngine coordEngine = Services.get().get(CoordinatorEngineService.class).getCoordinatorEngine( 819 getUser(request), getAuthToken(request)); 820 821 String jobId = getResourceName(request); 822 823 String coordDefinition = null; 824 try { 825 coordDefinition = coordEngine.getDefinition(jobId); 826 } 827 catch (BaseEngineException ex) { 828 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 829 } 830 return coordDefinition; 831 } 832 833 /** 834 * Stream wf job log 835 * 836 * @param request servlet request 837 * @param response servlet response 838 * @throws XServletException 839 * @throws IOException 840 */ 841 private void streamWorkflowJobLog(HttpServletRequest request, HttpServletResponse response) 842 throws XServletException, IOException { 843 DagEngine dagEngine = Services.get().get(DagEngineService.class).getDagEngine(getUser(request), 844 getAuthToken(request)); 845 String jobId = getResourceName(request); 846 try { 847 dagEngine.streamLog(jobId, response.getWriter()); 848 } 849 catch (DagEngineException ex) { 850 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 851 } 852 } 853 854 /** 855 * Stream bundle job log 856 * 857 * @param request servlet request 858 * @param response servlet response 859 * @throws XServletException 860 */ 861 private void streamBundleJob(HttpServletRequest request, HttpServletResponse response) 862 throws XServletException, IOException { 863 BundleEngine bundleEngine = Services.get().get(BundleEngineService.class).getBundleEngine(getUser(request), 864 getAuthToken(request)); 865 String jobId = getResourceName(request); 866 try { 867 bundleEngine.streamLog(jobId, response.getWriter()); 868 } 869 catch (BundleEngineException ex) { 870 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 871 } 872 } 873 874 /** 875 * Stream coordinator job log 876 * 877 * @param request servlet request 878 * @param response servlet response 879 * @throws XServletException 880 * @throws IOException 881 */ 882 private void streamCoordinatorJobLog(HttpServletRequest request, HttpServletResponse response) 883 throws XServletException, IOException { 884 885 CoordinatorEngine coordEngine = Services.get().get(CoordinatorEngineService.class).getCoordinatorEngine( 886 getUser(request), getAuthToken(request)); 887 888 String jobId = getResourceName(request); 889 890 try { 891 coordEngine.streamLog(jobId, response.getWriter()); 892 } 893 catch (BaseEngineException ex) { 894 throw new XServletException(HttpServletResponse.SC_BAD_REQUEST, ex); 895 } 896 } 897 }