package com.linkedin.thirdeye.anomaly.utils; import com.linkedin.thirdeye.anomalydetection.performanceEvaluation.PerformanceEvaluationMethod; import java.io.IOException; import org.apache.http.HttpHost; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpPost; /** * Utility classes for calling detector endpoints to execute/schedule jobs */ public class DetectionResourceHttpUtils extends AbstractResourceHttpUtils { private static final String DETECTION_JOB_ENDPOINT = "/api/detection-job/"; private static final String ADHOC = "/ad-hoc"; private static final String BACKFILL = "/generateAnomaliesInRange"; private static final String AUTOTUNE_FILTER = "autotune/filter/"; private static final String EVAL_FILTER = "eval/filter/"; private static final String EVAL_AUTOTUNE = "eval/autotune/"; private static final String CHECK_HAS_LABELS = "initautotune/checkhaslabel/"; private static final String INIT_AUTOTUNE = "initautotune/filter/"; private static final String REPLAY_FUNCTION = "replay/function/"; public DetectionResourceHttpUtils(String detectionHost, int detectionPort) { super(new HttpHost(detectionHost, detectionPort)); } public String enableAnomalyFunction(String id) throws ClientProtocolException, IOException { HttpPost req = new HttpPost(DETECTION_JOB_ENDPOINT + id); return callJobEndpoint(req); } public String disableAnomalyFunction(String id) throws ClientProtocolException, IOException { HttpDelete req = new HttpDelete(DETECTION_JOB_ENDPOINT + id); return callJobEndpoint(req); } public String runAdhocAnomalyFunction(String id, String startTimeIso, String endTimeIso) throws ClientProtocolException, IOException { HttpPost req = new HttpPost( DETECTION_JOB_ENDPOINT + id + ADHOC + "?start=" + startTimeIso + "&end=" + endTimeIso); return callJobEndpoint(req); } public String runBackfillAnomalyFunction(String id, String startTimeIso, String endTimeIso, boolean forceBackfill) throws ClientProtocolException, IOException { HttpPost req = new HttpPost( DETECTION_JOB_ENDPOINT + id + BACKFILL + "?start=" + startTimeIso + "&end=" + endTimeIso + "&force=" + forceBackfill); return callJobEndpoint(req); } public String runAutoTune(Long functionId, String startTimeIso, String endTimeIso, String autoTuneType, String holidayStarts, String holidayEnds) throws Exception { HttpPost req = new HttpPost( DETECTION_JOB_ENDPOINT + AUTOTUNE_FILTER + functionId + "?start=" + startTimeIso + "&end=" + endTimeIso + "&autoTuneType=" + autoTuneType + "&holidayStarts=" + holidayStarts + "&holidayEnds=" + holidayEnds ); return callJobEndpoint(req); } public String getEvalStatsAlertFilter(Long functionId, String startTimeIso, String endTimeIso, String holidayStarts, String holidayEnds) throws Exception{ HttpPost req = new HttpPost( DETECTION_JOB_ENDPOINT + EVAL_FILTER + functionId + "?start=" + startTimeIso + "&end=" + endTimeIso + "&holidayStarts=" + holidayStarts + "&holidayEnds=" + holidayEnds ); return callJobEndpoint(req); } public String evalAutoTune(long autotuneId, String startTimeIso, String endTimeIso, String holidayStarts, String holidayEnds) throws Exception{ HttpPost req = new HttpPost( DETECTION_JOB_ENDPOINT + EVAL_AUTOTUNE + autotuneId + "?start=" + startTimeIso + "&end=" + endTimeIso + "&holidayStarts=" + holidayStarts + "&holidayEnds=" + holidayEnds ); return callJobEndpoint(req); } public String checkHasLabels(long functionId, String startTimeIso, String endTimeIso, String holidayStarts, String holidayEnds) throws IOException { HttpPost req = new HttpPost( DETECTION_JOB_ENDPOINT + CHECK_HAS_LABELS + functionId + "?start=" + startTimeIso + "&end=" + endTimeIso + "&holidayStarts=" + holidayStarts + "&holidayEnds=" + holidayEnds ); return callJobEndpoint(req); } public String initAutoTune(Long functionId, String startTimeIso, String endTimeIso, String autoTuneType, int nExpected, String holidayStarts, String holidayEnds) throws IOException { HttpPost req = new HttpPost( DETECTION_JOB_ENDPOINT + INIT_AUTOTUNE + functionId + "?start=" + startTimeIso + "&end=" + endTimeIso + "&autoTuneType=" + autoTuneType + "&nExpected=" + nExpected + "&holidayStarts=" + holidayStarts + "&holidayEnds=" + holidayEnds ); return callJobEndpoint(req); } public String runFunctionReplay(Long id, String startTimeISO, String endTimeISO, String tuningParameters, PerformanceEvaluationMethod evaluationMethod, double goal, boolean speedup) throws ClientProtocolException, IOException { HttpPost req = new HttpPost( DETECTION_JOB_ENDPOINT + REPLAY_FUNCTION + id + "?start=" + startTimeISO + "&end=" + endTimeISO + "&tune=" + tuningParameters + "&goal=" + goal + "&evalMethod=" + evaluationMethod.name() + "&speedup=" + Boolean.toString(speedup)); return callJobEndpoint(req); } }