Learning Dashboard is a tool to visualize and monitor the achievement of learning objectives in subjects based on the team development of software projects.
The main functionalities of the current version of the Learning Dashboard are: providing several ways to visualize and explore the available data, generate predictions of the existing assessments, and perform simulations on how the strategic indicators will evolve based on the value of the factors.
The User's Guide is available in the Wiki.
| Property | Description |
|---|---|
| Type of component | Web Application |
| Build | .war |
| Programming language | Java |
| DBMS | PostgreSQL |
| Frameworks | Spring Boot, AngularJS, Gradle |
| External libraries | Chart.js, MongoDB Java API |
| Learning Dashboard libraries | LD-eval, LD-qma-mongo |
This is a Gradle project. You can use any IDE that supports Gradle to build it, or alternatively you can use the command line using the Gradle wrapper with the command gradlew if you don't have Gradle installed on your machine or with the command gradle if you do, followed by the task war.
# Example: using Gradle wrapper to build with dependencies
cd LD-learning-dashboard
gradlew war
After the build is done the WAR file can be found at the build/libs directory
The Learning Dashboard can be run using Docker. You can find the Dockerfile in the repository, and you can build the image with the following command:
docker build -t learning-dashboard .
After building the image, you can run the container with the following command:
docker run -p 8888:8080 \
-e SECURITY_JWT_SECRET="$(openssl rand -base64 64)" \
learning-dashboard
When this project is deployed from the parent learning-dashboard-infraestructure / learning-dashboard-deploy directory, docker compose up -d --build does not rebuild the Learning Dashboard WAR.
In the current setup, Docker Compose rebuilds the tomcat Docker image from the parent node-tomcat/dockerfile, but that Dockerfile only defines the Tomcat base image:
FROM tomcat:9.0.118-jre21-temurinTomcat stays on the 9.x line because the application still uses the javax.* Servlet/JPA/Validation APIs. Moving to Tomcat 10.x would require a separate Jakarta migration. The Dockerfile does not run Gradle, compile this project, or generate learning-dashboard-3.3.war. The parent Compose file also mounts Tomcat webapps from the host:
${COMPOSE_PROJECT_HOME}/www/api/public:/usr/local/tomcat/webappsThat means Tomcat serves whatever WAR is physically present at:
www/api/public/ROOT.warAfter changing Java code in this repository, rebuild and redeploy the WAR explicitly:
cd LD-learning-dashboard-lite
GRADLE_USER_HOME=.gradle-cache ./gradlew bootWar -x test --no-daemon --no-watch-fs
cd ..
docker compose stop tomcat
rm -rf www/api/public/ROOT
cp LD-learning-dashboard-lite/build/libs/learning-dashboard-3.3.war www/api/public/ROOT.war
docker compose up -d --force-recreate --no-deps tomcatTo verify that the deployed WAR contains the latest JWT security changes:
unzip -l www/api/public/ROOT.war | grep JwtKeyProviderIf JwtKeyProvider.class appears, the deployed WAR contains the JWT key provider code.
Mental model:
Java changes in the dashboard -> gradlew bootWar + copy ROOT.war
Dockerfile/node-tomcat changes -> docker compose up -d --build tomcat
.env changes -> docker compose up -d --force-recreate tomcat
--build only rebuilds Docker images. It does not rebuild Gradle artifacts that live outside the Dockerfile.
JWT signing requires security.jwt.secret, supplied externally as configuration or as the SECURITY_JWT_SECRET environment variable. Use a random value of at least 64 UTF-8 bytes for HS512 and do not commit it to source control.
You can find the user documentation in the repository Wiki and the technical documentation of the RESTful API here.
Software licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
For problems regarding this component, please open an issue in the issues section.