package com.linkedin.thirdeye.anomaly.detection; import java.util.List; import java.util.Objects; import org.joda.time.DateTime; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.google.common.base.MoreObjects; import com.linkedin.thirdeye.anomaly.task.TaskInfo; import com.linkedin.thirdeye.datalayer.dto.AnomalyFunctionDTO; import com.linkedin.thirdeye.util.CustomListDateDeserializer; import com.linkedin.thirdeye.util.CustomListDateSerializer; import com.linkedin.thirdeye.anomaly.detection.DetectionJobContext.DetectionJobType; public class DetectionTaskInfo implements TaskInfo { private long jobExecutionId; @JsonSerialize(using = CustomListDateSerializer.class) @JsonDeserialize(using = CustomListDateDeserializer.class) private List<DateTime> windowStartTime; @JsonSerialize(using = CustomListDateSerializer.class) @JsonDeserialize(using = CustomListDateDeserializer.class) private List<DateTime> windowEndTime; private AnomalyFunctionDTO anomalyFunctionSpec; private String groupByDimension; private DetectionJobType detectionJobType = DetectionJobType.DEFAULT; public DetectionTaskInfo(long jobExecutionId, List<DateTime> windowStartTime, List<DateTime> windowEndTime, AnomalyFunctionDTO anomalyFunctionSpec, String groupByDimension, DetectionJobType detectionJobType) { this.jobExecutionId = jobExecutionId; this.windowStartTime = windowStartTime; this.windowEndTime = windowEndTime; this.anomalyFunctionSpec = anomalyFunctionSpec; this.groupByDimension = groupByDimension; this.detectionJobType = detectionJobType; } public DetectionTaskInfo() { this.detectionJobType = DetectionJobType.DEFAULT; } public long getJobExecutionId() { return jobExecutionId; } public void setJobExecutionId(long jobExecutionId) { this.jobExecutionId = jobExecutionId; } public List<DateTime> getWindowStartTime() { return windowStartTime; } public void setWindowStartTime(List<DateTime> windowStartTime) { this.windowStartTime = windowStartTime; } public List<DateTime> getWindowEndTime() { return windowEndTime; } public void setWindowEndTime(List<DateTime> windowEndTime) { this.windowEndTime = windowEndTime; } public AnomalyFunctionDTO getAnomalyFunctionSpec() { return anomalyFunctionSpec; } public void setAnomalyFunctionSpec(AnomalyFunctionDTO anomalyFunctionSpec) { this.anomalyFunctionSpec = anomalyFunctionSpec; } public String getGroupByDimension() { return groupByDimension; } public void setGroupByDimension(String groupByDimension) { this.groupByDimension = groupByDimension; } public DetectionJobType getDetectionJobType() { return detectionJobType; } public void setDetectionJobType(DetectionJobType detectionJobType) { this.detectionJobType = detectionJobType; } @Override public boolean equals(Object o) { if (!(o instanceof DetectionTaskInfo)) { return false; } DetectionTaskInfo dt = (DetectionTaskInfo) o; return Objects.equals(jobExecutionId, dt.getJobExecutionId()) && Objects.equals(windowStartTime, dt.getWindowStartTime()) && Objects.equals(windowEndTime, dt.getWindowEndTime()) && Objects.equals(anomalyFunctionSpec, dt.getAnomalyFunctionSpec()) && Objects.equals(groupByDimension, dt.getGroupByDimension()); } @Override public int hashCode() { return Objects.hash(jobExecutionId, windowStartTime, windowEndTime, anomalyFunctionSpec, groupByDimension); } @Override public String toString() { return MoreObjects.toStringHelper(this).add("jobExecutionId", jobExecutionId).add("windowStartTime", windowStartTime) .add("windowEndTime", windowEndTime).add("anomalyFunctionSpec", anomalyFunctionSpec) .add("groupByDimension", groupByDimension).toString(); } }