Skip to content

Commit 8196fac

Browse files
committed
optimise getseveritycount api
1 parent c7c6c67 commit 8196fac

File tree

1 file changed

+17
-26
lines changed

1 file changed

+17
-26
lines changed

apps/threat-detection-backend/src/main/java/com/akto/threat/backend/service/ThreatApiService.java

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@
1212
import com.mongodb.client.MongoClient;
1313
import com.mongodb.client.MongoCollection;
1414
import com.mongodb.client.MongoCursor;
15+
import com.mongodb.client.model.Filters;
1516

1617
import java.util.ArrayList;
1718
import java.util.List;
1819
import java.util.Map;
1920

2021
import org.bson.Document;
22+
import org.bson.conversions.Bson;
2123

2224
public class ThreatApiService {
2325

@@ -173,7 +175,7 @@ public ThreatCategoryWiseCountResponse getSubCategoryWiseCount(
173175
}
174176

175177
public ThreatSeverityWiseCountResponse getSeverityWiseCount(
176-
String accountId, ThreatSeverityWiseCountRequest req) {
178+
String accountId, ThreatSeverityWiseCountRequest req) {
177179

178180
loggerMaker.info("getSeverityWiseCount start ts " + Context.now());
179181

@@ -182,36 +184,24 @@ public ThreatSeverityWiseCountResponse getSeverityWiseCount(
182184
.getDatabase(accountId)
183185
.getCollection(MongoDBCollection.ThreatDetection.MALICIOUS_EVENTS, Document.class);
184186

185-
List<Document> pipeline = new ArrayList<>();
186-
Document matchFilter = new Document("$match",
187-
new Document("detectedAt", new Document("$gte", req.getStartTs()).append("$lte", req.getEndTs()))
188-
);
189-
pipeline.add(matchFilter);
190-
pipeline.add(
191-
new Document("$sort", new Document("category", 1).append("detectedAt", -1))); // sort
192-
pipeline.add(
193-
new Document(
194-
"$group",
195-
new Document(
196-
"_id",
197-
new Document("severity", "$severity"))
198-
.append("count", new Document("$sum", 1))));
187+
List<ThreatSeverityWiseCountResponse.SeverityCount> categoryWiseCounts = new ArrayList<>();
199188

200-
pipeline.add(
201-
new Document(
202-
"$sort",
203-
new Document("severity", -1).append("severity", -1).append("count", -1))); // sort
189+
String[] severities = { "CRITICAL", "HIGH", "MEDIUM", "LOW" };
204190

205-
List<ThreatSeverityWiseCountResponse.SeverityCount> categoryWiseCounts = new ArrayList<>();
191+
for (String severity : severities) {
192+
Bson filter = Filters.and(
193+
Filters.eq("severity", severity),
194+
Filters.gte("detectedAt", req.getStartTs()),
195+
Filters.lte("detectedAt", req.getEndTs())
196+
);
206197

207-
try (MongoCursor<Document> cursor = coll.aggregate(pipeline).cursor()) {
208-
while (cursor.hasNext()) {
209-
Document doc = cursor.next();
210-
Document agg = (Document) doc.get("_id");
198+
long count = coll.countDocuments(filter);
199+
200+
if (count > 0) {
211201
categoryWiseCounts.add(
212202
ThreatSeverityWiseCountResponse.SeverityCount.newBuilder()
213-
.setSeverity(agg.getString("severity"))
214-
.setCount(doc.getInteger("count", 0))
203+
.setSeverity(severity)
204+
.setCount((int) count)
215205
.build());
216206
}
217207
}
@@ -222,4 +212,5 @@ public ThreatSeverityWiseCountResponse getSeverityWiseCount(
222212
.addAllCategoryWiseCounts(categoryWiseCounts)
223213
.build();
224214
}
215+
225216
}

0 commit comments

Comments
 (0)