diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/SEBClientEventBatchService.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/SEBClientEventBatchService.java index 0a3fe8ac..2e9e3e81 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/SEBClientEventBatchService.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/session/impl/SEBClientEventBatchService.java @@ -95,11 +95,47 @@ public class SEBClientEventBatchService { @Scheduled( fixedDelayString = "${sebserver.webservice.api.exam.session.event.batch.interval:1000}", initialDelay = 100) - public void processEvents() { + public void worker1() { + processEvents("worker1"); + } + + @Scheduled( + fixedDelayString = "${sebserver.webservice.api.exam.session.event.batch.interval:1000}", + initialDelay = 300) + public void worker2() { + processEvents("worker2"); + } + + @Scheduled( + fixedDelayString = "${sebserver.webservice.api.exam.session.event.batch.interval:1000}", + initialDelay = 600) + public void worker3() { + processEvents("worker3"); + } + + @Scheduled( + fixedDelayString = "${sebserver.webservice.api.exam.session.event.batch.interval:1000}", + initialDelay = 900) + public void worker4() { + processEvents("worker4"); + } + + public void processOneTime() { + processEvents("One Time Call"); + } + + private void processEvents(final String workerName) { + + long start = 0L; + if (log.isDebugEnabled()) { + start = Utils.getMillisecondsNow(); + } final int size = this.eventDataQueue.size(); if (size > 1000) { - log.warn("-----> There are more then 1000 SEB client logs in the waiting queue: {}", size); + log.warn("-----> There are more then 1000 SEB client logs in the waiting queue: {}, worker: {}", + size, + workerName); } if (size == 0) { @@ -132,6 +168,13 @@ public class SEBClientEventBatchService { this.sqlSessionTemplate.flushStatements(); + if (log.isDebugEnabled()) { + log.debug("SEBClientEventBatchService worker {} processes batch of size {} in {} ms", + workerName, + size, + start - Utils.getMillisecondsNow()); + } + } catch (final Exception e) { log.error("Failed to process SEB events from eventDataQueue: ", e); } diff --git a/src/test/java/ch/ethz/seb/sebserver/webservice/integration/api/exam/SebConnectionTest.java b/src/test/java/ch/ethz/seb/sebserver/webservice/integration/api/exam/SebConnectionTest.java index f7baae0f..88b30db6 100644 --- a/src/test/java/ch/ethz/seb/sebserver/webservice/integration/api/exam/SebConnectionTest.java +++ b/src/test/java/ch/ethz/seb/sebserver/webservice/integration/api/exam/SebConnectionTest.java @@ -561,7 +561,7 @@ public class SebConnectionTest extends ExamAPIIntegrationTester { // check correct response assertTrue(HttpStatus.NO_CONTENT.value() == sendEvent.getStatus()); - this.sebClientEventBatchStore.processEvents(); + this.sebClientEventBatchStore.processOneTime(); // check event stored on db List events = this.clientEventRecordMapper @@ -587,7 +587,7 @@ public class SebConnectionTest extends ExamAPIIntegrationTester { 10000.0, "testEvent2"); - this.sebClientEventBatchStore.processEvents(); + this.sebClientEventBatchStore.processOneTime(); // check correct response assertTrue(HttpStatus.NO_CONTENT.value() == sendEvent.getStatus()); @@ -622,7 +622,7 @@ public class SebConnectionTest extends ExamAPIIntegrationTester { "testEvent1"); // check correct response assertTrue(HttpStatus.NO_CONTENT.value() == sendEvent.getStatus()); - this.sebClientEventBatchStore.processEvents(); + this.sebClientEventBatchStore.processOneTime(); final List events = this.clientEventRecordMapper .selectByExample() .build() diff --git a/src/test/java/ch/ethz/seb/sebserver/webservice/integration/services/ClientEventServiceTest.java b/src/test/java/ch/ethz/seb/sebserver/webservice/integration/services/ClientEventServiceTest.java index 075099b6..d2002e38 100644 --- a/src/test/java/ch/ethz/seb/sebserver/webservice/integration/services/ClientEventServiceTest.java +++ b/src/test/java/ch/ethz/seb/sebserver/webservice/integration/services/ClientEventServiceTest.java @@ -210,7 +210,7 @@ public class ClientEventServiceTest extends AdministrationAPIIntegrationTester { } private void waitForExecutor() { - this.sebClientEventBatchStore.processEvents(); + this.sebClientEventBatchStore.processOneTime(); } @Test