Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix scoreboard sorting failing on custom scoreboardOrderSubmissions, add more error checking when creating scoreboard entries / displaying #2092

Merged
merged 7 commits into from
Feb 24, 2024

Conversation

20wildmanj
Copy link
Contributor

@20wildmanj 20wildmanj commented Feb 17, 2024

Description

  • Adds more error-catching logic when calling custom scoreboardOrderSubmissions, in the case that an exception is raised, and tells the instructor via an error message
  • Adds a rescue block to the top-level sort call in #show so that if a bad sort / comparison occurs, the error can be caught
  • Instead of returning scoreboard entries with "-" on errors, raise an error, and in #show, revert to an empty array
  • In the #show view code, check that the current entry length is greater than the index in order to show a score, else show an error icon (which handles the empty array case)
  • Fix up logging, add more specific errors to be returned to instructors, and redirect students back to assessments index

Motivation and Context

Closes #2086

How Has This Been Tested?

Import the provided assessment:
randomlab5_20240217.tar.zip

  1. Upload at least two submissions as students
  2. View scoreboard, see that it renders fine (if it is not rendering fine, upload autograder.taras the autograder)
  3. Upload the assessment config file randomlab5-bad-scoreboard-order.rb (in Edit Assessment you can upload)
  • this test returns a bad sort, causing an ArgumentError
  1. See that you get an error as follows:
    Screenshot 2024-02-17 at 3 22 59 PM
  2. Try to view scoreboard as a student and see that you get redirected back to assessment index with an error flash
  3. Upload the initial assessment config file back, and then upload autograde-bad.tar as the new autograder
  • this autograder returns just a number instead of an array
  1. Regrade all submissions
  2. view scoreboard as instructor, see that following error appears:
    Screenshot 2024-02-17 at 3 59 06 PM
  3. View scoreboard as student, see that scoreboard is visible but error icons appear:
    Screenshot 2024-02-17 at 4 03 59 PM
  4. Upload the old autograder.tar back, and regrade all
  5. Then add this code after line 296 in scoreboards_controller.rb:
if [true, false].sample
      parsed["scoreboard"] = 0
    end

( you may need to also reload the config file)

  • this replicates the scenario where sometimes the scoreboard results aren't correct / autograder failed
  1. view the scoreboard as an instructor, see the following error
    Screenshot 2024-02-17 at 4 41 53 PM

  2. As a student, see something like this (all the bad scoreboard entries are at the bottom)
    Screenshot 2024-02-17 at 2 30 28 PM

Types of changes

  • Bug fix (non-breaking change which fixes an issue)

Copy link
Contributor

coderabbitai bot commented Feb 17, 2024

Walkthrough

This set of changes introduces improved error handling and sorting logic in the scoreboards_controller.rb, alongside UI adjustments in scoreboards/show.html.erb to enhance user experience when encountering errors. The modifications aim to address specific bugs and enhance the robustness of the application by preventing crashes and displaying more informative error messages.

Changes

File Path Change Summary
app/controllers/scoreboards_controller.rb Error handling in show, sorting logic adjustment, enhanced error messages and logging.
app/views/scoreboards/_form.html.erb Modified form_for declaration and updated styling for error messages.
app/views/scoreboards/show.html.erb Added error handling section and updated logic to prevent index out of bounds errors.
config/routes.rb Removed get "help", on: :member route declaration within the scoreboard resource configuration.

Assessment against linked issues

Objective Addressed Explanation
ArgumentError in scoreboards#show due to Hash comparison [#2086]
Improve error handling and logging in scoreboard processing [#2086]
Ensure UI gracefully handles errors and prevents index out of bounds [#2086]

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share

Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit-tests for this file.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit tests for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository from git and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit tests.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • The JSON schema for the configuration file is available here.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/coderabbit-overrides.v2.json

CodeRabbit Discord Community

Join our Discord Community to get help, request features, and share feedback.

@gitstream-cm gitstream-cm bot requested review from a team and damianhxy and removed request for a team February 17, 2024 21:43
app/views/scoreboards/show.html.erb Outdated Show resolved Hide resolved
app/controllers/scoreboards_controller.rb Outdated Show resolved Hide resolved
@gitstream-cm gitstream-cm bot added the medium Pull request is medium label Feb 17, 2024
@gitstream-cm gitstream-cm bot requested a review from a team February 17, 2024 21:43
@damianhxy
Copy link
Member

When updating the assessment rb file, if you go straight to the scoreboard (i.e. don't load the assessment index page), there is an error about an undefined method.

Screenshot 2024-02-21 at 02 19 53

However, after loading the assessment index page at least once, the error message is now as expected

Screenshot 2024-02-21 at 02 31 54

Suspect it is because reload_config_file is not called by assessments_controller.rb#update

Copy link
Member

@damianhxy damianhxy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Functionality generally looks good, but left some nits

app/controllers/scoreboards_controller.rb Outdated Show resolved Hide resolved
app/views/scoreboards/show.html.erb Outdated Show resolved Hide resolved
app/views/scoreboards/show.html.erb Outdated Show resolved Hide resolved
app/views/scoreboards/show.html.erb Outdated Show resolved Hide resolved
app/controllers/scoreboards_controller.rb Outdated Show resolved Hide resolved
app/controllers/scoreboards_controller.rb Outdated Show resolved Hide resolved
@gitstream-cm gitstream-cm bot requested a review from a team February 21, 2024 07:59
@20wildmanj
Copy link
Contributor Author

When updating the assessment rb file, if you go straight to the scoreboard (i.e. don't load the assessment index page), there is an error about an undefined method.

Screenshot 2024-02-21 at 02 19 53

However, after loading the assessment index page at least once, the error message is now as expected

Screenshot 2024-02-21 at 02 31 54

Suspect it is because reload_config_file is not called by assessments_controller.rb#update

I noticed this while testing, not sure why going to index would resolve this though because doesn't seem that index doesn't do any calls to reload the config file? Not sure if it's worth looking into a fix for a hook that very few classes use (and the ones that do should understand how to reload the config file)

Copy link
Member

@damianhxy damianhxy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ran through testing workflow, LGTM

@20wildmanj 20wildmanj added this pull request to the merge queue Feb 24, 2024
Merged via the queue into master with commit ce84bec Feb 24, 2024
5 checks passed
@20wildmanj 20wildmanj deleted the joeywildman-fix-scoreboard-sorting branch February 24, 2024 21:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
medium Pull request is medium waiting-for-review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ArgumentError when viewing scoreboard
3 participants