List of usage examples for org.springframework.batch.core JobExecution getEndTime
public Date getEndTime()
From source file:org.trpr.platform.batch.impl.spring.admin.repository.MapJobExecutionDao.java
/** * Returns a copy of {@link JobExecution}, by adding new Objects for every field(no references are passed) * /*from www .ja v a2s . co m*/ * @param original JobExecution to be copied * @return JobExecution copy */ private static JobExecution copy(JobExecution original) { JobInstance jobInstance = original.getJobInstance(); JobExecution copy; if (jobInstance == null) { copy = new JobExecution(original.getId()); } copy = new JobExecution(jobInstance, original.getId()); if (original.getStartTime() != null) { copy.setStartTime((Date) original.getStartTime().clone()); } if (original.getEndTime() != null) { copy.setEndTime((Date) original.getEndTime().clone()); } if (original.getStatus() != null) { copy.setStatus(BatchStatus.valueOf(original.getStatus().name())); } if (original.getExitStatus() != null) { copy.setExitStatus(new ExitStatus(original.getExitStatus().getExitCode(), original.getExitStatus().getExitDescription())); } if (original.getCreateTime() != null) { copy.setCreateTime((Date) original.getCreateTime().clone()); } if (original.getLastUpdated() != null) { copy.setLastUpdated((Date) original.getLastUpdated().clone()); } copy.setVersion(original.getVersion()); return copy; }
From source file:admin.history.JobExecutionHistory.java
public void append(JobExecution jobExecution) { if (jobExecution.getEndTime() == null) { // ignore unfinished executions return;//w w w .j av a2s . co m } Date startTime = jobExecution.getStartTime(); Date endTime = jobExecution.getEndTime(); long time = endTime.getTime() - startTime.getTime(); duration.append(time); }
From source file:no.magott.training.ex2.CurrencyImportIntegrationTest.java
@Test public void batchRunsComplete() throws Exception { JobExecution jobExecution = launchJob(); assertThat(jobExecution.getExitStatus().getExitCode(), equalTo(ExitStatus.COMPLETED.getExitCode())); assertThat(jobExecution.getEndTime(), notNullValue()); }
From source file:de.codecentric.batch.metrics.MetricsListener.java
@Override public void afterJob(JobExecution jobExecution) { long jobDuration = jobExecution.getEndTime().getTime() - jobExecution.getStartTime().getTime(); gaugeService.submit(TIMER_PREFIX + jobExecution.getJobInstance().getJobName() + ".duration", jobDuration); // What the f*** is that Thread.sleep doing here? ;-) // Metrics are written asynchronously to Spring Boot's repository. In our tests we experienced // that sometimes batch execution was so fast that this listener couldn't export the metrics // because they hadn't been written. It all happened in the same millisecond. So we added // a Thread.sleep of 100 milliseconds which gives us enough safety and doesn't hurt anyone. try {/*from w w w .j a va 2 s . c o m*/ Thread.sleep(100); } catch (InterruptedException e) { throw new RuntimeException(e); } // Export Metrics to Console or Remote Systems LOGGER.info(metricsOutputFormatter.format(exportBatchRichGauges(), exportBatchMetrics())); // Codahale if (exporters != null) { for (Exporter exporter : exporters) { if (exporter != null) { LOGGER.info("Exporting Metrics with " + exporter.getClass().getName()); exporter.export(); } } } }
From source file:admin.jmx.SimpleJobExecutionMetrics.java
public Date getLatestEndTime() { JobExecution jobExecution = getLatestJobExecution(jobName); return jobExecution == null ? null : jobExecution.getEndTime(); }
From source file:org.jasig.ssp.util.importer.job.report.ReportGenerator.java
@SuppressWarnings("unchecked") private String buildReport(JobExecution jobExecution) { StringBuffer emailMessage = new StringBuffer(); String EOL = System.getProperty("line.separator"); SimpleDateFormat dt = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss"); long diff = jobExecution.getEndTime().getTime() - jobExecution.getCreateTime().getTime();//as given emailMessage.append("Start Time: " + dt.format(jobExecution.getCreateTime()) + EOL); emailMessage.append("End Time: " + dt.format(jobExecution.getEndTime()) + EOL); emailMessage.append("Duration: " + DurationFormatUtils.formatDurationWords(diff, true, true) + " (" + DurationFormatUtils.formatDurationHMS(diff) + ")" + EOL); emailMessage.append("Job Id: " + jobExecution.getJobId() + EOL); emailMessage.append("Job Paramters: " + jobExecution.getJobParameters() + EOL); emailMessage.append("Job Status: " + jobExecution.getExitStatus().getExitCode() + EOL); emailMessage.append(EOL).append(EOL); emailMessage.append("Job Details: " + EOL); Map<String, ReportEntry> report = (Map<String, ReportEntry>) jobExecution.getExecutionContext() .get("report"); if (report != null) { Set<Entry<String, ReportEntry>> entrySet = report.entrySet(); for (Entry<String, ReportEntry> entry : entrySet) { emailMessage.append(entry.getValue().toString() + EOL); }/*from w w w. ja v a 2 s . co m*/ if (entrySet.size() > 0) emailReport = true; } else { emailMessage.append("NO FILES PROCESSED." + EOL); } emailMessage.append(EOL).append(EOL); emailMessage.append("Errors: " + EOL); List<ErrorEntry> errors = (List<ErrorEntry>) jobExecution.getExecutionContext().get("errors"); List<Throwable> failureExceptions = jobExecution.getAllFailureExceptions(); if (errors != null) { for (ErrorEntry errorEntry : errors) { emailMessage.append(errorEntry.toString() + EOL); emailMessage.append(EOL); } } else if (failureExceptions == null || failureExceptions.size() == 0) { emailMessage.append("No Errors Found." + EOL); } if (failureExceptions != null) { for (Throwable failureException : failureExceptions) { if (ExceptionUtils.indexOfThrowable(failureException, PartialUploadGuardException.class) >= 0 || ExceptionUtils.indexOfThrowable(failureException, BeanCreationException.class) >= 0) { emailReport = true; logger.info("emailReport:" + emailReport); } logger.info("failureException:" + failureException.getClass().getName()); emailMessage.append(failureException.getMessage() + EOL); } } String validations = (String) jobExecution.getExecutionContext().get("databaseValidations"); if (validations != null) { emailMessage.append("Database Validations:" + EOL + validations); } logger.info(emailMessage.toString()); return emailMessage.toString(); }
From source file:de.codecentric.batch.listener.ProtocolListener.java
public void afterJob(JobExecution jobExecution) { StringBuilder protocol = new StringBuilder(); protocol.append("\n"); protocol.append(createFilledLine('*')); protocol.append(createFilledLine('-')); protocol.append("Protocol for " + jobExecution.getJobInstance().getJobName() + " \n"); protocol.append(" Started: " + jobExecution.getStartTime() + "\n"); protocol.append(" Finished: " + jobExecution.getEndTime() + "\n"); protocol.append(" Exit-Code: " + jobExecution.getExitStatus().getExitCode() + "\n"); protocol.append(" Exit-Descr: " + jobExecution.getExitStatus().getExitDescription() + "\n"); protocol.append(" Status: " + jobExecution.getStatus() + "\n"); protocol.append(" Content of Job-ExecutionContext:\n"); for (Entry<String, Object> entry : jobExecution.getExecutionContext().entrySet()) { protocol.append(" " + entry.getKey() + "=" + entry.getValue() + "\n"); }//from www.ja va 2 s .c o m protocol.append(" Job-Parameter: \n"); JobParameters jp = jobExecution.getJobParameters(); for (Iterator<Entry<String, JobParameter>> iter = jp.getParameters().entrySet().iterator(); iter .hasNext();) { Entry<String, JobParameter> entry = iter.next(); protocol.append(" " + entry.getKey() + "=" + entry.getValue() + "\n"); } protocol.append(createFilledLine('-')); for (StepExecution stepExecution : jobExecution.getStepExecutions()) { protocol.append("Step " + stepExecution.getStepName() + " \n"); protocol.append(" ReadCount: " + stepExecution.getReadCount() + "\n"); protocol.append(" WriteCount: " + stepExecution.getWriteCount() + "\n"); protocol.append(" Commits: " + stepExecution.getCommitCount() + "\n"); protocol.append(" SkipCount: " + stepExecution.getSkipCount() + "\n"); protocol.append(" Rollbacks: " + stepExecution.getRollbackCount() + "\n"); protocol.append(" Filter: " + stepExecution.getFilterCount() + "\n"); protocol.append(" Content of Step-ExecutionContext:\n"); for (Entry<String, Object> entry : stepExecution.getExecutionContext().entrySet()) { protocol.append(" " + entry.getKey() + "=" + entry.getValue() + "\n"); } protocol.append(createFilledLine('-')); } protocol.append(createFilledLine('*')); LOGGER.info(protocol.toString()); }
From source file:org.jasig.ssp.util.importer.job.tasklet.BatchFinalizer.java
@Override public void afterJob(JobExecution jobExecution) { List<Throwable> failureExceptions = jobExecution.getAllFailureExceptions(); if (failureExceptions != null) { for (Throwable failureException : failureExceptions) { if (ExceptionUtils.indexOfThrowable(failureException, JobInterruptedException.class) >= 0) { return; }//from ww w . jav a 2 s . co m } } logger.info("Files deleted and archived"); Long diff = TimeUnit.MILLISECONDS .toMinutes(jobExecution.getEndTime().getTime() - jobExecution.getStartTime().getTime()); logger.info("Job Duration in minutes: " + diff.toString()); try { if (!archiveFiles.equals(ArchiveType.NONE)) { try { archive(); } catch (Exception e) { logger.error("Error Archiving. Proceeding with file cleanup anyway.", e); } } // Always want to at least attempt clean up. Else behavior of next upload probably isn't what you expect. cleanDirectoryQuietly(processDirectory.getFile()); cleanDirectoryQuietly(upsertDirectory.getFile()); if (!retainInputFiles) { cleanCsvFilesQuietly(inputDirectory.getFile()); } } catch (Exception e) { logger.error("Error Delete Process, Upsert And Input Directory", e); } }
From source file:org.trpr.platform.batch.impl.spring.jmx.JobAdministrator.java
/** * Returns the JobStatistics array for all jobs deployed locally * @return JobStatistics array containing one instance per job deployed locally *//*from ww w .j ava 2s .c o m*/ private JobStatistics[] getStats() { JobStatistics[] jobStatistics = new JobStatistics[this.getJobOperator().getJobNames().size()]; int count = 0; for (String jobName : this.getJobOperator().getJobNames()) { jobStatistics[count] = new JobStatistics(); jobStatistics[count].setHostIP(this.getHostIP()); jobStatistics[count].setHostStartTimeStamp(this.getHostStartTimeStamp()); jobStatistics[count].setJobName(jobName); // get the last run JobInstance if any List<JobInstance> jobInstancesList = this.getJobExplorer().getJobInstances(jobName, 0, 1); // end is set as 1 to get a single element List if (jobInstancesList.size() > 0) { // there is at least one job instance // get the first i.e. the most recent job instance JobInstance jobInstance = jobInstancesList.get(0); // now get all successful JobExecution(s) for this JobInstance List<JobExecution> jobExecutionList = this.getJobExplorer().getJobExecutions(jobInstance); if (jobExecutionList.size() > 0) { // there is at least one job execution for the job instance // get the first i.e. the most recent job execution JobExecution jobExecution = jobExecutionList.get(0); jobStatistics[count].setJobStatus(jobExecution.getStatus().name()); if (jobExecution.getStatus() == BatchStatus.FAILED) { // try to get the exit description from the contained steps that errored out Collection<StepExecution> stepExecutions = jobExecution.getStepExecutions(); for (StepExecution step : stepExecutions) { jobStatistics[count].getJobSteps().add(step.getStepName()); if (step.getExitStatus().getExitCode().equals(ExitStatus.FAILED.getExitCode())) { jobStatistics[count].setJobStepInError(step.getStepName()); jobStatistics[count].setJobMessage(step.getExitStatus().getExitDescription()); } } } else { jobStatistics[count].setJobMessage(jobExecution.getExitStatus().getExitDescription()); } Calendar jobStartTimeStamp = Calendar.getInstance(); jobStartTimeStamp.setTime(jobExecution.getStartTime()); jobStatistics[count].setJobStartTimeStamp(jobStartTimeStamp); Calendar jobEndTimeStamp = Calendar.getInstance(); jobEndTimeStamp.setTime(jobExecution.getEndTime()); jobStatistics[count].setJobEndTimestamp(jobEndTimeStamp); } } count += 1; } return jobStatistics; }
From source file:org.springframework.batch.admin.domain.JobExecutionInfoResource.java
public JobExecutionInfoResource(JobExecution jobExecution, TimeZone timeZone) { if (timeZone != null) { this.timeZone = timeZone; } else {/*from w w w .j ava2 s. c o m*/ this.timeZone = TimeZone.getTimeZone("UTC"); } this.executionId = jobExecution.getId(); this.jobId = jobExecution.getJobId(); this.stepExecutionCount = jobExecution.getStepExecutions().size(); this.jobParameters = jobExecution.getJobParameters(); this.status = jobExecution.getStatus(); this.exitStatus = jobExecution.getExitStatus(); this.jobConfigurationName = jobExecution.getJobConfigurationName(); this.failureExceptions = jobExecution.getFailureExceptions(); Map<String, Object> executionContextEntires = new HashMap<String, Object>( jobExecution.getExecutionContext().size()); for (Map.Entry<String, Object> stringObjectEntry : jobExecution.getExecutionContext().entrySet()) { executionContextEntires.put(stringObjectEntry.getKey(), stringObjectEntry.getValue()); } this.executionContext = executionContextEntires; this.version = jobExecution.getVersion(); JobInstance jobInstance = jobExecution.getJobInstance(); if (jobInstance != null) { this.jobName = jobInstance.getJobName(); BatchStatus status = jobExecution.getStatus(); this.restartable = status.isGreaterThan(BatchStatus.STOPPING) && status.isLessThan(BatchStatus.ABANDONED); this.abandonable = status.isGreaterThan(BatchStatus.STARTED) && status != BatchStatus.ABANDONED; this.stoppable = status.isLessThan(BatchStatus.STOPPING) && status != BatchStatus.COMPLETED; } else { this.jobName = "?"; } this.dateFormat = this.dateFormat.withZone(DateTimeZone.forTimeZone(timeZone)); this.createDate = dateFormat.print(jobExecution.getCreateTime().getTime()); this.lastUpdated = dateFormat.print(jobExecution.getLastUpdated().getTime()); if (jobExecution.getStartTime() != null) { this.startTime = dateFormat.print(jobExecution.getStartTime().getTime()); this.endTime = dateFormat.print(jobExecution.getEndTime().getTime()); } }