All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.hubspot.singularity.data.history.TaskHistoryHelper Maven / Gradle / Ivy
package com.hubspot.singularity.data.history;
import com.google.common.collect.Collections2;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.hubspot.singularity.OrderDirection;
import com.hubspot.singularity.SingularityTask;
import com.hubspot.singularity.SingularityTaskHistory;
import com.hubspot.singularity.SingularityTaskHistoryQuery;
import com.hubspot.singularity.SingularityTaskId;
import com.hubspot.singularity.SingularityTaskIdHistory;
import com.hubspot.singularity.config.SingularityConfiguration;
import com.hubspot.singularity.data.RequestManager;
import com.hubspot.singularity.data.TaskManager;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
@Singleton
public class TaskHistoryHelper
extends BlendedHistoryHelper {
private final TaskManager taskManager;
private final RequestManager requestManager;
private final HistoryManager historyManager;
private final SingularityConfiguration configuration;
@Inject
public TaskHistoryHelper(
TaskManager taskManager,
HistoryManager historyManager,
RequestManager requestManager,
SingularityConfiguration configuration
) {
super(configuration.getDatabaseConfiguration().isPresent());
this.taskManager = taskManager;
this.historyManager = historyManager;
this.requestManager = requestManager;
this.configuration = configuration;
}
private List getFromZk(List requestIds) {
final List inactiveTasksInZk = taskManager.getInactiveTaskIds(
requestIds
);
return getTaskHistoriesFor(taskManager, inactiveTasksInZk);
}
private List getRequestIds(SingularityTaskHistoryQuery query) {
if (query.getRequestId().isPresent()) {
return Collections.singletonList(query.getRequestId().get());
}
return requestManager.getAllRequestIds();
}
@Override
public List getBlendedHistory(
SingularityTaskHistoryQuery query,
Integer limitStart,
Integer limitCount,
boolean canSkipZk
) {
List results = super.getBlendedHistory(
query,
limitStart,
limitCount,
canSkipZk
);
Collections.sort(results, query.getComparator());
return results;
}
@Override
protected List getFromZk(SingularityTaskHistoryQuery query) {
final List filteredHistory = Lists.newArrayList(
Iterables.filter(getFromZk(getRequestIds(query)), query.getHistoryFilter())
);
Collections.sort(filteredHistory, query.getComparator());
return filteredHistory;
}
@Override
protected List getFromHistory(
SingularityTaskHistoryQuery query,
int historyStart,
int numFromHistory
) {
return historyManager.getTaskIdHistory(
query.getRequestId(),
query.getDeployId(),
query.getRunId(),
query.getHost(),
query.getLastTaskStatus(),
query.getStartedBefore(),
query.getStartedAfter(),
query.getUpdatedBefore(),
query.getUpdatedAfter(),
query.getOrderDirection(),
Optional.of(historyStart),
numFromHistory
);
}
public Optional getTask(SingularityTaskId taskId) {
Optional maybeTask = taskManager.getTask(taskId);
if (maybeTask.isPresent()) {
return maybeTask;
}
Optional history = historyManager.getTaskHistory(
taskId.getId()
);
if (history.isPresent()) {
return Optional.of(history.get().getTask());
}
return Optional.empty();
}
public Optional getByRunId(String requestId, String runId) {
for (SingularityTaskIdHistory history : getFromZk(
Collections.singletonList(requestId)
)) {
if (history.getRunId().isPresent() && history.getRunId().get().equals(runId)) {
return Optional.of(history);
}
}
Optional history = historyManager.getTaskHistoryByRunId(
requestId,
runId
);
if (history.isPresent()) {
return Optional.of(
SingularityTaskIdHistory.fromTaskIdAndTaskAndUpdates(
history.get().getTask().getTaskId(),
history.get().getTask(),
history.get().getTaskUpdates()
)
);
}
return Optional.empty();
}
@Override
protected boolean queryUsesZkFirst(SingularityTaskHistoryQuery query) {
if (configuration.isTaskHistoryQueryUsesZkFirst()) {
return true;
}
if (!query.getRequestId().isPresent()) {
return false;
}
if (query.getLastTaskStatus().isPresent()) {
return false;
}
if (query.getHost().isPresent()) {
return false;
}
if (query.getStartedAfter().isPresent()) {
return false;
}
if (query.getStartedBefore().isPresent()) {
return false;
}
if (
query.getOrderDirection().isPresent() &&
query.getOrderDirection().get() == OrderDirection.ASC
) {
return false;
}
return true;
}
@Override
protected Comparator getComparator(
SingularityTaskHistoryQuery query
) {
return query.getComparator();
}
@Override
protected Optional getTotalCount(
SingularityTaskHistoryQuery query,
boolean canSkipZk
) {
final int numFromZk;
if (sqlEnabled && canSkipZk) {
numFromZk = 0;
} else {
numFromZk =
Collections2
.filter(getFromZk(getRequestIds(query)), query.getHistoryFilter())
.size();
}
final int numFromHistory = historyManager.getTaskIdHistoryCount(
query.getRequestId(),
query.getDeployId(),
query.getRunId(),
query.getHost(),
query.getLastTaskStatus(),
query.getStartedBefore(),
query.getStartedAfter(),
query.getUpdatedBefore(),
query.getUpdatedAfter()
);
return Optional.ofNullable(numFromZk + numFromHistory);
}
}