@@ -82,6 +82,9 @@ class TransportGetFindingsSearchAction @Inject constructor(
82
82
val getFindingsRequest = request as ? GetFindingsRequest
83
83
? : recreateObject(request) { GetFindingsRequest (it) }
84
84
val tableProp = getFindingsRequest.table
85
+ val severity = getFindingsRequest.severity
86
+ val detectionType = getFindingsRequest.detectionType
87
+ val searchString = tableProp.searchString
85
88
86
89
val sortBuilder = SortBuilders
87
90
.fieldSort(tableProp.sortString)
@@ -103,12 +106,74 @@ class TransportGetFindingsSearchAction @Inject constructor(
103
106
if (! getFindingsRequest.findingId.isNullOrBlank())
104
107
queryBuilder.filter(QueryBuilders .termQuery(" _id" , getFindingsRequest.findingId))
105
108
109
+ if (! getFindingsRequest.findingIds.isNullOrEmpty()) {
110
+ queryBuilder.filter(QueryBuilders .termsQuery(" id" , getFindingsRequest.findingIds))
111
+ }
112
+
106
113
if (getFindingsRequest.monitorId != null ) {
107
114
queryBuilder.filter(QueryBuilders .termQuery(" monitor_id" , getFindingsRequest.monitorId))
108
115
} else if (getFindingsRequest.monitorIds.isNullOrEmpty() == false ) {
109
116
queryBuilder.filter(QueryBuilders .termsQuery(" monitor_id" , getFindingsRequest.monitorIds))
110
117
}
111
118
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
+
112
177
if (! tableProp.searchString.isNullOrBlank()) {
113
178
queryBuilder
114
179
.should(
@@ -130,7 +195,6 @@ class TransportGetFindingsSearchAction @Inject constructor(
130
195
)
131
196
)
132
197
}
133
-
134
198
searchSourceBuilder.query(queryBuilder)
135
199
136
200
client.threadPool().threadContext.stashContext().use {
0 commit comments