package com.linkedin.thirdeye.dashboard.resources;
import java.util.List;
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 com.linkedin.thirdeye.client.DAORegistry;
import com.linkedin.thirdeye.dashboard.Utils;
import com.linkedin.thirdeye.datalayer.bao.IngraphMetricConfigManager;
import com.linkedin.thirdeye.datalayer.dto.IngraphDashboardConfigDTO;
import com.linkedin.thirdeye.datalayer.dto.IngraphMetricConfigDTO;
import com.linkedin.thirdeye.util.JsonResponseUtil;
@Path(value = "/thirdeye-admin/ingraph-metric-config")
@Produces(MediaType.APPLICATION_JSON)
public class IngraphMetricConfigResource {
private static final DAORegistry DAO_REGISTRY = DAORegistry.getInstance();
private IngraphMetricConfigManager ingraphMetricConfigDao;
public IngraphMetricConfigResource() {
this.ingraphMetricConfigDao = DAO_REGISTRY.getIngraphMetricConfigDAO();
}
@GET
@Path("/create")
public String createMetricConfig(@QueryParam("rrdName") String rrdName,
@QueryParam("metricName") String metricName,
@QueryParam("dashboardName") String dashboardName,
@QueryParam("metricDataType") String metricDataType,
@QueryParam("metricSourceType") String metricSourceType,
@QueryParam("container") String container) {
try {
IngraphMetricConfigDTO ingraphMetricConfigDTO = new IngraphMetricConfigDTO();
ingraphMetricConfigDTO.setRrdName(rrdName);
ingraphMetricConfigDTO.setMetricName(metricName);
ingraphMetricConfigDTO.setDashboardName(dashboardName);
ingraphMetricConfigDTO.setContainer(container);
ingraphMetricConfigDTO.setMetricDataType(metricDataType);
ingraphMetricConfigDTO.setMetricSourceType(metricSourceType);
Long id = ingraphMetricConfigDao.save(ingraphMetricConfigDTO);
ingraphMetricConfigDTO.setId(id);
return JsonResponseUtil.buildResponseJSON(ingraphMetricConfigDTO).toString();
} catch (Exception e) {
return JsonResponseUtil.buildErrorResponseJSON("Failed to create rrd:" + rrdName).toString();
}
}
@GET
@Path("/update")
public String updateMetricConfig(@NotNull @QueryParam("id") long ingraphMetricConfigId,
@QueryParam("rrdName") String rrdName,
@QueryParam("metricName") String metricName,
@QueryParam("dashboardName") String dashboardName,
@QueryParam("metricDataType") String metricDataType,
@QueryParam("metricSourceType") String metricSourceType,
@QueryParam("container") String container) {
try {
IngraphMetricConfigDTO ingraphMetricConfigDTO = ingraphMetricConfigDao.findById(ingraphMetricConfigId);
ingraphMetricConfigDTO.setRrdName(rrdName);
ingraphMetricConfigDTO.setMetricName(metricName);
ingraphMetricConfigDTO.setDashboardName(dashboardName);
ingraphMetricConfigDTO.setContainer(container);
ingraphMetricConfigDTO.setMetricDataType(metricDataType);
ingraphMetricConfigDTO.setMetricSourceType(metricSourceType);
int numRowsUpdated = ingraphMetricConfigDao.update(ingraphMetricConfigDTO);
if (numRowsUpdated == 1) {
return JsonResponseUtil.buildResponseJSON(ingraphMetricConfigDTO).toString();
} else {
return JsonResponseUtil.buildErrorResponseJSON("Failed to update metric id:" + ingraphMetricConfigId).toString();
}
} catch (Exception e) {
return JsonResponseUtil.buildErrorResponseJSON("Failed to update metric id:" + ingraphMetricConfigId + ". Exception:" + e.getMessage()).toString();
}
}
@GET
@Path("/delete")
public String deleteMetricConfig(@NotNull @QueryParam("dashboardName") String dashboardName, @NotNull @QueryParam("id") Long metricConfigId) {
ingraphMetricConfigDao.deleteById(metricConfigId);
return JsonResponseUtil.buildSuccessResponseJSON("Successully deleted " + metricConfigId).toString();
}
@GET
@Path("/list")
@Produces(MediaType.APPLICATION_JSON)
public String viewMetricConfig(@NotNull @QueryParam("dashboardName") String dashboardName, @DefaultValue("0") @QueryParam("jtStartIndex") int jtStartIndex,
@DefaultValue("100") @QueryParam("jtPageSize") int jtPageSize) {
List<IngraphMetricConfigDTO> ingraphMetricConfigDTOs = ingraphMetricConfigDao.findByDashboard(dashboardName);
List<IngraphMetricConfigDTO> subList = Utils.sublist(ingraphMetricConfigDTOs, jtStartIndex, jtPageSize);
ObjectNode rootNode = JsonResponseUtil.buildResponseJSON(subList);
return rootNode.toString();
}
}