package com.linkedin.thirdeye.dashboard.resources;
import com.linkedin.thirdeye.completeness.checker.DataCompletenessUtils;
import com.linkedin.thirdeye.completeness.checker.PercentCompletenessFunctionInput;
import com.linkedin.thirdeye.datalayer.bao.DataCompletenessConfigManager;
import com.linkedin.thirdeye.datalayer.dto.DataCompletenessConfigDTO;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@Path(value = "/data-completeness")
@Produces(MediaType.APPLICATION_JSON)
public class DataCompletenessResource {
private final DataCompletenessConfigManager dataCompletenessDAO;
public DataCompletenessResource(DataCompletenessConfigManager dataCompletenessDAO) {
this.dataCompletenessDAO = dataCompletenessDAO;
}
@GET
@Path(value = "/percent-completeness")
@Produces(MediaType.APPLICATION_JSON)
public double getPercentCompleteness(String payload) {
PercentCompletenessFunctionInput input = PercentCompletenessFunctionInput.fromJson(payload);
return DataCompletenessUtils.getPercentCompleteness(input);
}
@GET
@Path("/{dataset}/incomplete")
public Response getDataCompletenessForRangeIncomplete(@PathParam("dataset") String dataset,
@QueryParam("start") Long start, @QueryParam("end") Long end) throws Exception {
return makeDataCompletenessResponse(dataset, start, end, false);
}
@GET
@Path("/{dataset}/complete")
public Response getDataCompletenessForRangeComplete(@PathParam("dataset") String dataset,
@QueryParam("start") Long start, @QueryParam("end") Long end) throws Exception {
return makeDataCompletenessResponse(dataset, start, end, true);
}
Response makeDataCompletenessResponse(String dataset, long start, long end, boolean complete) throws Exception {
List<Long> timestamps = getDataCompletenessForRange(dataset, start, end, complete);
return Response.ok().type("application/json").entity(timestamps).build();
}
List<Long> getDataCompletenessForRange(String dataset, long start, long end, boolean complete) {
List<DataCompletenessConfigDTO> dtos = this.dataCompletenessDAO.findAllByDatasetAndInTimeRangeAndStatus(dataset, start, end, complete);
List<Long> timestamps = new ArrayList<>();
for(DataCompletenessConfigDTO dto : dtos) {
timestamps.add(dto.getDateToCheckInMS());
}
return timestamps;
}
}