@Override protected void callInternal() throws BackendException { String jobName = plannedJob.getJobSpec().getName(); String aCommand = replacedCode; try { int exitCode = runner.exec(aCommand); if (exitCode == BashRunner.SUCCESS) { reporting.mark("chronos.query." + jobName + "." + "passed"); setStatus(0); } else { String error = runner.getError(); String aMessage = genErrorMessage(plannedJob.getJobSpec(), error); handleException(new Exception(aMessage)); } } catch (BackendException ex) { handleException(ex); } finally { runner.clean(); } }
public CallableScript(PlannedJob plannedJob, JobDao dao, Reporting reporting, long jobId, String hostname, MailInfo mailInfo, Session session, int attemptNumber) { this.plannedJob = plannedJob; this.dao = dao; this.reporting = reporting; this.jobId = jobId; this.mailInfo = mailInfo; this.session = session; this.attemptNumber = attemptNumber; setReplacedCode(); runner = new BashRunner(); runner.init(); }
@Test(timeout=2000) public void testScriptReplace() { JobSpec aJob = getTestScript("Doug Lea", dao); String strFormat = "YYYYMMdd"; DateTimeFormatter format = QueryReplaceUtil.makeDateTimeFormat(strFormat); DateTime now = Utils.getCurrentTime(); String command = String.format("echo '${%s-1D} ${%s}' >&2; exit 1;", strFormat, strFormat); String error = String.format("%s %s", format.print(now.minusDays(1)), format.print(now)); aJob.setCode(command); dao.createJob(aJob); runRunnable(agentDriver); waitUntilJobsFinished(consumer, 1); CallableJob actual = dao.getJobRuns(null, AgentConsumer.LIMIT_JOB_RUNS).get(1L); assertEquals(false, actual.isSuccess()); assertEquals(true, actual.isFailed()); String expected = CallableScript.genErrorMessage(aJob, error+"\n"); assertEquals(expected, actual.getExceptionMessage().get()); }
public CallableJob assembleCallableJob(PlannedJob plannedJob, int attemptNumber) { switch(plannedJob.getJobSpec().getType()) { case Query: { SupportedDriver driver = SupportedDriver.getSupportedDriverFromString( plannedJob.getJobSpec().getDriver(), drivers); return new CallableQuery(plannedJob, dao, reporter, hostname, mailInfo, session, driver, reportRootPath, attemptNumber); } case Script: return new CallableScript(plannedJob, dao, reporter, -1L, hostname, mailInfo, session, attemptNumber); default: throw new UnsupportedOperationException( String.format("Unknown jobtype...%s", plannedJob.getJobSpec().getType())); } }
@Test(timeout=2000) public void testScriptRunFail() { JobSpec aJob = getTestScript("Chenoweth", dao); String error = "error"; aJob.setCode(String.format("echo '%s' >&2; exit 1;", error)); dao.createJob(aJob); runRunnable(agentDriver); runRunnable(consumer); waitUntilJobsFinished(consumer, 1); CallableJob actual = dao.getJobRuns(null, AgentConsumer.LIMIT_JOB_RUNS).get(1L); assertEquals(false, actual.isSuccess()); assertEquals(true, actual.isFailed()); String expected = CallableScript.genErrorMessage(aJob, error+"\n"); assertEquals(expected, actual.getExceptionMessage().get()); }