@@ -40,6 +40,7 @@ import org.opensearch.commons.alerting.model.FindingWithDocs
4040import org.opensearch.commons.utils.recreateObject
4141import org.opensearch.core.action.ActionListener
4242import org.opensearch.core.common.Strings
43+ import org.opensearch.core.common.io.stream.NamedWriteableRegistry
4344import org.opensearch.core.xcontent.NamedXContentRegistry
4445import org.opensearch.core.xcontent.XContentParser
4546import org.opensearch.core.xcontent.XContentParserUtils
@@ -62,7 +63,8 @@ class TransportGetFindingsSearchAction @Inject constructor(
6263 clusterService : ClusterService ,
6364 actionFilters : ActionFilters ,
6465 val settings : Settings ,
65- val xContentRegistry : NamedXContentRegistry
66+ val xContentRegistry : NamedXContentRegistry ,
67+ val namedWriteableRegistry : NamedWriteableRegistry
6668) : HandledTransportAction<ActionRequest, GetFindingsResponse> (
6769 AlertingActions .GET_FINDINGS_ACTION_NAME , transportService, actionFilters, ::GetFindingsRequest
6870),
@@ -80,11 +82,8 @@ class TransportGetFindingsSearchAction @Inject constructor(
8082 actionListener : ActionListener <GetFindingsResponse >
8183 ) {
8284 val getFindingsRequest = request as ? GetFindingsRequest
83- ? : recreateObject(request) { GetFindingsRequest (it) }
85+ ? : recreateObject(request, namedWriteableRegistry ) { GetFindingsRequest (it) }
8486 val tableProp = getFindingsRequest.table
85- val severity = getFindingsRequest.severity
86- val detectionType = getFindingsRequest.detectionType
87- val searchString = tableProp.searchString
8887
8988 val sortBuilder = SortBuilders
9089 .fieldSort(tableProp.sortString)
@@ -101,79 +100,16 @@ class TransportGetFindingsSearchAction @Inject constructor(
101100 .seqNoAndPrimaryTerm(true )
102101 .version(true )
103102
104- val queryBuilder = QueryBuilders .boolQuery()
103+ val queryBuilder = getFindingsRequest.boolQueryBuilder ? : QueryBuilders .boolQuery()
105104
106105 if (! getFindingsRequest.findingId.isNullOrBlank())
107106 queryBuilder.filter(QueryBuilders .termQuery(" _id" , getFindingsRequest.findingId))
108-
109- if (! getFindingsRequest.findingIds.isNullOrEmpty()) {
110- queryBuilder.filter(QueryBuilders .termsQuery(" id" , getFindingsRequest.findingIds))
111- }
112-
113107 if (getFindingsRequest.monitorId != null ) {
114108 queryBuilder.filter(QueryBuilders .termQuery(" monitor_id" , getFindingsRequest.monitorId))
115109 } else if (getFindingsRequest.monitorIds.isNullOrEmpty() == false ) {
116110 queryBuilder.filter(QueryBuilders .termsQuery(" monitor_id" , getFindingsRequest.monitorIds))
117111 }
118112
119- if (getFindingsRequest.startTime != null && getFindingsRequest.endTime != null ) {
120- val startTime = getFindingsRequest.startTime!! .toEpochMilli()
121- val endTime = getFindingsRequest.endTime!! .toEpochMilli()
122- val timeRangeQuery = QueryBuilders .rangeQuery(" timestamp" )
123- .from(startTime) // Greater than or equal to start time
124- .to(endTime) // Less than or equal to end time
125- queryBuilder.filter(timeRangeQuery)
126- }
127-
128- if (! detectionType.isNullOrBlank()) {
129- val nestedQueryBuilder = QueryBuilders .nestedQuery(
130- " queries" ,
131- when {
132- detectionType.equals(" threat" , ignoreCase = true ) -> {
133- QueryBuilders .boolQuery().filter(
134- QueryBuilders .prefixQuery(" queries.id" , " threat_intel_" )
135- )
136- }
137- else -> {
138- QueryBuilders .boolQuery().mustNot(
139- QueryBuilders .prefixQuery(" queries.id" , " threat_intel_" )
140- )
141- }
142- },
143- ScoreMode .None
144- )
145-
146- // Add the nestedQueryBuilder to the main queryBuilder
147- queryBuilder.must(nestedQueryBuilder)
148- }
149-
150- if (! searchString.isNullOrBlank()) {
151- queryBuilder
152- .should(QueryBuilders .matchQuery(" index" , searchString))
153- .should(
154- QueryBuilders .nestedQuery(
155- " queries" ,
156- QueryBuilders .matchQuery(" queries.tags" , searchString),
157- ScoreMode .None
158- )
159- )
160- .should(QueryBuilders .regexpQuery(" monitor_name" , searchString + " .*" ))
161- .minimumShouldMatch(1 )
162- }
163-
164- if (! severity.isNullOrBlank()) {
165- queryBuilder
166- .must(
167- QueryBuilders .nestedQuery(
168- " queries" ,
169- QueryBuilders .boolQuery().should(
170- QueryBuilders .matchQuery(" queries.tags" , severity)
171- ),
172- ScoreMode .None
173- )
174- )
175- }
176-
177113 if (! tableProp.searchString.isNullOrBlank()) {
178114 queryBuilder
179115 .should(
0 commit comments