package com.thinkbiganalytics.jobrepo.query.model.transform;
/*-
* #%L
* thinkbig-job-repository-core
* %%
* Copyright (C) 2017 ThinkBig Analytics
* %%
* Licensed 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.
* #L%
*/
import com.thinkbiganalytics.jobrepo.query.model.DefaultExecutedFeed;
import com.thinkbiganalytics.jobrepo.query.model.DefaultFeedHealth;
import com.thinkbiganalytics.jobrepo.query.model.DefaultFeedStatus;
import com.thinkbiganalytics.jobrepo.query.model.DefaultFeedSummary;
import com.thinkbiganalytics.jobrepo.query.model.ExecutedFeed;
import com.thinkbiganalytics.jobrepo.query.model.ExecutionStatus;
import com.thinkbiganalytics.jobrepo.query.model.FeedHealth;
import com.thinkbiganalytics.jobrepo.query.model.FeedStatus;
import com.thinkbiganalytics.metadata.api.feed.LatestFeedJobExecution;
import com.thinkbiganalytics.metadata.api.feed.OpsManagerFeed;
import com.thinkbiganalytics.metadata.api.jobrepo.job.BatchJobExecution;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.Nonnull;
/**
* Transform Feed domain model objects to REST friendly objects
*/
public class FeedModelTransform {
/**
* Transform the BatchJobExectution into an ExecutedFeed object
*
* @param jobExecution the job to transform
* @param feed the feed this job relates to
* @return the ExecutedFeed transformed from the BatchJobExecution
*/
public static ExecutedFeed executedFeed(BatchJobExecution jobExecution, OpsManagerFeed feed) {
return executedFeed(jobExecution, feed.getName());
}
/**
* Transform the BatchJobExectution into an ExecutedFeed object
*
* @param jobExecution the job to transform
* @param feedName the name of the feed the job relates to
* @return the ExecutedFeed transformed from the BatchJobExecution
*/
public static ExecutedFeed executedFeed(BatchJobExecution jobExecution, String feedName) {
DefaultExecutedFeed executedFeed = new DefaultExecutedFeed();
executedFeed.setFeedExecutionId(jobExecution.getJobExecutionId());
executedFeed.setStartTime(jobExecution.getStartTime());
executedFeed.setEndTime(jobExecution.getEndTime());
executedFeed.setExitCode(jobExecution.getExitCode().name());
executedFeed.setExitStatus(jobExecution.getExitMessage());
executedFeed.setStatus(ExecutionStatus.valueOf(jobExecution.getStatus().name()));
executedFeed.setName(feedName);
executedFeed.setRunTime(ModelUtils.runTime(jobExecution.getStartTime(), jobExecution.getEndTime()));
executedFeed.setTimeSinceEndTime(ModelUtils.timeSince(jobExecution.getStartTime(), jobExecution.getEndTime()));
executedFeed.setFeedInstanceId(jobExecution.getJobInstance().getJobInstanceId());
return executedFeed;
}
/**
* Transform the LatestJobExecution into an ExecutedFeed object
*
* @return the ExecutedFeed from the LatestFeedJobExecution
*/
public static ExecutedFeed executedFeed(LatestFeedJobExecution jobExecution) {
DefaultExecutedFeed executedFeed = new DefaultExecutedFeed();
executedFeed.setFeedExecutionId(jobExecution.getJobExecutionId());
executedFeed.setStartTime(jobExecution.getStartTime());
executedFeed.setEndTime(jobExecution.getEndTime());
executedFeed.setExitCode(jobExecution.getExitCode().name());
executedFeed.setExitStatus(jobExecution.getExitMessage());
executedFeed.setStatus(ExecutionStatus.valueOf(jobExecution.getStatus().name()));
executedFeed.setName(jobExecution.getFeedName());
executedFeed.setRunTime(ModelUtils.runTime(jobExecution.getStartTime(), jobExecution.getEndTime()));
executedFeed.setTimeSinceEndTime(ModelUtils.timeSince(jobExecution.getStartTime(), jobExecution.getEndTime()));
executedFeed.setFeedInstanceId(jobExecution.getJobInstanceId());
return executedFeed;
}
/**
* Transform the FeedHealth object into an Executed feed
*
* @return the ExecutedFeed from the FeedHealth object
*/
public static ExecutedFeed executedFeed(com.thinkbiganalytics.metadata.api.feed.FeedHealth feedHealth) {
DefaultExecutedFeed executedFeed = new DefaultExecutedFeed();
executedFeed.setFeedExecutionId(feedHealth.getJobExecutionId());
executedFeed.setStartTime(feedHealth.getStartTime());
executedFeed.setEndTime(feedHealth.getEndTime());
executedFeed.setExitCode(feedHealth.getExitCode().name());
executedFeed.setExitStatus(feedHealth.getExitMessage());
executedFeed.setStatus(ExecutionStatus.valueOf(feedHealth.getStatus().name()));
executedFeed.setName(feedHealth.getFeedName());
executedFeed.setRunTime(ModelUtils.runTime(feedHealth.getStartTime(), feedHealth.getEndTime()));
executedFeed.setTimeSinceEndTime(ModelUtils.timeSince(feedHealth.getStartTime(), feedHealth.getEndTime()));
executedFeed.setFeedInstanceId(feedHealth.getJobInstanceId());
return executedFeed;
}
/**
* Transforms the FeedHealth domain object to the Rest model object
*/
public static List<FeedHealth> feedHealth(List<? extends com.thinkbiganalytics.metadata.api.feed.FeedHealth> domain) {
if (domain != null && !domain.isEmpty()) {
return domain.stream().map(d -> feedHealth(d)).collect(Collectors.toList());
}
return Collections.emptyList();
}
/**
* Transform the FeedHealth domain object to the REST friendly FeedHealth object
*
* @return the transformed FeedHealth object
*/
public static FeedHealth feedHealth(com.thinkbiganalytics.metadata.api.feed.FeedHealth domain) {
FeedHealth feedHealth = new DefaultFeedHealth();
feedHealth.setUnhealthyCount(domain.getFailedCount());
feedHealth.setHealthyCount(domain.getCompletedCount());
feedHealth.setFeed(domain.getFeedName());
feedHealth.setFeedId(domain.getFeedId() != null ? domain.getFeedId().toString() : null);
feedHealth.setLastOpFeed(executedFeed(domain));
return feedHealth;
}
/**
* Transforms the feed object to the REST friendly FeedHealth object, assuming the feed has not yet executed.
*
* @param domain the feed object
* @return the transformed FeedHealth object
*/
@Nonnull
public static FeedHealth feedHealth(@Nonnull final OpsManagerFeed domain) {
final FeedHealth feedHealth = new DefaultFeedHealth();
feedHealth.setUnhealthyCount(0L);
feedHealth.setHealthyCount(0L);
feedHealth.setFeed(domain.getName());
feedHealth.setFeedId(domain.getId() != null ? domain.getId().toString() : null);
return feedHealth;
}
/**
* Transform the list of FeedHealth objects to a FeedStatus object summarizing the feeds.
*
* @return the FeedStatus summarizing the Feeds for the list of FeedHealth objects
*/
public static FeedStatus feedStatus(List<FeedHealth> feedHealth) {
DefaultFeedStatus status = new DefaultFeedStatus(feedHealth);
return status;
}
/**
* Transforms the feed object to a FeedStatus object summarizing the feed, assuming the feed has not yet executed.
*
* @param domain the feed object
* @return the FeedStatus summarizing the Feed
*/
@Nonnull
public static FeedStatus feedStatus(@Nonnull final OpsManagerFeed domain) {
final DefaultFeedStatus status = new DefaultFeedStatus(null);
status.getFeedSummary().add(new DefaultFeedSummary(feedHealth(domain)));
return status;
}
}