package com.thinkbiganalytics.jobrepo.query.model;
/*-
* #%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.fasterxml.jackson.annotation.JsonIgnore;
import java.util.concurrent.TimeUnit;
/**
* Feed summary data built via the model transform class.
*
* @see com.thinkbiganalytics.jobrepo.query.model.transform.FeedModelTransform
*/
public class DefaultFeedSummary implements FeedSummary {
private FeedHealth feedHealth;
public DefaultFeedSummary(FeedHealth feedHealth) {
this.feedHealth = feedHealth;
}
public DefaultFeedSummary() {
}
@Override
public String getFeed() {
return feedHealth.getFeed();
}
@Override
public String getState() {
String state = feedHealth.getLastOpFeedState();
return state;
}
@Override
public String getLastStatus() {
if (feedHealth.getLastOpFeed() != null && isWaiting()) {
return feedHealth.getLastOpFeed().getStatus().name();
} else {
return "N/A";
}
}
@Override
public boolean isWaiting() {
return DefaultFeedHealth.STATE.WAITING.equals(DefaultFeedHealth.STATE.valueOf(getState()));
}
@Override
public boolean isRunning() {
return DefaultFeedHealth.STATE.RUNNING.equals(DefaultFeedHealth.STATE.valueOf(getState()));
}
@Override
public Long getTimeSinceEndTime() {
if (feedHealth.getLastOpFeed() != null) {
return feedHealth.getLastOpFeed().getTimeSinceEndTime();
} else {
return null;
}
}
@Override
@JsonIgnore
public String formatTimeMinSec(Long millis) {
if (millis == null) {
return null;
}
Long hours = TimeUnit.MILLISECONDS.toHours(millis);
Long min = TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis));
Long sec = TimeUnit.MILLISECONDS.toSeconds(millis) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis));
String str = String.format("%d hr %d min %d sec",
hours, min, sec);
if (hours == 0L) {
if (min == 0L) {
str = String.format("%d sec",
sec);
} else {
str = String.format("%d min %d sec",
min, sec);
}
}
return str;
}
@Override
public String getTimeSinceEndTimeString() {
return formatTimeMinSec(getTimeSinceEndTime());
}
@Override
public Long getRunTime() {
if (feedHealth.getLastOpFeed() != null) {
return feedHealth.getLastOpFeed().getRunTime();
} else {
return null;
}
}
@Override
public String getRunTimeString() {
return formatTimeMinSec(getRunTime());
}
@Override
public Long getAvgCompleteTime() {
return feedHealth.getAvgRuntime();
}
@Override
public String getAvgCompleteTimeString() {
Long avgRunTime = feedHealth.getAvgRuntime();
if (avgRunTime != null) {
avgRunTime *= 1000; //convert to millis
}
return formatTimeMinSec(avgRunTime);
}
@Override
public boolean isHealthy() {
return feedHealth.isHealthy();
}
@Override
public String getLastExitCode() {
if (feedHealth.getLastOpFeed() != null) {
return feedHealth.getLastOpFeed().getExitCode();
} else {
return null;
}
}
@Override
public FeedHealth getFeedHealth() {
return feedHealth;
}
}