View the GitHub ticket for proposal status updates
Overview
This document explains the need and specifications for a feature that we are calling Course Optimizer. This feature would point out where broken links and images within a given course are. This would minimize what we store on our servers, save course teams time, and provide a better learning experience.
Problem
Course authors often have broken links in their courses but are unaware of this issue. Staff often become aware of this through interaction with students. It would be better if they could check for themselves in Studio.
Use Cases
As a course author, I want to be able to quickly find and replace broken links so that I can be confident that learners don't have to interact with this problem.
As a course author, I want a tool in Studio that enables me to check for broken links and images so that I can more proactively check for issues.
Supporting Data
This was the number one ranked enhancement in an http://edx.org survey for 2024 by nearly 100 respondents (edX partners).
We have qualitative data from http://edx.org partners for the previous two years asking for this feature
http://edx.org partner support has told us that this (broken links/images) is a significant issue for some time
Proposed Solution
Course Optimizer should exist in Studio as another selection in the “Tools” dropdown along with import, export and checklist.
User Workflow
Author scans course for broken links
User navigates to Course Optimizer.
User clicks the button to check for broken links.
User waits for the scan to complete. Browser displays task progress.
[Backend] Celery task for scanning broken links is kicked off.
When the task completes successfully, the browser displays a list of broken links within the course separated by section, subsection, unit and block.
User navigates to the associated block to fix broken links.
Frontend (What should be on the page)
Should contain broken links found within the course.
For each link, there should be
a link to the block
A button for fetching links.
an indicator for fetch progress
time/date “...of last link scan”
Initial:
Scanning:
Results:
Backend
We want to store this similar to what course exporter is doing so it is not fetched every time the page loads. If the user is utilizing Course Optimizer, they will want to fetch an updated list of links often. However, we should still require them to click a button to fetch so as not to overload the celery queue. The frontend will check the status of the current task and only allow a new task to start if the previous one finished or errored.
Api endpoints:
link_check/<course_id> : Starts link check celery task process.
kicks off a celery task that creates a backend storage record for that course
link_check_status/<course_id> : Checks the current status of link_check.
returns status, output link and error message
Backend Storage Record
DTO for Frontend
Celery Task/Modulestore
The celery task should be similar to what is done with course exporting. It would be queued through a backend endpoint in edx-platform. We want to take all/most of the content and run a check for links. Similar to course export, we want a task status check and we wouldn’t allow users to start another task when an existing one is running. We should also time out of the process if the task takes too long.
Following steps are for navigating modulestore.
get course id of the current published version from modulestore.active_versions:
use course id to get xblocks ids from modulestore.structures
use xblock ids to get data from modulestore.definitions:
find links in the data field
update /static/ links
evaluate if link is broken
return list of broken links with their associated xblock
Future Considerations
Recheck Functionality
The recheck functionality is designed for users who have already scanned their course for broken links and plan to address them over multiple sessions. The feature focuses on two key considerations:
Rescanning the entire course is too time-consuming.
Ensuring the list of broken links remains accurate.
Instead of scanning the entire course, the recheck functionality scans only the blocks identified during the previous scan. However, implementing this feature has been deemed too complex for the initial release of Course Optimizer. For more details, refer to the original planning document.
Additional Information
Competitive research (Canvas)
As an instructor on Canvas, you can verify links to course content throughout your course to ensure they are valid. You can check these links using the course link validator, which searches through course content and returns invalid or unresponsive course content links.
Implementation Plan:
2U will drive and fund the delivery and ownership/maintainership
Questions:
The original idea was that we could add to it over time, with other aspects of this feature potentially including videos/images that are not used in the course, duplicate content, etc. However, for this first version perhaps Course Optimizer is not the best title. Link Verifier could be an option. I am open to suggestions.