diff --git a/apps/database-abstractor/src/main/java/com/akto/action/DbAction.java b/apps/database-abstractor/src/main/java/com/akto/action/DbAction.java index b7ad37d8b9..cd9057a19c 100644 --- a/apps/database-abstractor/src/main/java/com/akto/action/DbAction.java +++ b/apps/database-abstractor/src/main/java/com/akto/action/DbAction.java @@ -165,6 +165,7 @@ public void setTestSourceConfig(TestSourceConfig testSourceConfig) { BasicDBList issuesIds; List activeAdvancedFilters; Set mergedUrls; + List currentlyRunningTests; public BasicDBList getIssuesIds() { return issuesIds; @@ -1988,6 +1989,16 @@ public String fetchMergedUrls() { return Action.SUCCESS.toUpperCase(); } + public String fetchStatusOfTests(){ + try { + this.currentlyRunningTests = DbLayer.fetchStatusOfTests(); + } catch (Exception e) { + loggerMaker.errorAndAddToDb(e, "Error in fetchStatusOfTests " + e.toString()); + return Action.ERROR.toUpperCase(); + } + return Action.SUCCESS.toUpperCase(); + } + public List getCustomDataTypes() { return customDataTypes; } @@ -2901,4 +2912,12 @@ public Set getMergedUrls() { public void setMergedUrls(Set mergedUrls) { this.mergedUrls = mergedUrls; } + + public List getCurrentlyRunningTests() { + return currentlyRunningTests; + } + + public void setCurrentlyRunningTests(List currentlyRunningTests) { + this.currentlyRunningTests = currentlyRunningTests; + } } diff --git a/apps/database-abstractor/src/main/resources/struts.xml b/apps/database-abstractor/src/main/resources/struts.xml index 921a13822f..1b734358e4 100644 --- a/apps/database-abstractor/src/main/resources/struts.xml +++ b/apps/database-abstractor/src/main/resources/struts.xml @@ -1222,6 +1222,17 @@ + + + + + + 422 + false + ^actionErrors.* + + + diff --git a/libs/utils/src/main/java/com/akto/data_actor/ClientActor.java b/libs/utils/src/main/java/com/akto/data_actor/ClientActor.java index 6cacb86769..bf312e4fd2 100644 --- a/libs/utils/src/main/java/com/akto/data_actor/ClientActor.java +++ b/libs/utils/src/main/java/com/akto/data_actor/ClientActor.java @@ -3163,4 +3163,39 @@ public Set fetchMergedUrls() { return new HashSet<>(respList); } + public List fetchStatusOfTests() { + Map> headers = buildHeaders(); + List result = new ArrayList<>(); + OriginalHttpRequest request = new OriginalHttpRequest(url + "/fetchStatusOfTests", "", "GET", null, headers, ""); + try { + OriginalHttpResponse response = ApiExecutor.sendRequest(request, true, null, false, null); + String responsePayload = response.getBody(); + if (response.getStatusCode() != 200 || responsePayload == null) { + loggerMaker.errorAndAddToDb( "non 2xx response in fetchStatusOfTests", LoggerMaker.LogDb.RUNTIME); + return null; + } + BasicDBObject payloadObj; + try { + payloadObj = BasicDBObject.parse(responsePayload); + BasicDBList tests = (BasicDBList) payloadObj.get("currentlyRunningTests"); + for (Object test: tests) { + BasicDBObject obj = (BasicDBObject) test; + obj.remove("id"); + obj.remove("testingRunId"); + TestingRunResultSummary res = objectMapper.readValue(obj.toJson(), TestingRunResultSummary.class); + res.setId(new ObjectId(obj.getString("hexId"))); + res.setTestingRunId(new ObjectId(obj.getString("testingRunHexId"))); + result.add(res); + } + } catch(Exception e) { + loggerMaker.errorAndAddToDb("error extracting response in fetchStatusOfTests" + e, LoggerMaker.LogDb.RUNTIME); + } + + return result; + } catch (Exception e) { + loggerMaker.errorAndAddToDb("error in fetchStatusOfTests" + e, LoggerMaker.LogDb.RUNTIME); + return null; + } + } + } diff --git a/libs/utils/src/main/java/com/akto/data_actor/DataActor.java b/libs/utils/src/main/java/com/akto/data_actor/DataActor.java index d8814648ab..50130adf2e 100644 --- a/libs/utils/src/main/java/com/akto/data_actor/DataActor.java +++ b/libs/utils/src/main/java/com/akto/data_actor/DataActor.java @@ -240,4 +240,6 @@ public abstract class DataActor { public abstract List fetchActiveAdvancedFilters(); public abstract Set fetchMergedUrls(); + + public abstract List fetchStatusOfTests(); } diff --git a/libs/utils/src/main/java/com/akto/data_actor/DbActor.java b/libs/utils/src/main/java/com/akto/data_actor/DbActor.java index 050b05c72b..18613606fb 100644 --- a/libs/utils/src/main/java/com/akto/data_actor/DbActor.java +++ b/libs/utils/src/main/java/com/akto/data_actor/DbActor.java @@ -500,4 +500,8 @@ public Set fetchMergedUrls() { return DbLayer.fetchMergedUrls(); } + public List fetchStatusOfTests() { + return DbLayer.fetchStatusOfTests(); + } + } diff --git a/libs/utils/src/main/java/com/akto/data_actor/DbLayer.java b/libs/utils/src/main/java/com/akto/data_actor/DbLayer.java index 3e3d5209c4..073a7e4961 100644 --- a/libs/utils/src/main/java/com/akto/data_actor/DbLayer.java +++ b/libs/utils/src/main/java/com/akto/data_actor/DbLayer.java @@ -916,4 +916,16 @@ public static List fetchActiveFilterTemplates(){ public static Set fetchMergedUrls() { return MergedUrlsDao.instance.getMergedUrls(); } + + public static List fetchStatusOfTests() { + int timeFilter = Context.now() - 30 * 60; + List currentRunningTests = TestingRunResultSummariesDao.instance.findAll( + Filters.gte(TestingRunResultSummary.START_TIMESTAMP, timeFilter), + Projections.include("_id", TestingRunResultSummary.STATE, TestingRunResultSummary.TESTING_RUN_ID) + ); + for (TestingRunResultSummary summary: currentRunningTests) { + summary.setTestingRunHexId(summary.getTestingRunId().toHexString()); + } + return currentRunningTests; + } }