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

com.hubspot.singularity.SingularityTaskHistoryQuery Maven / Gradle / Ivy

The newest version!
package com.hubspot.singularity;

import java.util.Comparator;

import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.collect.ComparisonChain;

public class SingularityTaskHistoryQuery {

  private final Optional requestId;
  private final Optional deployId;
  private final Optional host;
  private final Optional lastTaskStatus;
  private final Optional startedBefore;
  private final Optional startedAfter;
  private final Optional orderDirection;

  public SingularityTaskHistoryQuery(String requestId) {
    this(Optional.of(requestId), Optional. absent(), Optional. absent(), Optional. absent(), Optional. absent(), Optional. absent(),
        Optional. absent());
  }

  public SingularityTaskHistoryQuery(Optional requestId, Optional deployId, Optional host, Optional lastTaskStatus, Optional startedBefore,
      Optional startedAfter, Optional orderDirection) {
    this.requestId = requestId;
    this.deployId = deployId;
    this.host = host;
    this.lastTaskStatus = lastTaskStatus;
    this.startedBefore = startedBefore;
    this.startedAfter = startedAfter;
    this.orderDirection = orderDirection;
  }

  public Optional getRequestId() {
    return requestId;
  }

  public Optional getDeployId() {
    return deployId;
  }

  public Optional getHost() {
    return host;
  }

  public Optional getLastTaskStatus() {
    return lastTaskStatus;
  }

  public Optional getStartedBefore() {
    return startedBefore;
  }

  public Optional getStartedAfter() {
    return startedAfter;
  }

  public Optional getOrderDirection() {
    return orderDirection;
  }

  public Predicate getHistoryFilter() {
    return new Predicate() {

      @Override
      public boolean apply(SingularityTaskIdHistory input) {
        final SingularityTaskId taskId = input.getTaskId();

        if (requestId.isPresent() && !requestId.get().equals(taskId.getRequestId())) {
          return false;
        }

        if (host.isPresent() && !host.get().equals(taskId.getHost())) {
          return false;
        }

        if (deployId.isPresent() && !deployId.get().equals(taskId.getDeployId())) {
          return false;
        }

        if (lastTaskStatus.isPresent()) {
          if (!input.getLastTaskState().isPresent()) {
            return false;
          }

          if (lastTaskStatus.get() != input.getLastTaskState().get()) {
            return false;
          }
        }

        if (startedAfter.isPresent() && startedAfter.get() >= taskId.getStartedAt()) {
          return false;
        }

        if (startedBefore.isPresent() && startedBefore.get() <= taskId.getStartedAt()) {
          return false;
        }

        return true;
      }

    };
  }

  public Comparator getComparator() {
    final OrderDirection localOrderDirection = orderDirection.or(OrderDirection.DESC);

    return new Comparator() {

      @Override
      public int compare(SingularityTaskIdHistory o1, SingularityTaskIdHistory o2) {
        ComparisonChain chain = ComparisonChain.start();

        if (localOrderDirection == OrderDirection.ASC) {
          chain = chain.compare(o1.getTaskId().getStartedAt(), o2.getTaskId().getStartedAt());
        } else {
          chain = chain.compare(o2.getTaskId().getStartedAt(), o1.getTaskId().getStartedAt());
        }

        return chain.compare(o1.getTaskId().getRequestId(), o2.getTaskId().getRequestId()).result();
      }

    };
  }

  @Override
  public String toString() {
    return "SingularityTaskHistoryQuery [requestId=" + requestId + ", deployId=" + deployId + ", host=" + host + ", lastTaskStatus=" + lastTaskStatus + ", startedBefore=" + startedBefore
        + ", startedAfter=" + startedAfter + ", orderDirection=" + orderDirection + "]";
  }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy