Show More
Commit Description:
associate logins with users
Commit Description:
associate logins with users
References:
File last commit:
Show/Diff file:
Action:
app/controllers/graders_controller.rb
| 119 lines
| 3.5 KiB
| text/x-ruby
| RubyLexer
|
|
r29 | class GradersController < ApplicationController | ||
|
r32 | |||
r425 | before_filter :admin_authorization, except: [ :submission ] | |||
before_filter(only: [:submission]) { | ||||
return false unless authenticate | ||||
if GraderConfiguration["right.user_view_submission"] | ||||
return true; | ||||
end | ||||
admin_authorization | ||||
} | ||||
|
r105 | |||
|
r203 | verify :method => :post, :only => ['clear_all', | ||
'start_exam', | ||||
'start_grading', | ||||
'stop_all', | ||||
'clear_terminated'], | ||||
|
r105 | :redirect_to => {:action => 'index'} | ||
def index | ||||
redirect_to :action => 'list' | ||||
end | ||||
|
r32 | |||
def list | ||||
|
r175 | @grader_processes = GraderProcess.find_running_graders | ||
|
r32 | @stalled_processes = GraderProcess.find_stalled_process | ||
|
r175 | |||
@terminated_processes = GraderProcess.find_terminated_graders | ||||
|
r127 | |||
@last_task = Task.find(:first, | ||||
:order => 'created_at DESC') | ||||
@last_test_request = TestRequest.find(:first, | ||||
:order => 'created_at DESC') | ||||
r461 | @submission = Submission.order("id desc").limit(20) | |||
|
r32 | end | ||
def clear | ||||
grader_proc = GraderProcess.find(params[:id]) | ||||
grader_proc.destroy if grader_proc!=nil | ||||
redirect_to :action => 'list' | ||||
end | ||||
|
r175 | def clear_terminated | ||
GraderProcess.find_terminated_graders.each do |p| | ||||
p.destroy | ||||
end | ||||
redirect_to :action => 'list' | ||||
end | ||||
|
r105 | def clear_all | ||
GraderProcess.find(:all).each do |p| | ||||
p.destroy | ||||
end | ||||
redirect_to :action => 'list' | ||||
end | ||||
def view | ||||
if params[:type]=='Task' | ||||
redirect_to :action => 'task', :id => params[:id] | ||||
else | ||||
redirect_to :action => 'test_request', :id => params[:id] | ||||
end | ||||
end | ||||
def test_request | ||||
@test_request = TestRequest.find(params[:id]) | ||||
end | ||||
def task | ||||
@task = Task.find(params[:id]) | ||||
end | ||||
def submission | ||||
@submission = Submission.find(params[:id]) | ||||
r420 | formatter = Rouge::Formatters::HTML.new(css_class: 'highlight', line_numbers: true ) | |||
lexer = case @submission.language.name | ||||
when "c" then Rouge::Lexers::C.new | ||||
when "cpp" then Rouge::Lexers::Cpp.new | ||||
when "pas" then Rouge::Lexers::Pas.new | ||||
when "ruby" then Rouge::Lexers::Ruby.new | ||||
when "python" then Rouge::Lexers::Python.new | ||||
when "java" then Rouge::Lexers::Java.new | ||||
r451 | when "php" then Rouge::Lexers::PHP.new | |||
r420 | end | |||
@formatted_code = formatter.format(lexer.lex(@submission.source)) | ||||
@css_style = Rouge::Themes::ThankfulEyes.render(scope: '.highlight') | ||||
|
r105 | end | ||
|
r202 | # various grader controls | ||
def stop | ||||
grader_proc = GraderProcess.find(params[:id]) | ||||
|
r203 | GraderScript.stop_grader(grader_proc.pid) | ||
flash[:notice] = 'Grader stopped. It may not disappear now, but it should disappear shortly.' | ||||
redirect_to :action => 'list' | ||||
end | ||||
def stop_all | ||||
GraderScript.stop_graders(GraderProcess.find_running_graders + | ||||
GraderProcess.find_stalled_process) | ||||
flash[:notice] = 'Graders stopped. They may not disappear now, but they should disappear shortly.' | ||||
|
r202 | redirect_to :action => 'list' | ||
end | ||||
|
r203 | def start_grading | ||
GraderScript.start_grader('grading') | ||||
flash[:notice] = '2 graders in grading env started, one for grading queue tasks, another for grading test request' | ||||
redirect_to :action => 'list' | ||||
end | ||||
|
r202 | |||
|
r203 | def start_exam | ||
GraderScript.start_grader('exam') | ||||
flash[:notice] = '2 graders in grading env started, one for grading queue tasks, another for grading test request' | ||||
redirect_to :action => 'list' | ||||
|
r202 | end | ||
|
r29 | end | ||