Skip to content

Commit b5b8677

Browse files
committed
Use XContentRegistry in Rest Action
Signed-off-by: Daniel Widdis <[email protected]>
1 parent 296de60 commit b5b8677

File tree

3 files changed

+38
-71
lines changed

3 files changed

+38
-71
lines changed

src/main/java/org/opensearch/ad/AnomalyDetectorExtension.java

+22
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
/*
2+
* Copyright OpenSearch Contributors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*
5+
* The OpenSearch Contributors require contributions made to
6+
* this file be licensed under the Apache-2.0 license or a
7+
* compatible open source license.
8+
*/
9+
110
package org.opensearch.ad;
211

312
import static java.util.Collections.unmodifiableList;
@@ -7,11 +16,15 @@
716
import java.util.stream.Collectors;
817
import java.util.stream.Stream;
918

19+
import org.opensearch.ad.model.AnomalyDetector;
20+
import org.opensearch.ad.model.AnomalyResult;
21+
import org.opensearch.ad.model.DetectorInternalState;
1022
import org.opensearch.ad.rest.RestCreateDetectorAction;
1123
import org.opensearch.ad.settings.AnomalyDetectorSettings;
1224
import org.opensearch.ad.settings.EnabledSetting;
1325
import org.opensearch.client.opensearch.OpenSearchClient;
1426
import org.opensearch.common.settings.Setting;
27+
import org.opensearch.common.xcontent.NamedXContentRegistry;
1528
import org.opensearch.sdk.BaseExtension;
1629
import org.opensearch.sdk.ExtensionRestHandler;
1730
import org.opensearch.sdk.ExtensionsRunner;
@@ -73,6 +86,15 @@ public List<Setting<?>> getSettings() {
7386
);
7487
}
7588

89+
@Override
90+
public List<NamedXContentRegistry.Entry> getNamedXContent() {
91+
// Copied from AnomalyDetectorPlugin getNamedXContent
92+
return ImmutableList.of(AnomalyDetector.XCONTENT_REGISTRY, AnomalyResult.XCONTENT_REGISTRY, DetectorInternalState.XCONTENT_REGISTRY
93+
// Pending Job Scheduler Integration
94+
// AnomalyDetectorJob.XCONTENT_REGISTRY
95+
);
96+
}
97+
7698
// TODO: replace or override client object on BaseExtension
7799
// https://github.com/opensearch-project/opensearch-sdk-java/issues/160
78100
public OpenSearchClient getClient() {

src/main/java/org/opensearch/ad/rest/RestCreateDetectorAction.java

+14-71
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
1+
/*
2+
* Copyright OpenSearch Contributors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*
5+
* The OpenSearch Contributors require contributions made to
6+
* this file be licensed under the Apache-2.0 license or a
7+
* compatible open source license.
8+
*/
9+
110
package org.opensearch.ad.rest;
211

312
import static org.opensearch.ad.model.AnomalyDetector.ANOMALY_DETECTORS_INDEX;
413
import static org.opensearch.ad.settings.AnomalyDetectorSettings.ANOMALY_DETECTORS_INDEX_MAPPING_FILE;
514
import static org.opensearch.common.xcontent.XContentParserUtils.ensureExpectedToken;
615
import static org.opensearch.rest.RestRequest.Method.POST;
716
import static org.opensearch.rest.RestStatus.BAD_REQUEST;
17+
import static org.opensearch.rest.RestStatus.CREATED;
818
import static org.opensearch.rest.RestStatus.NOT_FOUND;
919
import static org.opensearch.rest.RestStatus.OK;
1020

@@ -13,7 +23,6 @@
1323
import java.net.URL;
1424
import java.nio.charset.StandardCharsets;
1525
import java.time.Instant;
16-
import java.util.ArrayList;
1726
import java.util.List;
1827

1928
import org.apache.logging.log4j.LogManager;
@@ -22,8 +31,6 @@
2231
import org.opensearch.ad.constant.CommonErrorMessages;
2332
import org.opensearch.ad.indices.AnomalyDetectionIndices;
2433
import org.opensearch.ad.model.AnomalyDetector;
25-
import org.opensearch.ad.model.AnomalyResult;
26-
import org.opensearch.ad.model.DetectorInternalState;
2734
import org.opensearch.ad.settings.EnabledSetting;
2835
import org.opensearch.client.json.JsonpMapper;
2936
import org.opensearch.client.opensearch.OpenSearchClient;
@@ -38,21 +45,10 @@
3845
import org.opensearch.common.xcontent.XContentType;
3946
import org.opensearch.extensions.rest.ExtensionRestRequest;
4047
import org.opensearch.extensions.rest.ExtensionRestResponse;
41-
import org.opensearch.index.query.BoolQueryBuilder;
42-
import org.opensearch.index.query.NestedQueryBuilder;
43-
import org.opensearch.index.query.QueryBuilder;
44-
import org.opensearch.index.query.RangeQueryBuilder;
45-
import org.opensearch.plugins.SearchPlugin;
4648
import org.opensearch.rest.RestHandler.Route;
4749
import org.opensearch.rest.RestRequest.Method;
48-
import org.opensearch.rest.RestStatus;
4950
import org.opensearch.sdk.ExtensionRestHandler;
5051
import org.opensearch.sdk.ExtensionsRunner;
51-
import org.opensearch.search.aggregations.BaseAggregationBuilder;
52-
import org.opensearch.search.aggregations.bucket.filter.FilterAggregationBuilder;
53-
import org.opensearch.search.aggregations.bucket.filter.InternalFilter;
54-
import org.opensearch.search.aggregations.metrics.InternalSum;
55-
import org.opensearch.search.aggregations.metrics.SumAggregationBuilder;
5652

5753
import com.google.common.base.Charsets;
5854
import com.google.common.io.Resources;
@@ -61,13 +57,11 @@
6157
public class RestCreateDetectorAction implements ExtensionRestHandler {
6258
private static final Logger logger = LogManager.getLogger(RestCreateDetectorAction.class);
6359

64-
private final AnomalyDetectorExtension anomalyDetectorExtension;
6560
private final OpenSearchClient sdkClient;
66-
private final ExtensionsRunner extensionsRunner;
61+
private final NamedXContentRegistry xContentRegistry;
6762

6863
public RestCreateDetectorAction(ExtensionsRunner runner, AnomalyDetectorExtension extension) {
69-
this.extensionsRunner = runner;
70-
this.anomalyDetectorExtension = extension;
64+
this.xContentRegistry = runner.getNamedXContentRegistry().getRegistry();
7165
this.sdkClient = extension.getClient();
7266
}
7367

@@ -112,56 +106,6 @@ private IndexResponse indexAnomalyDetector(AnomalyDetector anomalyDetector) thro
112106

113107
}
114108

115-
public List<NamedXContentRegistry.Entry> getNamedXWriteables() {
116-
List<NamedXContentRegistry.Entry> entries = new ArrayList<>();
117-
entries.add(AnomalyDetector.XCONTENT_REGISTRY);
118-
entries.add(AnomalyResult.XCONTENT_REGISTRY);
119-
entries.add(DetectorInternalState.XCONTENT_REGISTRY);
120-
entries
121-
.add(
122-
registerQuery(
123-
new SearchPlugin.QuerySpec<>(NestedQueryBuilder.NAME, NestedQueryBuilder::new, NestedQueryBuilder::fromXContent)
124-
)
125-
);
126-
entries
127-
.add(registerQuery(new SearchPlugin.QuerySpec<>(BoolQueryBuilder.NAME, BoolQueryBuilder::new, BoolQueryBuilder::fromXContent)));
128-
entries
129-
.add(
130-
registerAggregation(
131-
new SearchPlugin.AggregationSpec(SumAggregationBuilder.NAME, SumAggregationBuilder::new, SumAggregationBuilder.PARSER)
132-
.addResultReader(InternalSum::new)
133-
)
134-
);
135-
136-
entries
137-
.add(
138-
registerAggregation(
139-
new SearchPlugin.AggregationSpec(
140-
FilterAggregationBuilder.NAME,
141-
FilterAggregationBuilder::new,
142-
FilterAggregationBuilder::parse
143-
).addResultReader(InternalFilter::new)
144-
)
145-
);
146-
entries
147-
.add(
148-
registerQuery(new SearchPlugin.QuerySpec<>(RangeQueryBuilder.NAME, RangeQueryBuilder::new, RangeQueryBuilder::fromXContent))
149-
);
150-
return entries;
151-
152-
}
153-
154-
private NamedXContentRegistry.Entry registerQuery(SearchPlugin.QuerySpec<?> spec) {
155-
return new NamedXContentRegistry.Entry(QueryBuilder.class, spec.getName(), (p, c) -> spec.getParser().fromXContent(p));
156-
}
157-
158-
private NamedXContentRegistry.Entry registerAggregation(SearchPlugin.AggregationSpec spec) {
159-
return new NamedXContentRegistry.Entry(BaseAggregationBuilder.class, spec.getName(), (p, c) -> {
160-
String name = (String) c;
161-
return spec.getParser().parse(p, name);
162-
});
163-
}
164-
165109
private CreateIndexRequest initAnomalyDetectorIndex() {
166110
JsonpMapper mapper = sdkClient._transport().jsonpMapper();
167111
JsonParser parser = null;
@@ -201,13 +145,12 @@ public ExtensionRestResponse handleRequest(ExtensionRestRequest request) {
201145
);
202146
}
203147

204-
NamedXContentRegistry xContentRegistry = new NamedXContentRegistry(getNamedXWriteables());
205148
XContentParser parser;
206149
AnomalyDetector detector;
207150
XContentBuilder builder = null;
208151
CreateIndexRequest createIndexRequest;
209152
try {
210-
parser = request.contentParser(xContentRegistry);
153+
parser = request.contentParser(this.xContentRegistry);
211154
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.nextToken(), parser);
212155
detector = AnomalyDetector.parse(parser);
213156
createIndexRequest = initAnomalyDetectorIndex();
@@ -222,7 +165,7 @@ public ExtensionRestResponse handleRequest(ExtensionRestRequest request) {
222165
builder.field("seqNo", indexResponse.seqNo());
223166
builder.field("primaryTerm", indexResponse.primaryTerm());
224167
builder.field("detector", detector);
225-
builder.field("status", RestStatus.CREATED);
168+
builder.field("status", CREATED);
226169
builder.endObject();
227170
} catch (IOException e) {
228171
e.printStackTrace();

src/main/resources/ad-extension.yml

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
extensionName: ad-extension
22
hostAddress: 127.0.0.1
33
hostPort: 4532
4+
opensearchAddress: 127.0.0.1
5+
opensearchPort: 9200

0 commit comments

Comments
 (0)