This is an automated email from the ASF dual-hosted git repository. jihao pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push: new 9e8e373 [TE] detection - preview a yaml with existing anomalies (#3983) 9e8e373 is described below commit 9e8e3731cd6cc356a421fc3f27b34cba15f1afc8 Author: Jihao Zhang <jihzh...@linkedin.com> AuthorDate: Mon Mar 18 16:23:22 2019 -0700 [TE] detection - preview a yaml with existing anomalies (#3983) Preview a YAML with existing anomalies. --- .../thirdeye/detection/DetectionResource.java | 5 +++ .../thirdeye/detection/yaml/YamlResource.java | 40 ++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/DetectionResource.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/DetectionResource.java index 0b3146a..894b2ac 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/DetectionResource.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/DetectionResource.java @@ -177,6 +177,7 @@ public class DetectionResource { @POST @Path("/preview") + @ApiOperation("preview a detection with detection config json") public Response detectionPreview( @QueryParam("start") long start, @QueryParam("end") long end, @@ -230,6 +231,7 @@ public class DetectionResource { @POST @Path("/preview/{id}") + @ApiOperation("preview a detection with a existing detection config") public Response detectionPreview( @PathParam("id") long id, @QueryParam("start") long start, @@ -340,6 +342,8 @@ public class DetectionResource { */ @POST @Path("/legacy-replay/{id}") + @ApiOperation("Legacy replay endpoint. Replay all the moving windows within start time and end time. " + + "Saves anomaly for each moving window before starting detection for next window and emulates the cron schedule") public Response legacyReplay( @PathParam("id") long configId, @QueryParam("start") long start, @@ -400,6 +404,7 @@ public class DetectionResource { */ @POST @Path("/replay/{id}") + @ApiOperation("Replay for a given time range for a existing detection config id") public Response detectionReplay( @PathParam("id") long detectionId, @QueryParam("start") long start, diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlResource.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlResource.java index 67e7327..98945a5 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlResource.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/YamlResource.java @@ -586,6 +586,46 @@ public class YamlResource { return Response.ok(result).build(); } + @POST + @Path("/preview/{id}") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.TEXT_PLAIN) + @ApiOperation("Preview the anomaly detection result of a YAML configuration, with an existing config and historical anomalies") + public Response yamlPreviewWithHistoricalAnomalies( + @PathParam("id") long id, + @QueryParam("start") long start, + @QueryParam("end") long end, + @QueryParam("tuningStart") long tuningStart, + @QueryParam("tuningEnd") long tuningEnd, + @ApiParam("jsonPayload") String payload) { + Map<String, String> responseMessage = new HashMap<>(); + DetectionPipelineResult result; + long ts = System.currentTimeMillis(); + try { + Preconditions.checkArgument(StringUtils.isNotBlank(payload), "The Yaml Payload in the request is empty."); + DetectionConfigDTO existingConfig = this.detectionConfigDAO.findById(id); + Preconditions.checkNotNull(existingConfig, "can not find existing detection config " + id); + + // Translate config from YAML to detection config (JSON) + Map<String, Object> newDetectionConfigMap = new HashMap<>(ConfigUtils.getMap(this.yaml.load(payload))); + DetectionConfigDTO detectionConfig = buildDetectionConfigFromYaml(tuningStart, tuningEnd, newDetectionConfigMap, existingConfig); + Preconditions.checkNotNull(detectionConfig); + + DetectionPipeline pipeline = this.loader.from(this.provider, detectionConfig, start, end); + result = pipeline.run(); + + } catch (ValidationException e) { + LOG.warn("Validation error while running preview with payload " + payload, e); + responseMessage.put("message", "Validation Error! " + e.getMessage()); + return Response.serverError().entity(responseMessage).build(); + } catch (Exception e) { + LOG.error("Error running preview with payload " + payload, e); + responseMessage.put("message", "Failed to run the preview due to " + e.getMessage()); + return Response.serverError().entity(responseMessage).build(); + } + LOG.info("Preview successful, used {} milliseconds", System.currentTimeMillis() - ts); + return Response.ok(result).build(); + } /** * List all yaml configurations as JSON enhanced with detection config id, isActive and createBy information. --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org