Skip to content

Commit

Permalink
anomaly localization integration step 3
Browse files Browse the repository at this point in the history
Signed-off-by: lai <57818076+wnbts@users.noreply.github.com>
  • Loading branch information
wnbts committed Jan 7, 2022
1 parent 503a060 commit d39848f
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 88 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import org.opensearch.common.xcontent.ToXContent;
import org.opensearch.common.xcontent.XContentBuilder;
import org.opensearch.common.xcontent.XContentParser;
import org.opensearch.ml.common.parameter.Output;

import lombok.Data;
import lombok.EqualsAndHashCode;
Expand All @@ -39,15 +40,15 @@
*/
@Data
@NoArgsConstructor
public class Output implements org.opensearch.ml.common.parameter.Output {
public class AnomalyLocalizationOutput implements Output {

public static final String FIELD_RESULTS = "results";
public static final String FIELD_NAME = "name";
public static final String FIELD_RESULT = "result";

private Map<String, Result> results = new HashMap<>(); // aggregation name to result.

public Output(StreamInput in) throws IOException {
public AnomalyLocalizationOutput(StreamInput in) throws IOException {
this.results = in.readMap(StreamInput::readString, Result::new);
}

Expand Down Expand Up @@ -197,26 +198,29 @@ public XContentBuilder toXContent(XContentBuilder builder, ToXContent.Params par
return builder;
}

public static Output parse(XContentParser parser) throws IOException {
Output output = new Output();
public static AnomalyLocalizationOutput parse(XContentParser parser) throws IOException {
AnomalyLocalizationOutput output = new AnomalyLocalizationOutput();
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser);
while (parser.nextToken() != XContentParser.Token.END_OBJECT) {
switch (parser.currentName()) {
case FIELD_RESULTS:
parseResultMapEntry(parser, output);
break;
default:
parser.skipChildren();
break;
}
}
ensureExpectedToken(XContentParser.Token.END_OBJECT, parser.currentToken(), parser);
return output;
}

private static void parseResultMapEntry(XContentParser parser, Output output) throws IOException {
private static void parseResultMapEntry(XContentParser parser, AnomalyLocalizationOutput output) throws IOException {
ensureExpectedToken(XContentParser.Token.START_ARRAY, parser.nextToken(), parser);
while (parser.nextToken() != XContentParser.Token.END_ARRAY) {
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.currentToken(), parser);
String key = null;
Output.Result result = new Output.Result();
AnomalyLocalizationOutput.Result result = new AnomalyLocalizationOutput.Result();
while (parser.nextToken() != XContentParser.Token.END_OBJECT) {
switch (parser.currentName()) {
case FIELD_NAME:
Expand All @@ -226,6 +230,9 @@ private static void parseResultMapEntry(XContentParser parser, Output output) th
case FIELD_RESULT:
parseResult(parser, result);
break;
default:
parser.skipChildren();
break;
}
}
ensureExpectedToken(XContentParser.Token.END_OBJECT, parser.currentToken(), parser);
Expand All @@ -234,14 +241,14 @@ private static void parseResultMapEntry(XContentParser parser, Output output) th
ensureExpectedToken(XContentParser.Token.END_ARRAY, parser.currentToken(), parser);
}

private static void parseResult(XContentParser parser, Output.Result result) throws IOException {
private static void parseResult(XContentParser parser, AnomalyLocalizationOutput.Result result) throws IOException {
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser);
while (parser.nextToken() != XContentParser.Token.END_OBJECT) {
switch (parser.currentName()) {
case Output.Result.FIELD_BUCKETS:
case AnomalyLocalizationOutput.Result.FIELD_BUCKETS:
ensureExpectedToken(XContentParser.Token.START_ARRAY, parser.nextToken(), parser);
while (parser.nextToken() != XContentParser.Token.END_ARRAY) {
Output.Bucket bucket = new Output.Bucket();
AnomalyLocalizationOutput.Bucket bucket = new AnomalyLocalizationOutput.Bucket();
parseBucket(parser, bucket);
result.getBuckets().add(bucket);
}
Expand All @@ -252,58 +259,64 @@ private static void parseResult(XContentParser parser, Output.Result result) thr
ensureExpectedToken(XContentParser.Token.END_OBJECT, parser.currentToken(), parser);
}

private static void parseBucket(XContentParser parser, Output.Bucket bucket) throws IOException {
private static void parseBucket(XContentParser parser, AnomalyLocalizationOutput.Bucket bucket) throws IOException {
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.currentToken(), parser);
while (parser.nextToken() != XContentParser.Token.END_OBJECT) {
switch (parser.currentName()) {
case Output.Bucket.FIELD_START_TIME:
case AnomalyLocalizationOutput.Bucket.FIELD_START_TIME:
parser.nextToken();
bucket.setStartTime(parser.longValue());
break;
case Output.Bucket.FIELD_END_TIME:
case AnomalyLocalizationOutput.Bucket.FIELD_END_TIME:
parser.nextToken();
bucket.setEndTime(parser.longValue());
break;
case Output.Bucket.FIELD_OVERALL_VALUE:
case AnomalyLocalizationOutput.Bucket.FIELD_OVERALL_VALUE:
parser.nextToken();
bucket.setOverallAggValue(parser.doubleValue());
break;
case Output.Bucket.FIELD_ENTITIES:
case AnomalyLocalizationOutput.Bucket.FIELD_ENTITIES:
parseEntities(parser, bucket);
break;
default:
parser.skipChildren();
break;
}
}
ensureExpectedToken(XContentParser.Token.END_OBJECT, parser.currentToken(), parser);
}

private static void parseEntities(XContentParser parser, Output.Bucket bucket) throws IOException {
List<Output.Entity> entities = new ArrayList<>();
private static void parseEntities(XContentParser parser, AnomalyLocalizationOutput.Bucket bucket) throws IOException {
List<AnomalyLocalizationOutput.Entity> entities = new ArrayList<>();
ensureExpectedToken(XContentParser.Token.START_ARRAY, parser.nextToken(), parser);
while (parser.nextToken() != XContentParser.Token.END_ARRAY) {
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.currentToken(), parser);
Output.Entity entity = new Output.Entity();
AnomalyLocalizationOutput.Entity entity = new AnomalyLocalizationOutput.Entity();
while (parser.nextToken() != XContentParser.Token.END_OBJECT) {
switch (parser.currentName()) {
case Output.Entity.FIELD_KEY:
case AnomalyLocalizationOutput.Entity.FIELD_KEY:
List<String> key = new ArrayList<>();
ensureExpectedToken(XContentParser.Token.START_ARRAY, parser.nextToken(), parser);
while (parser.nextToken() != XContentParser.Token.END_ARRAY) {
key.add(parser.text());
}
entity.setKey(key);
break;
case Output.Entity.FIELD_CONTRIBUTION_VALUE:
case AnomalyLocalizationOutput.Entity.FIELD_CONTRIBUTION_VALUE:
parser.nextToken();
entity.setContributionValue(parser.doubleValue());
break;
case Output.Entity.FIELD_BASE_VALUE:
case AnomalyLocalizationOutput.Entity.FIELD_BASE_VALUE:
parser.nextToken();
entity.setBaseValue(parser.doubleValue());
break;
case Output.Entity.FIELD_NEW_VALUE:
case AnomalyLocalizationOutput.Entity.FIELD_NEW_VALUE:
parser.nextToken();
entity.setNewValue(parser.doubleValue());
break;
default:
parser.skipChildren();
break;
}
}
entities.add(entity);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ public interface AnomalyLocalizer {
* @param input Information about aggregation and metadata.
* @param listener Listener to localized details or exception.
*/
void getLocalizationResults(Input input, ActionListener<Output> listener);
void getLocalizationResults(Input input, ActionListener<AnomalyLocalizationOutput> listener);
}
Loading

0 comments on commit d39848f

Please sign in to comment.