/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.ambari.infra.model;
import org.apache.ambari.infra.model.wrapper.JobExecutionData;
import org.springframework.batch.admin.web.JobParametersExtractor;
import org.springframework.batch.core.BatchStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobInstance;
import org.springframework.batch.core.converter.DefaultJobParametersConverter;
import org.springframework.batch.core.converter.JobParametersConverter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.TimeZone;
public class JobExecutionInfoResponse {
private Long id;
private int stepExecutionCount;
private Long jobId;
private String jobName;
private String startDate = "";
private String startTime = "";
private String duration = "";
private JobExecutionData jobExecutionData;
private Properties jobParameters;
private String jobParametersString;
private boolean restartable = false;
private boolean abandonable = false;
private boolean stoppable = false;
private final TimeZone timeZone;
public JobExecutionInfoResponse(JobExecution jobExecution, TimeZone timeZone) {
JobParametersConverter converter = new DefaultJobParametersConverter();
this.jobExecutionData = new JobExecutionData(jobExecution);
this.timeZone = timeZone;
this.id = jobExecutionData.getId();
this.jobId = jobExecutionData.getJobId();
this.stepExecutionCount = jobExecutionData.getStepExecutions().size();
this.jobParameters = converter.getProperties(jobExecutionData.getJobParameters());
this.jobParametersString = (new JobParametersExtractor()).fromJobParameters(jobExecutionData.getJobParameters());
JobInstance jobInstance = jobExecutionData.getJobInstance();
if(jobInstance != null) {
this.jobName = jobInstance.getJobName();
BatchStatus endTime = jobExecutionData.getStatus();
this.restartable = endTime.isGreaterThan(BatchStatus.STOPPING) && endTime.isLessThan(BatchStatus.ABANDONED);
this.abandonable = endTime.isGreaterThan(BatchStatus.STARTED) && endTime != BatchStatus.ABANDONED;
this.stoppable = endTime.isLessThan(BatchStatus.STOPPING);
} else {
this.jobName = "?";
}
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
SimpleDateFormat durationFormat = new SimpleDateFormat("HH:mm:ss");
durationFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
timeFormat.setTimeZone(timeZone);
dateFormat.setTimeZone(timeZone);
if(jobExecutionData.getStartTime() != null) {
this.startDate = dateFormat.format(jobExecutionData.getStartTime());
this.startTime = timeFormat.format(jobExecutionData.getStartTime());
Date endTime1 = jobExecutionData.getEndTime() != null? jobExecutionData.getEndTime():new Date();
this.duration = durationFormat.format(new Date(endTime1.getTime() - jobExecutionData.getStartTime().getTime()));
}
}
public Long getId() {
return id;
}
public int getStepExecutionCount() {
return stepExecutionCount;
}
public Long getJobId() {
return jobId;
}
public String getJobName() {
return jobName;
}
public String getStartDate() {
return startDate;
}
public String getStartTime() {
return startTime;
}
public String getDuration() {
return duration;
}
public JobExecutionData getJobExecutionData() {
return jobExecutionData;
}
public Properties getJobParameters() {
return jobParameters;
}
public String getJobParametersString() {
return jobParametersString;
}
public boolean isRestartable() {
return restartable;
}
public boolean isAbandonable() {
return abandonable;
}
public boolean isStoppable() {
return stoppable;
}
public TimeZone getTimeZone() {
return timeZone;
}
}