package com.linkedin.thirdeye.client;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.Objects;
import com.linkedin.thirdeye.constant.MetricAggFunction;
import com.linkedin.thirdeye.datalayer.dto.DatasetConfigDTO;
import com.linkedin.thirdeye.datalayer.dto.MetricConfigDTO;
public class MetricFunction implements Comparable<MetricFunction> {
private MetricAggFunction functionName;
private String metricName;
private Long metricId;
private String dataset;
private MetricConfigDTO metricConfig;
private DatasetConfigDTO datasetConfig;
public MetricFunction() {
}
public MetricFunction(@JsonProperty("functionName") MetricAggFunction functionName,
@JsonProperty("metricName") String metricName, @JsonProperty("metricId") Long metricId,
@JsonProperty("dataset") String dataset, @JsonProperty("metricConfig") MetricConfigDTO metricConfig,
@JsonProperty("datasetConfig") DatasetConfigDTO datasetConfig) {
this.functionName = functionName;
this.metricName = metricName;
this.metricId = metricId;
this.dataset = dataset;
this.metricConfig = metricConfig;
this.datasetConfig = datasetConfig;
}
private String format(String functionName, String metricName) {
return String.format("%s_%s", functionName, metricName);
}
@Override
public String toString() {
// TODO this is hardcoded for pinot's return column name, but there's no binding contract that
// clients need to return response objects with these keys.
return format(functionName.name(), metricName);
}
@Override
public int hashCode() {
return Objects.hashCode(functionName, metricName, metricId, dataset);
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof MetricFunction)) {
return false;
}
MetricFunction mf = (MetricFunction) obj;
return Objects.equal(functionName, mf.functionName)
&& Objects.equal(metricName, mf.metricName)
&& Objects.equal(metricId, mf.metricId)
&& Objects.equal(dataset, mf.dataset);
}
@Override
public int compareTo(MetricFunction o) {
return this.toString().compareTo(o.toString());
}
public MetricAggFunction getFunctionName() {
return functionName;
}
public String getMetricName() {
return metricName;
}
public void setMetricName(String metricName) {
this.metricName = metricName;
}
public void setFunctionName(MetricAggFunction functionName) {
this.functionName = functionName;
}
public Long getMetricId() {
return metricId;
}
public void setMetricId(Long metricId) {
this.metricId = metricId;
}
public String getDataset() {
return dataset;
}
public void setDataset(String dataset) {
this.dataset = dataset;
}
public MetricConfigDTO getMetricConfig() {
return metricConfig;
}
public void setMetricConfig(MetricConfigDTO metricConfig) {
this.metricConfig = metricConfig;
}
public DatasetConfigDTO getDatasetConfig() {
return datasetConfig;
}
public void setDatasetConfig(DatasetConfigDTO datasetConfig) {
this.datasetConfig = datasetConfig;
}
}