Skip to content

Commit 57b06a7

Browse files
Findings API Enhancements changes and integ tests fix (opensearch-project#1464) (opensearch-project#1474)
* solution to fix integ tests Signed-off-by: Riya Saxena <[email protected]> * fix flaky DocumentMonitor Runner tests Signed-off-by: Riya Saxena <[email protected]> * fix findings API enhancemnts Signed-off-by: Riya Saxena <[email protected]> --------- Signed-off-by: Riya Saxena <[email protected]> (cherry picked from commit ba84d04)
1 parent 770a310 commit 57b06a7

File tree

3 files changed

+10
-76
lines changed

3 files changed

+10
-76
lines changed

alerting/src/main/kotlin/org/opensearch/alerting/resthandler/RestGetFindingsAction.kt

+1-5
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,6 @@ class RestGetFindingsAction : BaseRestHandler() {
4545
val size = request.paramAsInt("size", 20)
4646
val startIndex = request.paramAsInt("startIndex", 0)
4747
val searchString = request.param("searchString", "")
48-
val severity: String? = request.param("severity", "ALL")
49-
val detectionType: String? = request.param("detectionType", "rules")
5048

5149
val table = Table(
5250
sortOrder,
@@ -59,9 +57,7 @@ class RestGetFindingsAction : BaseRestHandler() {
5957

6058
val getFindingsSearchRequest = GetFindingsRequest(
6159
findingID,
62-
table,
63-
severity,
64-
detectionType
60+
table
6561
)
6662
return RestChannelConsumer {
6763
channel ->

alerting/src/main/kotlin/org/opensearch/alerting/transport/TransportGetFindingsAction.kt

+5-69
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import org.opensearch.commons.alerting.model.FindingWithDocs
3939
import org.opensearch.commons.utils.recreateObject
4040
import org.opensearch.core.action.ActionListener
4141
import org.opensearch.core.common.Strings
42+
import org.opensearch.core.common.io.stream.NamedWriteableRegistry
4243
import org.opensearch.core.xcontent.NamedXContentRegistry
4344
import org.opensearch.core.xcontent.XContentParser
4445
import org.opensearch.core.xcontent.XContentParserUtils
@@ -61,7 +62,8 @@ class TransportGetFindingsSearchAction @Inject constructor(
6162
clusterService: ClusterService,
6263
actionFilters: ActionFilters,
6364
val settings: Settings,
64-
val xContentRegistry: NamedXContentRegistry
65+
val xContentRegistry: NamedXContentRegistry,
66+
val namedWriteableRegistry: NamedWriteableRegistry
6567
) : HandledTransportAction<ActionRequest, GetFindingsResponse> (
6668
AlertingActions.GET_FINDINGS_ACTION_NAME,
6769
transportService,
@@ -82,11 +84,8 @@ class TransportGetFindingsSearchAction @Inject constructor(
8284
actionListener: ActionListener<GetFindingsResponse>
8385
) {
8486
val getFindingsRequest = request as? GetFindingsRequest
85-
?: recreateObject(request) { GetFindingsRequest(it) }
87+
?: recreateObject(request, namedWriteableRegistry) { GetFindingsRequest(it) }
8688
val tableProp = getFindingsRequest.table
87-
val severity = getFindingsRequest.severity
88-
val detectionType = getFindingsRequest.detectionType
89-
val searchString = tableProp.searchString
9089

9190
val sortBuilder = SortBuilders
9291
.fieldSort(tableProp.sortString)
@@ -103,80 +102,17 @@ class TransportGetFindingsSearchAction @Inject constructor(
103102
.seqNoAndPrimaryTerm(true)
104103
.version(true)
105104

106-
val queryBuilder = QueryBuilders.boolQuery()
105+
val queryBuilder = getFindingsRequest.boolQueryBuilder ?: QueryBuilders.boolQuery()
107106

108107
if (!getFindingsRequest.findingId.isNullOrBlank()) {
109108
queryBuilder.filter(QueryBuilders.termQuery("_id", getFindingsRequest.findingId))
110109
}
111-
112-
if (!getFindingsRequest.findingIds.isNullOrEmpty()) {
113-
queryBuilder.filter(QueryBuilders.termsQuery("id", getFindingsRequest.findingIds))
114-
}
115-
116110
if (getFindingsRequest.monitorId != null) {
117111
queryBuilder.filter(QueryBuilders.termQuery("monitor_id", getFindingsRequest.monitorId))
118112
} else if (getFindingsRequest.monitorIds.isNullOrEmpty() == false) {
119113
queryBuilder.filter(QueryBuilders.termsQuery("monitor_id", getFindingsRequest.monitorIds))
120114
}
121115

122-
if (getFindingsRequest.startTime != null && getFindingsRequest.endTime != null) {
123-
val startTime = getFindingsRequest.startTime!!.toEpochMilli()
124-
val endTime = getFindingsRequest.endTime!!.toEpochMilli()
125-
val timeRangeQuery = QueryBuilders.rangeQuery("timestamp")
126-
.from(startTime) // Greater than or equal to start time
127-
.to(endTime) // Less than or equal to end time
128-
queryBuilder.filter(timeRangeQuery)
129-
}
130-
131-
if (!detectionType.isNullOrBlank()) {
132-
val nestedQueryBuilder = QueryBuilders.nestedQuery(
133-
"queries",
134-
when {
135-
detectionType.equals("threat", ignoreCase = true) -> {
136-
QueryBuilders.boolQuery().filter(
137-
QueryBuilders.prefixQuery("queries.id", "threat_intel_")
138-
)
139-
}
140-
else -> {
141-
QueryBuilders.boolQuery().mustNot(
142-
QueryBuilders.prefixQuery("queries.id", "threat_intel_")
143-
)
144-
}
145-
},
146-
ScoreMode.None
147-
)
148-
149-
// Add the nestedQueryBuilder to the main queryBuilder
150-
queryBuilder.must(nestedQueryBuilder)
151-
}
152-
153-
if (!searchString.isNullOrBlank()) {
154-
queryBuilder
155-
.should(QueryBuilders.matchQuery("index", searchString))
156-
.should(
157-
QueryBuilders.nestedQuery(
158-
"queries",
159-
QueryBuilders.matchQuery("queries.tags", searchString),
160-
ScoreMode.None
161-
)
162-
)
163-
.should(QueryBuilders.regexpQuery("monitor_name", searchString + ".*"))
164-
.minimumShouldMatch(1)
165-
}
166-
167-
if (!severity.isNullOrBlank()) {
168-
queryBuilder
169-
.must(
170-
QueryBuilders.nestedQuery(
171-
"queries",
172-
QueryBuilders.boolQuery().should(
173-
QueryBuilders.matchQuery("queries.tags", severity)
174-
),
175-
ScoreMode.None
176-
)
177-
)
178-
}
179-
180116
if (!tableProp.searchString.isNullOrBlank()) {
181117
queryBuilder
182118
.should(

alerting/src/test/kotlin/org/opensearch/alerting/DocumentMonitorRunnerIT.kt

+4-2
Original file line numberDiff line numberDiff line change
@@ -2119,8 +2119,10 @@ class DocumentMonitorRunnerIT : AlertingRestTestCase() {
21192119

21202120
val findings = searchFindings(monitor)
21212121
assertEquals("Findings saved for test monitor", 2, findings.size)
2122-
assertTrue("Findings saved for test monitor", findings[0].relatedDocIds.contains("1") || findings[0].relatedDocIds.contains("5"))
2123-
assertTrue("Findings saved for test monitor", findings[1].relatedDocIds.contains("1") || findings[0].relatedDocIds.contains("5"))
2122+
val findings0 = findings[0].relatedDocIds.contains("1") || findings[0].relatedDocIds.contains("5")
2123+
val findings1 = findings[1].relatedDocIds.contains("5") || findings[1].relatedDocIds.contains("1")
2124+
assertTrue("Findings saved for test monitor", findings0)
2125+
assertTrue("Findings saved for test monitor", findings1)
21242126
}
21252127

21262128
fun `test document-level monitor when index alias contain docs that do match a NOT EQUALS query and EXISTS query`() {

0 commit comments

Comments
 (0)