All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hubspot.singularity.data.history.BlendedHistoryHelper Maven / Gradle / Ivy

package com.hubspot.singularity.data.history;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import com.google.common.collect.Lists;
import com.hubspot.singularity.SingularityTask;
import com.hubspot.singularity.SingularityTaskHistoryUpdate;
import com.hubspot.singularity.SingularityTaskId;
import com.hubspot.singularity.SingularityTaskIdHistory;
import com.hubspot.singularity.data.TaskManager;

public abstract class BlendedHistoryHelper {

  protected abstract List getFromZk(Q id);
  protected abstract List getFromHistory(Q id, int historyStart, int numFromHistory);

  public List getTaskHistoriesFor(TaskManager taskManager, Collection taskIds) {
    Map tasks = taskManager.getTasks(taskIds);
    Map> map = taskManager.getTaskHistoryUpdates(taskIds);

    List histories = Lists.newArrayListWithCapacity(taskIds.size());

    for (SingularityTaskId taskId : taskIds) {
      List historyUpdates = map.get(taskId);
      SingularityTask task = tasks.get(taskId);
      if (task != null) {
        histories.add(SingularityTaskIdHistory.fromTaskIdAndTaskAndUpdates(taskId, task, historyUpdates));
      }
    }

    Collections.sort(histories);
    return histories;
  }

  public List getBlendedHistory(Q id, Integer limitStart, Integer limitCount) {
    final List fromZk = getFromZk(id);

    final int numFromZk = Math.max(0, Math.min(limitCount, fromZk.size() - limitStart));

    final Integer numFromHistory = limitCount - numFromZk;
    final Integer historyStart = Math.max(0, limitStart - fromZk.size());

    List returned = Lists.newArrayListWithCapacity(limitCount);

    if (numFromZk > 0) {
      returned.addAll(fromZk.subList(limitStart, limitStart + numFromZk));
    }

    if (numFromHistory > 0) {
      returned.addAll(getFromHistory(id, historyStart, numFromHistory));
    }

    return returned;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy