Giter Club home page Giter Club logo

tango's Introduction

Autolab is a course management service, initially developed by a team of students at Carnegie Mellon University, that enables instructors to offer autograded programming assignments to their students over the Web. The two key ideas in Autolab are autograding, that is, programs evaluating other programs, and scoreboards.

Autolab also provides other services that instructors expect in a course management system, including gradebooks, rosters, handins/handouts, lab writeups, code annotation, manual grading, late penalties, grace days, cheat checking, meetings, partners, and bulk emails.

Since 2010, Autolab has had a transformative impact on education at CMU. Each semester, it is used by about 5,000 CMU students in courses in Pittsburgh, Silicon Valley, Qatar, and Rwanda. In Fall, 2014, we are releasing Autolab as an open-source system, where it will be available to schools all over the world, and hopefully have the same impact it's had at CMU.

Build Status Better Uptime Badge GitHub last commit

Subscribe to our mailing list to receive announcements about major releases and updates to the Autolab Project.

Try It Out

We have a demo site running at https://nightly.autolabproject.com/. See the docs for more information on how to log in and suggestions on things to try.

Installation

We released new documentation! Check it out here.

Testing

Setting up Tests

  1. Add a test database in database.yml

  2. Create and migrate the database.

    RAILS_ENV=test bundle exec rails autolab:setup_test_env

    Do not forget to use RAILS_ENV=test bundle exec in front of every rake/rails command.

  3. Create necessary directories.

    mkdir tmp/
    

Running Tests

After setting up the test environment, simply run spec by:

bundle exec rails spec

You may need to run RAILS_ENV=test bundle exec rails autolab:setup_test_env when re-running tests as some tests may create models in the database.

You can also run individual spec files by running:

rake spec SPEC=./spec/<path_to_spec>/<spec_file>.rb

Rails 5 Support

Autolab is now running on Rails 6. The Rails 5 branch can be found on master-rails-5. We will not be backporting any new features from master to master-rails-5, and we have discontinued Rails 5 support.

Updating Docs

To install mkdocs, run

pip install --user mkdocs

We rely on the mkdocs-material theme, which can be installed with

pip install --user mkdocs-material

To run and preview this locally, run:

mkdocs serve

Once your updated documentation is in master, Jenkins will automatically run a job to update the docs. You can trigger a manual update with

mkdocs gh-deploy

This will build the site using the branch you are currently in (hopefully master), place the built HTML files into the gh-pages branch, and push them to GitHub. GitHub will then automatically deploy the new content in gh-pages.

Contributing

We encourage you to contribute to Autolab! Please check out the Contributing to Autolab Guide for guidelines about how to proceed. You can reach out to us on Slack as well.

License

Autolab is released under the Apache License 2.0.

Using Autolab

Please feel free to use Autolab at your school/organization. If you run into any problems, you can reach the core developers at [email protected] and we would be happy to help. On a case-by-case basis, we also provide servers for free. (Especially if you are an NGO or small high-school classroom)

Changelog

v2.12.0 (2024/01/20) Attachment categories and visual cues

  • Ruby upgraded to 3.2.2
  • Rails upgraded to 6.1.7.6
  • Instructors can now specify a category and "release at" date for attachments
  • Assessment start / end dates are now shown on course homepages

v2.11.0 (2023/05/21) LTI Settings UI, extensions metrics, and simultaneous extension creation

  • Introduced UI to manage LTI integration settings
  • Added extension metrics for instructors to monitor students by number of extensions granted
  • Instructors can now create extensions for multiple students at once

v2.10.0 (2023/01/13) LTI Integration, Generalized Feedback, and Streaming Output

  • Autolab now supports roster syncing with courses on Canvas and other LTI (Learning Tools Interoperability) services. For full instructions on setup, see the documentation.
  • Streaming partial output and new feedback interface
  • Generalized annotations

For older releases, please check out the releases page.

tango's People

Contributors

20wildmanj avatar akhilnadigatla avatar ashleyzhang avatar cg2v avatar clairecw avatar cool00geek avatar damianhxy avatar dependabot[bot] avatar devanshk avatar dlbucci avatar droh avatar evanyeyeye avatar fanpu avatar huahan98 avatar icanb avatar jlge avatar linnil1 avatar loicgelle avatar mihirpandya avatar mojojojo99 avatar nayak16 avatar oliverli avatar victorhuangwq avatar wongsingfo avatar xinyis991105 avatar ymzong avatar yrkumar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tango's Issues

Tango stalls on destroyVM indefinitely

If the VMs on a backend machine become wedged, Tango stalls indefinitely during the retry waiting for destroyVM to finish. Instead, Tango should timeout on waitVM, create a new instance, and retry waitVM on that instance. Eventually, the wedged machine will fill up with VMs, but this will allow Tango to degrade gracefully while we are waiting to restart the backend.

Tango3 jobs are taking too long

The 213 datalab is taking about 7-8 seconds to run, with up to 3-4 seconds required for the scp-based copyin step, which should be almost instantaneous. In the old system, datalab took 2-3 seconds. In the past, this kind of slow-down has been due to authentication issues that required the ssh client to retry using different authentication schemes.

It would be easy to diagnose if there were a way to tell Tango to call ssh with the verbose option (-vvvv) and then dump the ssh output to the tango log.

Recent change in MD5 hash function seems to break Autolab integration

Hi there,

I came across an issue where if I deleted an assessment in Autolab and reuploaded it, Tango would grade the latest file submitted to the previously deleted assessment when a new file was submitted to the reuploaded assessment (even if the files differ). Since there was an update in commit 050e5fc which had to do with MD5 checking, I updated Tango to see if this solved my issue. Unfortunately, this lead me to this error in Autolab:

screenshot from 2015-09-15 01-46-31

After doing some digging in the source, it seems like the output from Tango's open() function in tangoREST.py is incompatible with what Autolab expects since the commit mentioned above. As you can see from the screenshot, the error finally occurs in tango_upload in Autolab's autograde.rb, but is due to the existing_files variable which is obtained from a TangoClient.open(..) call.

Thanks for looking into this.

Nasty 15-381 bug

There is a corner case (experienced by the 15-381) TA that causes Tango to improperly use a previously cached version of a submission file.

Tango should report local times in the job trace and the logfiles

In the feedback that Tango returns to the client, it should be using local times rather than UTC. For example, I submitted this job at 11:07am EST:

Autograder [Thu Jan 15 16:07:46 2015]: Received...
Autograder [Thu Jan 15 16:07:50 2015]: Success: Autodriver returned normally
Autograder [Thu Jan 15 16:07:50 2015]: Here is the output from the autograder:

resetTango should validate and clean up the machines dictionary

I have encountered a couple of situations in testing where the preallocator's machines datastructure got out of sync. There were machine ids in the list that no longer had an entry in the relevant queue, which prevented any jobs from being scheduled on that machine. If all machines get in that state, job scheduling would halt. #77 fixes some of these, but it probably makes sense to either reset the preallocator state or validate it when tango is reset.

Tango3 is not verifying job requests

If the user specifies a non-existing VM image, Tango should return immediately with a validation error. It doesn't. Instead, Tango runs waitVM three times in an unsuccessful attempt to start a non-existing VM image.

Tango should be doing extensive validation of job requests, which it apparently isn't.

Crash Vulnerability in Job Manager

Currently, jobs are removed from the liveJobs queue to the deadJobs queue. If the JobManager goes down before a job is added to the deadJob queue, the job will be lost.
Possible solution: only remove from liveJobs queue when adding to deadJobs queue succeeds with no error.

Verbose ssh output

Instrument tango so that it can be configured to dump ssh verbose output to the logs. This would be a huge help in debugging ssh/scp issues.

UTC regression

It's baaaaack! When I autograded this program the local time was 6:54, but Tango is reporting UTC instead:

_begin_
Autograder [Mon Aug 24 22:54:03 2015]: Received job [email protected]:82
Autograder [Mon Aug 24 22:54:11 2015]: Success: Autodriver returned normally

Autograder [Mon Aug 24 22:54:11 2015]: Here is the output from the autograder:

Autodriver: Job exited with status 0
...
_end_

However, the times in the job trace are correctly reported using local time:
_begin_
Runtime Trace
2015-08-24 18:54:03 | Added job [email protected]:82 to queue
2015-08-24 18:54:03 | Dispatched job [email protected]:82 [try 0]
2015-08-24 18:54:03 | Assigned job [email protected]:82 existing VM
...
_end_

/pool has unexpected behavior when there are no VM pools

When there are no VM pools (for example, when Tango has just started). The /pool endpoint returns {"pools": {}, "statusMsg": "Pool not found", "statusId": -1} complaining that the image name is invalid. This causes unexpected behavior on the frontend Autolab job status page.

Tango3 jobs are taking too long

The 213 datalab is taking about 7-8 seconds to run, with up to 3-4 seconds required for the scp-based copyin step, which should be almost instantaneous. In the old system, datalab took 2-3 seconds. In the past, this kind of slow-down has been due to authentication issues that required the ssh client to retry using different authentication schemes.

It would be easy to diagnose if there were a way to tell Tango to call ssh with the verbose option (-vvvv) and then dump the ssh output to the tango log.

Multiplexing VMMS per job

Jobs can pick which VMMS they want to run on. Some can run on Tashi and some on Distributed Docker.

`elapsed_secs` field in `info` endpoint is wrong

When I hit /info endpoint in the API, the elapsed_secs variable is shown as the current epoch time (e.g. 1429372581) instead of the actual number of seconds elapsed.

May you forgot to save the time when Tango was started?

Writing unit tests for Preallocator

I'm not entirely sure about the Preallocator implementation so I wasn't able to do it, but we definitely need this.

I already created a boilerplate at tests/testPreallocator.py

validateJob does not check for a Makefile

Any TangoJob must have a Makefile since the autodriver runs make in order to start running a job. validateJob should ensure that a Makefile is part of the input files. If not, it should reject the job.

Losing permission bits

The permission bits of files are lost as they are uploaded to Tango (by /upload). As a result, certain scripts that need +x to run, cannot run. We should either find a way to preserve these bits during upload or tell front-end to not rely on those permission bits and do bash hello.sh in their Makefile instead of ./hello.sh.

213 labs are not autograding (high priority)

With the exception of proxylab, 213 uses legacy .rb files that overload functions like autogradeInputFiles and parseAutoresult. None of the labs are autograding. Tango returns a status code of -3 to the front-end with no other feedback.

Kosbie uses similar legacy .rb files, so he's going to be running into this issue as well.

json output is hard to parse

The JSON output of getInfo and getPool uses JSON Arrays of ["a=X", "b=Y"] instead of Objects {"a":X, "b": Y}. This makes them non trivial to parse, since the client has to dive into the string rather then letting a JSON library do all the work for it.

Is there a reason for doing things this way?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.