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
+
1
10
package org .opensearch .ad .rest ;
2
11
3
12
import static org .opensearch .ad .model .AnomalyDetector .ANOMALY_DETECTORS_INDEX ;
4
13
import static org .opensearch .ad .settings .AnomalyDetectorSettings .ANOMALY_DETECTORS_INDEX_MAPPING_FILE ;
5
14
import static org .opensearch .common .xcontent .XContentParserUtils .ensureExpectedToken ;
6
15
import static org .opensearch .rest .RestRequest .Method .POST ;
7
16
import static org .opensearch .rest .RestStatus .BAD_REQUEST ;
17
+ import static org .opensearch .rest .RestStatus .CREATED ;
8
18
import static org .opensearch .rest .RestStatus .NOT_FOUND ;
9
19
import static org .opensearch .rest .RestStatus .OK ;
10
20
11
- import java .io .*;
21
+ import java .io .ByteArrayInputStream ;
22
+ import java .io .IOException ;
12
23
import java .net .URL ;
13
24
import java .nio .charset .StandardCharsets ;
14
25
import java .time .Instant ;
15
- import java .util .ArrayList ;
16
26
import java .util .List ;
17
27
18
28
import org .apache .logging .log4j .LogManager ;
21
31
import org .opensearch .ad .constant .CommonErrorMessages ;
22
32
import org .opensearch .ad .indices .AnomalyDetectionIndices ;
23
33
import org .opensearch .ad .model .AnomalyDetector ;
24
- import org .opensearch .ad .model .AnomalyResult ;
25
- import org .opensearch .ad .model .DetectorInternalState ;
26
34
import org .opensearch .ad .settings .EnabledSetting ;
27
35
import org .opensearch .client .json .JsonpMapper ;
28
36
import org .opensearch .client .opensearch .OpenSearchClient ;
37
45
import org .opensearch .common .xcontent .XContentType ;
38
46
import org .opensearch .extensions .rest .ExtensionRestRequest ;
39
47
import org .opensearch .extensions .rest .ExtensionRestResponse ;
40
- import org .opensearch .index .query .BoolQueryBuilder ;
41
- import org .opensearch .index .query .NestedQueryBuilder ;
42
- import org .opensearch .index .query .QueryBuilder ;
43
- import org .opensearch .index .query .RangeQueryBuilder ;
44
- import org .opensearch .plugins .SearchPlugin ;
45
48
import org .opensearch .rest .RestHandler .Route ;
46
49
import org .opensearch .rest .RestRequest .Method ;
47
- import org .opensearch .rest .RestStatus ;
48
50
import org .opensearch .sdk .ExtensionRestHandler ;
49
- import org .opensearch .search .aggregations .BaseAggregationBuilder ;
50
- import org .opensearch .search .aggregations .bucket .filter .FilterAggregationBuilder ;
51
- import org .opensearch .search .aggregations .bucket .filter .InternalFilter ;
52
- import org .opensearch .search .aggregations .metrics .InternalSum ;
53
- import org .opensearch .search .aggregations .metrics .SumAggregationBuilder ;
51
+ import org .opensearch .sdk .ExtensionsRunner ;
54
52
55
53
import com .google .common .base .Charsets ;
56
54
import com .google .common .io .Resources ;
57
55
import jakarta .json .stream .JsonParser ;
58
56
59
57
public class RestCreateDetectorAction implements ExtensionRestHandler {
60
- private final Logger logger = LogManager .getLogger (RestCreateDetectorAction .class );
61
- private AnomalyDetectorExtension anomalyDetectorExtension = new AnomalyDetectorExtension ();
62
- private OpenSearchClient sdkClient = anomalyDetectorExtension .getClient ();
58
+ private static final Logger logger = LogManager .getLogger (RestCreateDetectorAction .class );
59
+
60
+ private final OpenSearchClient sdkClient ;
61
+ private final NamedXContentRegistry xContentRegistry ;
62
+
63
+ public RestCreateDetectorAction (ExtensionsRunner runner , AnomalyDetectorExtension extension ) {
64
+ this .xContentRegistry = runner .getNamedXContentRegistry ().getRegistry ();
65
+ this .sdkClient = extension .getClient ();
66
+ }
63
67
64
68
@ Override
65
69
public List <Route > routes () {
@@ -101,56 +105,6 @@ private IndexResponse indexAnomalyDetector(AnomalyDetector anomalyDetector) thro
101
105
102
106
}
103
107
104
- public List <NamedXContentRegistry .Entry > getNamedXWriteables () {
105
- List <NamedXContentRegistry .Entry > entries = new ArrayList <>();
106
- entries .add (AnomalyDetector .XCONTENT_REGISTRY );
107
- entries .add (AnomalyResult .XCONTENT_REGISTRY );
108
- entries .add (DetectorInternalState .XCONTENT_REGISTRY );
109
- entries
110
- .add (
111
- registerQuery (
112
- new SearchPlugin .QuerySpec <>(NestedQueryBuilder .NAME , NestedQueryBuilder ::new , NestedQueryBuilder ::fromXContent )
113
- )
114
- );
115
- entries
116
- .add (registerQuery (new SearchPlugin .QuerySpec <>(BoolQueryBuilder .NAME , BoolQueryBuilder ::new , BoolQueryBuilder ::fromXContent )));
117
- entries
118
- .add (
119
- registerAggregation (
120
- new SearchPlugin .AggregationSpec (SumAggregationBuilder .NAME , SumAggregationBuilder ::new , SumAggregationBuilder .PARSER )
121
- .addResultReader (InternalSum ::new )
122
- )
123
- );
124
-
125
- entries
126
- .add (
127
- registerAggregation (
128
- new SearchPlugin .AggregationSpec (
129
- FilterAggregationBuilder .NAME ,
130
- FilterAggregationBuilder ::new ,
131
- FilterAggregationBuilder ::parse
132
- ).addResultReader (InternalFilter ::new )
133
- )
134
- );
135
- entries
136
- .add (
137
- registerQuery (new SearchPlugin .QuerySpec <>(RangeQueryBuilder .NAME , RangeQueryBuilder ::new , RangeQueryBuilder ::fromXContent ))
138
- );
139
- return entries ;
140
-
141
- }
142
-
143
- private NamedXContentRegistry .Entry registerQuery (SearchPlugin .QuerySpec <?> spec ) {
144
- return new NamedXContentRegistry .Entry (QueryBuilder .class , spec .getName (), (p , c ) -> spec .getParser ().fromXContent (p ));
145
- }
146
-
147
- private NamedXContentRegistry .Entry registerAggregation (SearchPlugin .AggregationSpec spec ) {
148
- return new NamedXContentRegistry .Entry (BaseAggregationBuilder .class , spec .getName (), (p , c ) -> {
149
- String name = (String ) c ;
150
- return spec .getParser ().parse (p , name );
151
- });
152
- }
153
-
154
108
private CreateIndexRequest initAnomalyDetectorIndex () {
155
109
JsonpMapper mapper = sdkClient ._transport ().jsonpMapper ();
156
110
JsonParser parser = null ;
@@ -190,13 +144,12 @@ public ExtensionRestResponse handleRequest(ExtensionRestRequest request) {
190
144
);
191
145
}
192
146
193
- NamedXContentRegistry xContentRegistry = new NamedXContentRegistry (getNamedXWriteables ());
194
147
XContentParser parser ;
195
148
AnomalyDetector detector ;
196
149
XContentBuilder builder = null ;
197
150
CreateIndexRequest createIndexRequest ;
198
151
try {
199
- parser = request .contentParser (xContentRegistry );
152
+ parser = request .contentParser (this . xContentRegistry );
200
153
ensureExpectedToken (XContentParser .Token .START_OBJECT , parser .nextToken (), parser );
201
154
detector = AnomalyDetector .parse (parser );
202
155
createIndexRequest = initAnomalyDetectorIndex ();
@@ -211,7 +164,7 @@ public ExtensionRestResponse handleRequest(ExtensionRestRequest request) {
211
164
builder .field ("seqNo" , indexResponse .seqNo ());
212
165
builder .field ("primaryTerm" , indexResponse .primaryTerm ());
213
166
builder .field ("detector" , detector );
214
- builder .field ("status" , RestStatus . CREATED );
167
+ builder .field ("status" , CREATED );
215
168
builder .endObject ();
216
169
} catch (IOException e ) {
217
170
e .printStackTrace ();
0 commit comments