Skip to content

Commit 2420c2c

Browse files
Feature findings enhancemnt (#1427)
* added support for param in Finding API Signed-off-by: Riya Saxena <[email protected]> * added detectionType as param for Findings API enhancements Signed-off-by: Riya Saxena <[email protected]> * added searchString param in FIndingsAPI Signed-off-by: Riya Saxena <[email protected]> * adding addiional params findingIds, startTime and endTime Signed-off-by: Riya Saxena <[email protected]> --------- Signed-off-by: Riya Saxena <[email protected]>
1 parent afa4f5d commit 2420c2c

File tree

2 files changed

+70
-2
lines changed

2 files changed

+70
-2
lines changed

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

+5-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ 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")
4850

4951
val table = Table(
5052
sortOrder,
@@ -57,7 +59,9 @@ class RestGetFindingsAction : BaseRestHandler() {
5759

5860
val getFindingsSearchRequest = GetFindingsRequest(
5961
findingID,
60-
table
62+
table,
63+
severity,
64+
detectionType
6165
)
6266
return RestChannelConsumer {
6367
channel ->

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

+65-1
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ class TransportGetFindingsSearchAction @Inject constructor(
8282
val getFindingsRequest = request as? GetFindingsRequest
8383
?: recreateObject(request) { GetFindingsRequest(it) }
8484
val tableProp = getFindingsRequest.table
85+
val severity = getFindingsRequest.severity
86+
val detectionType = getFindingsRequest.detectionType
87+
val searchString = tableProp.searchString
8588

8689
val sortBuilder = SortBuilders
8790
.fieldSort(tableProp.sortString)
@@ -103,12 +106,74 @@ class TransportGetFindingsSearchAction @Inject constructor(
103106
if (!getFindingsRequest.findingId.isNullOrBlank())
104107
queryBuilder.filter(QueryBuilders.termQuery("_id", getFindingsRequest.findingId))
105108

109+
if (!getFindingsRequest.findingIds.isNullOrEmpty()) {
110+
queryBuilder.filter(QueryBuilders.termsQuery("id", getFindingsRequest.findingIds))
111+
}
112+
106113
if (getFindingsRequest.monitorId != null) {
107114
queryBuilder.filter(QueryBuilders.termQuery("monitor_id", getFindingsRequest.monitorId))
108115
} else if (getFindingsRequest.monitorIds.isNullOrEmpty() == false) {
109116
queryBuilder.filter(QueryBuilders.termsQuery("monitor_id", getFindingsRequest.monitorIds))
110117
}
111118

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+
112177
if (!tableProp.searchString.isNullOrBlank()) {
113178
queryBuilder
114179
.should(
@@ -130,7 +195,6 @@ class TransportGetFindingsSearchAction @Inject constructor(
130195
)
131196
)
132197
}
133-
134198
searchSourceBuilder.query(queryBuilder)
135199

136200
client.threadPool().threadContext.stashContext().use {

0 commit comments

Comments
 (0)