Description:
added default grading mode, changed log message in grader git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@393 6386c4cd-e34a-4fa8-8920-d93eb39b512e
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r187:a677937ad928 - - 2 files changed: 7 inserted, 5 deleted

@@ -1,82 +1,84
1 1 class GraderMessage < ActiveRecord::Base
2 2
3 3 belongs_to :taken_grader_process, :class_name => :grader_process
4 4
5 5 GRADE_SUBMISSION = 1
6 6 GRADE_TEST_REQUEST = 2
7 7 STOP = 3
8 8
9 9 RECIPIENT_ANY = -1
10 10
11 11 def self.create_message(recipient, command, options=nil, target_id=nil)
12 12 recipient_id = recipient
13 13 if recipient == :any
14 14 recipient_id = GraderMessage::RECIPIENT_ANY
15 15 end
16 16
17 17 GraderMessage.create(:grader_process_id => recipient_id,
18 18 :command => command,
19 19 :options => options,
20 20 :target_id => target_id,
21 21 :taken => false)
22 22 end
23 23
24 - def self.create_grade_submission(mode,submission)
24 + def self.create_grade_submission(submission,
25 + grading_environment="grading")
25 26 GraderMessage.create_message(:any,
26 27 GraderMessage::GRADE_SUBMISSION,
27 - mode,
28 + grading_environment,
28 29 submission.id)
29 30 end
30 31
31 - def self.create_grade_test_request(mode,test_request)
32 + def self.create_grade_test_request(test_request,
33 + grading_environment="grading")
32 34 GraderMessage.create_message(:any,
33 35 GraderMessage::GRADE_TEST_REQUEST,
34 - mode,
36 + grading_environment,
35 37 test_request.id)
36 38 end
37 39
38 40 def self.create_stop(grader_process_id)
39 41 GraderMessage.create_message(grader_process_id,
40 42 GraderMessage::STOP)
41 43 end
42 44
43 45 def self.get_message_for(recipient_id, accepting_commands=:all)
44 46 command_conditions =
45 47 GraderMessage.build_command_conditions(accepting_commands)
46 48 recp_conditions= "((`grader_process_id` = #{recipient_id.to_i})" +
47 49 " OR (`grader_process_id` = #{GraderMessage::RECIPIENT_ANY}))"
48 50
49 51 message = nil # need this to bind message in do-block for transaction
50 52 begin
51 53 GraderMessage.transaction do
52 54 message = GraderMessage.find(:first,
53 55 :order => "created_at",
54 56 :conditions =>
55 57 "(`taken` = 0)" +
56 58 " AND (#{recp_conditions})" +
57 59 " AND (#{command_conditions})",
58 60 :lock => true)
59 61 if message!=nil
60 62 message.taken = true
61 63 message.taken_grader_process_id = recipient_id
62 64 message.save!
63 65 end
64 66 end
65 67
66 68 rescue
67 69 message = nil
68 70
69 71 end
70 72
71 73 message
72 74 end
73 75
74 76 protected
75 77
76 78 def self.build_command_conditions(accepting_commands)
77 79 if accepting_commands==:all
78 80 return '(1=1)'
79 81 else
80 82 conds = []
81 83 accepting_commands.each do |command|
82 84 conds << "(`command` = #{command.to_i})"
@@ -1,79 +1,79
1 1 #!/usr/bin/ruby
2 2
3 3 def stop_grader(id)
4 4 if id==:all
5 5 File.open(File.dirname(__FILE__) + "/stop.all",'w').close
6 6 else
7 7 File.open(File.dirname(__FILE__) + "/stop.#{id}",'w').close
8 8 end
9 9 end
10 10
11 11 def check_stopfile
12 12 FileTest.exist?(File.dirname(__FILE__) + "/stop.all") or
13 13 FileTest.exist?(File.dirname(__FILE__) + "/stop.#{Process.pid}")
14 14 end
15 15
16 16 def clear_stopfile
17 17 if FileTest.exist?(File.dirname(__FILE__) + "/stop.#{Process.pid}")
18 18 system("rm " + File.dirname(__FILE__) + "/stop.#{Process.pid}")
19 19 end
20 20 end
21 21
22 22 def config
23 23 Grader::Configuration.get_instance
24 24 end
25 25
26 26 def log_file_name
27 27 if !File.exists?(config.log_dir)
28 28 raise "Log directory does not exist: #{config.log_dir}"
29 29 end
30 30 config.log_dir +
31 - "/#{GRADER_ENV}_#{config.grader_mode}.#{Process.pid}"
31 + "/#{GRADER_ENV}.#{Process.pid}"
32 32 end
33 33
34 34 def log(str)
35 35 if config.talkative
36 36 puts str
37 37 end
38 38 if config.logging
39 39 fp = File.open(log_file_name,"a")
40 40 fp.puts("GRADER: #{Time.new.strftime("%H:%M")} #{str}")
41 41 fp.close
42 42 end
43 43 end
44 44
45 45 def display_manual
46 46 puts <<USAGE
47 47 Grader.
48 48 using: (1) grader
49 49 (2) grader environment [mode]
50 50 (3) grader stop [all|pids-list]
51 51 (4) grader --help
52 52 (1) call grader with environment = 'exam', mode = 'queue'
53 53 (2) possible modes are: 'queue', 'prob', 'test_request'
54 54 (3) create stop-file to stop running grader in queue mode
55 55 (4) You are here.
56 56 USAGE
57 57 end
58 58
59 59 #########################################
60 60 # main program
61 61 #########################################
62 62
63 63 # with --help
64 64 if (ARGV.length==1) and (/help/.match(ARGV[0]))
65 65 display_manual
66 66 exit(0)
67 67 end
68 68
69 69 # reading environment and options
70 70 if (ARGV.length >= 1) and (ARGV[0]=='stop')
71 71 if ARGV.length==1
72 72 puts "you should specify pid-list or 'all'"
73 73 display_manual
74 74 elsif (ARGV.length==2) and (ARGV[1]=='all')
75 75 stop_grader(:all)
76 76 puts "A global stop file ('stop.all') created."
77 77 puts "You should remove it manually later."
78 78 else
79 79 (1..ARGV.length-1).each do |i|
You need to be logged in to leave comments. Login now