diff --git a/app/models/grader_message.rb b/app/models/grader_message.rb deleted file mode 100644 --- a/app/models/grader_message.rb +++ /dev/null @@ -1,90 +0,0 @@ -class GraderMessage < ActiveRecord::Base - - belongs_to :taken_grader_process, :class_name => :grader_process - - GRADE_SUBMISSION = 1 - GRADE_TEST_REQUEST = 2 - STOP = 3 - - RECIPIENT_ANY = -1 - - def self.create_message(recipient, command, options=nil, target_id=nil) - recipient_id = recipient - if recipient == :any - recipient_id = GraderMessage::RECIPIENT_ANY - end - - GraderMessage.create(:grader_process_id => recipient_id, - :command => command, - :options => options, - :target_id => target_id, - :taken => false) - end - - def self.create_grade_submission(submission, - grading_environment="grading") - GraderMessage.create_message(:any, - GraderMessage::GRADE_SUBMISSION, - grading_environment, - submission.id) - end - - def self.create_grade_test_request(test_request, - grading_environment="grading") - GraderMessage.create_message(:any, - GraderMessage::GRADE_TEST_REQUEST, - grading_environment, - test_request.id) - end - - def self.create_stop(grader_process_id) - GraderMessage.create_message(grader_process_id, - GraderMessage::STOP) - end - - def self.get_message_for(recipient_id, accepting_commands=:all) - command_conditions = - GraderMessage.build_command_conditions(accepting_commands) - recp_conditions= "((`grader_process_id` = #{recipient_id.to_i})" + - " OR (`grader_process_id` = #{GraderMessage::RECIPIENT_ANY}))" - - message = nil # need this to bind message in do-block for transaction - begin - GraderMessage.transaction do - message = GraderMessage.find(:first, - :order => "created_at", - :conditions => - "(`taken` = 0)" + - " AND (#{recp_conditions})" + - " AND (#{command_conditions})", - :lock => true) - if message!=nil - message.taken = true - message.taken_grader_process_id = recipient_id - message.save! - end - end - - rescue - message = nil - - end - - message - end - - protected - - def self.build_command_conditions(accepting_commands) - if accepting_commands==:all - return '(1=1)' - else - conds = [] - accepting_commands.each do |command| - conds << "(`command` = #{command.to_i})" - end - return "(" + conds.join(" OR ") + ")" - end - end - -end