From e62f85e876cf9fad734de5e6205818b09a08ca8c Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 18 Feb 2016 16:32:28 +0100 Subject: [PATCH] OO-1593: optimize qtiworks for heavy load on huge tests --- .../olat/course/nodes/iq/QTI21AssessmentRunController.java | 3 ++- .../org/olat/course/nodes/iq/_content/assessment_run.html | 2 +- .../java/org/olat/fileresource/types/ImsQTI21Resource.java | 4 ++-- .../java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java | 6 +++++- .../olat/ims/qti21/ui/AssessmentTestDisplayController.java | 2 ++ 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java index 8fbf6aeec6a..b3f531b7b55 100644 --- a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java +++ b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java @@ -137,7 +137,8 @@ public class QTI21AssessmentRunController extends BasicController implements Gen mainVC.contextPut("passed", scoreEval.getPassed()); StringBuilder comment = Formatter.stripTabsAndReturns(courseNode.getUserUserComment(userCourseEnv)); mainVC.contextPut("comment", StringHelper.xssScan(comment)); - mainVC.contextPut("attempts", courseNode.getUserAttempts(userCourseEnv)); + Integer attempts = courseNode.getUserAttempts(userCourseEnv); + mainVC.contextPut("attempts", attempts == null ? new Integer(0) : attempts); UserNodeAuditManager am = userCourseEnv.getCourseEnvironment().getAuditManager(); mainVC.contextPut("log", am.getUserNodeLog(courseNode, identity)); diff --git a/src/main/java/org/olat/course/nodes/iq/_content/assessment_run.html b/src/main/java/org/olat/course/nodes/iq/_content/assessment_run.html index 522ebc77612..b443c8c1194 100644 --- a/src/main/java/org/olat/course/nodes/iq/_content/assessment_run.html +++ b/src/main/java/org/olat/course/nodes/iq/_content/assessment_run.html @@ -1,5 +1,5 @@ #if ($enableScoreInfo) - #if($attempts > 0) + #if($attempts && $attempts > 0) <div class="panel panel-default o_personal"> <div class="panel-heading"> <h4 class="panel-title">$r.translate("personal.title")</h4> diff --git a/src/main/java/org/olat/fileresource/types/ImsQTI21Resource.java b/src/main/java/org/olat/fileresource/types/ImsQTI21Resource.java index b5bee7ec1f0..840cde8c0c5 100644 --- a/src/main/java/org/olat/fileresource/types/ImsQTI21Resource.java +++ b/src/main/java/org/olat/fileresource/types/ImsQTI21Resource.java @@ -107,7 +107,7 @@ public class ImsQTI21Resource extends FileResource { if(cp.hasTest()) { URI test = cp.getTest().toUri(); ResourceLocator chainedResourceLocator = createResolvingResourceLocator(resourceLocator); - XmlReadResult result = new QtiXmlReader().read(chainedResourceLocator, test, true); + XmlReadResult result = new QtiXmlReader().read(chainedResourceLocator, test, true, true); return result != null && result.isSchemaValid(); } return false; @@ -121,7 +121,7 @@ public class ImsQTI21Resource extends FileResource { try { PathResourceLocator resourceLocator = new PathResourceLocator(resource.getParentFile().toPath()); ResourceLocator chainedResourceLocator = createResolvingResourceLocator(resourceLocator); - XmlReadResult result = new QtiXmlReader().read(chainedResourceLocator, resource.toURI(), true); + XmlReadResult result = new QtiXmlReader().read(chainedResourceLocator, resource.toURI(), true, true); return result != null && result.isSchemaValid(); } catch (Exception e) { log.error("", e); diff --git a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java index ccc42138977..f39949c59b2 100644 --- a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java +++ b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java @@ -49,6 +49,7 @@ import org.olat.core.id.Persistable; import org.olat.core.logging.OLATRuntimeException; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; +import org.olat.core.util.CodeHelper; import org.olat.core.util.FileUtils; import org.olat.core.util.cache.CacheWrapper; import org.olat.core.util.coordinate.CoordinatorManager; @@ -253,12 +254,15 @@ public class QTI21ServiceImpl implements QTI21Service, InitializingBean, Disposa URI assessmentObjectSystemId = createAssessmentObjectUri(resourceDirectory); File resourceFile = new File(assessmentObjectSystemId); return assessmentTestsCache.computeIfAbsent(resourceFile, file -> { + long start = System.nanoTime(); QtiXmlReader qtiXmlReader = new QtiXmlReader(jqtiExtensionManager()); ResourceLocator fileResourceLocator = new PathResourceLocator(resourceDirectory.toPath()); ResourceLocator inputResourceLocator = ImsQTI21Resource.createResolvingResourceLocator(fileResourceLocator); AssessmentObjectXmlLoader assessmentObjectXmlLoader = new AssessmentObjectXmlLoader(qtiXmlReader, inputResourceLocator); - return assessmentObjectXmlLoader.loadAndResolveAssessmentTest(assessmentObjectSystemId); + ResolvedAssessmentTest resolvedAssessmentTest = assessmentObjectXmlLoader.loadAndResolveAssessmentTest(assessmentObjectSystemId); + CodeHelper.printNanoTime(start, "Load test takes"); + return resolvedAssessmentTest; }); } diff --git a/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java b/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java index 8f075f3ec1f..295c2b18212 100644 --- a/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java +++ b/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java @@ -768,6 +768,8 @@ public class AssessmentTestDisplayController extends BasicController implements final TestSessionControllerSettings testSessionControllerSettings = new TestSessionControllerSettings(); testSessionControllerSettings.setTemplateProcessingLimit(computeTemplateProcessingLimit()); + + testProcessingMap.reduceItemProcessingMapMap(testPlan.getTestPlanNodeList()); /* Create controller and wire up notification recorder */ final TestSessionController result = new TestSessionController(qtiService.jqtiExtensionManager(), -- GitLab