package com.linkedin.thirdeye.dashboard.resources;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.validation.constraints.NotNull;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import org.codehaus.jackson.node.ObjectNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
import com.linkedin.thirdeye.anomaly.job.JobConstants.JobStatus;
import com.linkedin.thirdeye.client.DAORegistry;
import com.linkedin.thirdeye.dashboard.Utils;
import com.linkedin.thirdeye.datalayer.bao.JobManager;
import com.linkedin.thirdeye.datalayer.bao.TaskManager;
import com.linkedin.thirdeye.datalayer.dto.IngraphMetricConfigDTO;
import com.linkedin.thirdeye.datalayer.dto.JobDTO;
import com.linkedin.thirdeye.datalayer.dto.TaskDTO;
import com.linkedin.thirdeye.util.JsonResponseUtil;
@Path(value = "/thirdeye-admin/job-info")
@Produces(MediaType.APPLICATION_JSON)
public class JobResource {
private static final Logger LOG = LoggerFactory.getLogger(JobResource.class);
private static final DAORegistry DAO_REGISTRY = DAORegistry.getInstance();
private JobManager jobDao;
private TaskManager taskDao;
public JobResource() {
this.jobDao = DAO_REGISTRY.getJobDAO();
this.taskDao = DAO_REGISTRY.getTaskDAO();
}
@GET
@Path("/listRecentJobs")
@Produces(MediaType.APPLICATION_JSON)
public String listRecentJobs(@DefaultValue("0") @QueryParam("jtStartIndex") int jtStartIndex,
@DefaultValue("10") @QueryParam("jtPageSize") int jtPageSize) {
List<JobDTO> jobDTOs = jobDao.findNRecentJobs(jtStartIndex + jtPageSize);
List<JobDTO> subList = Utils.sublist(jobDTOs, jtStartIndex, jtPageSize);
ObjectNode rootNode = JsonResponseUtil.buildResponseJSON(subList);
return rootNode.toString();
}
@GET
@Path("/listJobsForDataset")
@Produces(MediaType.APPLICATION_JSON)
public String listJobsForDataset(@NotNull @QueryParam("dataset") String dataset, @DefaultValue("0") @QueryParam("jtStartIndex") int jtStartIndex,
@DefaultValue("10") @QueryParam("jtPageSize") int jtPageSize) {
// Map<String, Object> filters = new HashMap<>();
// filters.put("dataset", dataset);
// List<JobDTO> jobDTOs = jobDao.findByParams(filters);
//TODO: we don't have enough info to find jobs for a dataset, may be we should change this to functions?
List<JobDTO> jobDTOs = Collections.emptyList();
ObjectNode rootNode = JsonResponseUtil.buildResponseJSON(jobDTOs);
return rootNode.toString();
}
@GET
@Path("/listTasksForJob")
@Produces(MediaType.APPLICATION_JSON)
public String listTasksForJob(@NotNull @QueryParam("jobId") long jobId) {
Map<String, Object> filters = new HashMap<>();
filters.put("jobId", jobId);
List<TaskDTO> taskDTOs = taskDao.findByParams(filters);
ObjectNode rootNode = JsonResponseUtil.buildResponseJSON(taskDTOs);
return rootNode.toString();
}
}