Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -r1cd4b23e16f8e4c341012698ddf539f8ee6bdf95 -ra13c7c0eabe99a281bc65537d779610d07a56f04 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 1cd4b23e16f8e4c341012698ddf539f8ee6bdf95) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision a13c7c0eabe99a281bc65537d779610d07a56f04) @@ -45,6 +45,7 @@ import java.util.TreeMap; import java.util.TreeSet; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -194,6 +195,8 @@ private ILearnerInteractionService learnerInteractionService; + private final Map LEARNER_RESULTS_UPDATED_MAP = new ConcurrentHashMap<>(); + // ******************************************************************************* // Service method // ******************************************************************************* @@ -659,6 +662,10 @@ } } + if (isAnswerModified) { + LEARNER_RESULTS_UPDATED_MAP.put(assessment.getContentId(), true); + } + // store finished date only on user hitting submit all answers button (and not submit mark hedging // question) int maximumGrade = 0; @@ -795,6 +802,13 @@ return questionResult; } + @Override + public boolean isAnswersUpdated(long toolContentId) { + Boolean isAnswersUpdated = LEARNER_RESULTS_UPDATED_MAP.get(toolContentId); + LEARNER_RESULTS_UPDATED_MAP.put(toolContentId, false); + return isAnswersUpdated == null ? true : isAnswersUpdated; + } + /** * * @return grade that user scored by answering that question Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -rd2fae62bad612aad30c914422eea4e0316fc4be1 -ra13c7c0eabe99a281bc65537d779610d07a56f04 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision d2fae62bad612aad30c914422eea4e0316fc4be1) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision a13c7c0eabe99a281bc65537d779610d07a56f04) @@ -239,6 +239,8 @@ boolean storeUserAnswers(Assessment assessment, Long userId, List> pagedQuestions, boolean isAutosave) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException; + boolean isAnswersUpdated(long toolContentId); + void loadupLastAttempt(Long assessmentUid, Long userId, List> pagedQuestionDtos); /** Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java =================================================================== diff -u -r94c22f07fdd57d3e9279cb754909bb3dbe0bc0ee -ra13c7c0eabe99a281bc65537d779610d07a56f04 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 94c22f07fdd57d3e9279cb754909bb3dbe0bc0ee) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision a13c7c0eabe99a281bc65537d779610d07a56f04) @@ -274,15 +274,19 @@ @ResponseBody public Flux getCompletionChartsDataFlux(@RequestParam long toolContentId) throws JsonProcessingException, IOException { - return Flux.interval(Duration.ZERO, Duration.ofSeconds(5)).map(sequence -> { + return Flux.interval(Duration.ZERO, Duration.ofSeconds(1)).map(sequence -> { + boolean isAnswersUpdated = service.isAnswersUpdated(toolContentId); + if (!isAnswersUpdated) { + return ""; + } String chartData = null; try { chartData = getCompletionChartsData(toolContentId); } catch (IOException e) { log.error(e); } return chartData; - }).distinctUntilChanged(); + }).filter(chartData -> !chartData.isBlank()).distinctUntilChanged(); } private String getCompletionChartsData(long toolContentId) throws JsonProcessingException, IOException {