Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -re31545b8c3b0461cea5407f786a3c7e99b9feb93 -r27be1eb0b5945027c2c8f95b8a28b1803762c183 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision e31545b8c3b0461cea5407f786a3c7e99b9feb93) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 27be1eb0b5945027c2c8f95b8a28b1803762c183) @@ -122,7 +122,6 @@ import org.lamsfoundation.lams.util.excel.ExcelSheet; import org.lamsfoundation.lams.util.hibernate.HibernateSessionManager; import org.springframework.web.util.UriUtils; -import reactor.core.publisher.Flux; import java.io.IOException; import java.lang.reflect.InvocationTargetException; @@ -206,9 +205,15 @@ public AssessmentServiceImpl() { FluxRegistry.initFluxMap(AssessmentConstants.COMPLETION_CHARTS_UPDATE_FLUX_NAME, - AssessmentConstants.COMPLETION_CHARTS_UPDATE_SINK_NAME, null, - (Long toolContentId) -> UriUtils.encode(getCompletionChartsData(toolContentId), - StandardCharsets.UTF_8.toString()), FluxMap.SHORT_THROTTLE, FluxMap.STANDARD_TIMEOUT); + AssessmentConstants.COMPLETION_CHARTS_UPDATE_SINK_NAME, null, (Long toolContentId) -> { + try { + HibernateSessionManager.openSession(); + return UriUtils.encode(getCompletionChartsData(toolContentId), + StandardCharsets.UTF_8.toString()); + } finally { + HibernateSessionManager.closeSession(); + } + }, FluxMap.SHORT_THROTTLE, FluxMap.STANDARD_TIMEOUT); FluxRegistry.bindSink(AssessmentConstants.LEARNER_TRAVERSED_SINK_NAME, AssessmentConstants.COMPLETION_CHARTS_UPDATE_SINK_NAME, contentId -> contentId); FluxRegistry.bindSink(AssessmentConstants.ANSWERS_UPDATED_SINK_NAME, @@ -920,16 +925,6 @@ return questionResult; } - @Override - public Flux getCompletionChartsDataFlux(long toolContentId) { - return FluxRegistry.get(AssessmentConstants.COMPLETION_CHARTS_UPDATE_FLUX_NAME, toolContentId); - } - - @Override - public Flux getTimeLimitPanelUpdateFlux(long toolContentId) { - return FluxRegistry.get(AssessmentConstants.TIME_LIMIT_PANEL_UPDATE_FLUX_NAME, toolContentId); - } - /** * @return grade that user scored by answering that question */ @@ -4265,8 +4260,6 @@ private String getCompletionChartsData(long toolContentId) { try { - HibernateSessionManager.openSession(); - ObjectNode chartJson = JsonNodeFactory.instance.objectNode(); chartJson.set("possibleLearners", getLessonLearnersByContentIdJson(toolContentId)); @@ -4290,10 +4283,7 @@ } catch (Exception e) { log.error("Unable to fetch completion charts data for tool content ID " + toolContentId, e); return ""; - } finally { - HibernateSessionManager.closeSession(); } - } private ObjectNode getTimeLimitSettingsJson(long toolContentId) { Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r0083f3733489a25a89db5cfa6810303c015acd8f -r27be1eb0b5945027c2c8f95b8a28b1803762c183 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 0083f3733489a25a89db5cfa6810303c015acd8f) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 27be1eb0b5945027c2c8f95b8a28b1803762c183) @@ -26,21 +26,6 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import org.lamsfoundation.lams.learningdesign.Grouping; import org.lamsfoundation.lams.notebook.model.NotebookEntry; -import org.lamsfoundation.lams.tool.assessment.dto.*; -import org.lamsfoundation.lams.tool.assessment.model.*; -import org.lamsfoundation.lams.tool.service.ICommonToolService; -import org.lamsfoundation.lams.usermanagement.User; -import org.lamsfoundation.lams.util.excel.ExcelSheet; - -import java.lang.reflect.InvocationTargetException; -import java.time.LocalDateTime; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.lamsfoundation.lams.learningdesign.Grouping; -import org.lamsfoundation.lams.notebook.model.NotebookEntry; import org.lamsfoundation.lams.tool.assessment.dto.AssessmentResultDTO; import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.dto.GradeStatsDTO; @@ -58,8 +43,14 @@ import org.lamsfoundation.lams.tool.service.ICommonToolService; import org.lamsfoundation.lams.usermanagement.User; import org.lamsfoundation.lams.util.excel.ExcelSheet; -import reactor.core.publisher.Flux; +import java.lang.reflect.InvocationTargetException; +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + /** * Interface that defines the contract that all ShareAssessment service provider must follow. * @@ -260,10 +251,6 @@ boolean storeUserAnswers(Assessment assessment, Long userId, List> pagedQuestions, boolean isAutosave) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException; - Flux getCompletionChartsDataFlux(long toolContentId); - - Flux getTimeLimitPanelUpdateFlux(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 -reccd6838790a4369b6788e48fb5ae5851622fe35 -r27be1eb0b5945027c2c8f95b8a28b1803762c183 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision eccd6838790a4369b6788e48fb5ae5851622fe35) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/controller/MonitoringController.java (.../MonitoringController.java) (revision 27be1eb0b5945027c2c8f95b8a28b1803762c183) @@ -23,20 +23,9 @@ package org.lamsfoundation.lams.tool.assessment.web.controller; -import java.io.IOException; -import java.security.InvalidParameterException; -import java.time.LocalDateTime; -import java.time.OffsetDateTime; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.lamsfoundation.lams.flux.FluxRegistry; @@ -52,7 +41,16 @@ import org.lamsfoundation.lams.rating.model.RatingCriteria; import org.lamsfoundation.lams.rating.service.IRatingService; import org.lamsfoundation.lams.tool.assessment.AssessmentConstants; -import org.lamsfoundation.lams.tool.assessment.dto.*; +import org.lamsfoundation.lams.tool.assessment.dto.AssessmentResultDTO; +import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; +import org.lamsfoundation.lams.tool.assessment.dto.GradeStatsDTO; +import org.lamsfoundation.lams.tool.assessment.dto.OptionDTO; +import org.lamsfoundation.lams.tool.assessment.dto.QuestionDTO; +import org.lamsfoundation.lams.tool.assessment.dto.QuestionSummary; +import org.lamsfoundation.lams.tool.assessment.dto.ReflectDTO; +import org.lamsfoundation.lams.tool.assessment.dto.TblAssessmentQuestionDTO; +import org.lamsfoundation.lams.tool.assessment.dto.UserSummary; +import org.lamsfoundation.lams.tool.assessment.dto.UserSummaryItem; import org.lamsfoundation.lams.tool.assessment.model.Assessment; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestion; import org.lamsfoundation.lams.tool.assessment.model.AssessmentQuestionResult; @@ -89,13 +87,34 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.util.HtmlUtils; - -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.JsonNodeFactory; -import com.fasterxml.jackson.databind.node.ObjectNode; - import reactor.core.publisher.Flux; +import javax.servlet.ServletException; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.security.InvalidParameterException; +import java.time.LocalDateTime; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.Date; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.SortedSet; +import java.util.TimeZone; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.function.Function; +import java.util.stream.Collectors; + @Controller @RequestMapping("/monitoring") public class MonitoringController { @@ -252,14 +271,14 @@ @RequestMapping(path = "/getCompletionChartsData", method = RequestMethod.GET, produces = MediaType.TEXT_EVENT_STREAM_VALUE) @ResponseBody public Flux getCompletionChartsData(@RequestParam long toolContentId) { - return service.getCompletionChartsDataFlux(toolContentId); + return FluxRegistry.get(AssessmentConstants.COMPLETION_CHARTS_UPDATE_FLUX_NAME, toolContentId); } @RequestMapping(path = "/getTimeLimitPanelUpdateFlux", method = RequestMethod.GET, produces = MediaType.TEXT_EVENT_STREAM_VALUE) @ResponseBody public Flux getTimeLimitPanelUpdateFlux(@RequestParam long toolContentId, HttpServletResponse response) { response.setContentType(MediaType.TEXT_EVENT_STREAM_VALUE); - return service.getTimeLimitPanelUpdateFlux(toolContentId); + return FluxRegistry.get(AssessmentConstants.TIME_LIMIT_PANEL_UPDATE_FLUX_NAME, toolContentId); } @RequestMapping("/userMasterDetail")