diff --git a/Gemfile b/Gemfile index ce827d25..a5bf637a 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,4 @@ -source 'http://gems.ruby-china.com' +source 'https://gems.ruby-china.com' unless RUBY_PLATFORM =~ /w32/ # unix-like only diff --git a/app/controllers/myshixuns_controller.rb b/app/controllers/myshixuns_controller.rb index cf7e6ee9..77f768d1 100644 --- a/app/controllers/myshixuns_controller.rb +++ b/app/controllers/myshixuns_controller.rb @@ -1,10 +1,10 @@ # encoding: utf-8 class MyshixunsController < ApplicationController layout 'base_myshixun' - skip_before_filter :verify_authenticity_token, :only => [:training_task_status, :close_webssh] - before_filter :require_login, :except => [:training_task_status, :close_webssh] + skip_before_filter :verify_authenticity_token, :only => [:training_task_status, :close_webssh, :code_runinng_message] + before_filter :require_login, :except => [:training_task_status, :close_webssh, :code_runinng_message] before_filter :check_authentication, :except => [:training_task_status, :close_webssh, :mul_test_home, :mul_test_user, - :mul_test_myshixun, :mul_test_shixun, :mul_test_start] + :mul_test_myshixun, :mul_test_shixun, :mul_test_start, :code_runinng_message] before_filter :find_myshixun, :only => [:show, :myshixun_reset, :open_webssh, :sync_reset_time, :destroy, :search_file_list, :vnc] DCODES = %W(2 3 4 5 6 7 8 9 a b c f e f g h i j k l m n o p q r s t u v w x y z) @@ -435,6 +435,39 @@ class MyshixunsController < ApplicationController end + # 代码运行中的信息接口 + def code_runinng_message + begin + logger.info("######################params: #{params}") + jsonTestDetails = JSON.parse(params[:jsonTestDetails]) + game_id = jsonTestDetails['buildID'] + message = jsonTestDetails['textMsg'] + logger.info("##################code_runinng_message:#{jsonTestDetails}") + logger.info("##################buildID: #{game_id}") + logger.info("##################textMsg: #{message}") + if game_id.present? && message.present? + game = Game.find game_id + msg = game.run_code_message + # 只有评测中的game才会创建和更新代码评测中的信息 + logger.info("##################game: #{game.status}") + logger.info("##################retry_status: #{game.retry_status}") + if game.status == 1 || game.status == 2 && game.retry_status == 1 + if msg.blank? + RunCodeMessage.create!(:game_id => game_id, :status => 1, :message => message) + else + msg.update_attributes(:status => (msg.status + 1), :message => message) + end + else + # 评测完成,初始化评测信息的状态 + msg.update_attributes(:status => 0, :message => nil) if msg.present? + end + render :json => {:data => "success"} + end + rescue Exception => e + render :json => {:data => "failed"} + end + end + # taskId 即返回的game id # 返回结果:params [:stauts] 0 表示成功,其它则失败 # msg 错误信息 @@ -540,7 +573,7 @@ class MyshixunsController < ApplicationController logger.info("training_task_status start#4**#{game_id}**** #{Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")}") render :json => {:data => "success"} rescue Exception => e - render :json => {:data => "failed"} + render :json => {:data => "failed, errer_message:#{e}"} logger.error("training_task_status error: #{e}") raise ActiveRecord::Rollback end diff --git a/app/models/game.rb b/app/models/game.rb index 9f92d109..47674541 100644 --- a/app/models/game.rb +++ b/app/models/game.rb @@ -13,6 +13,7 @@ class Game < ActiveRecord::Base has_many :challenge_samples has_many :game_codes, :dependent => :destroy has_many :evaluate_records, :dependent => :destroy + has_one :run_code_message, :dependent => :destroy include ApplicationHelper scope :min, lambda { select([:id, :status, :myshixun_id, :user_id, :final_score, :challenge_id, :identifier, diff --git a/app/models/run_code_message.rb b/app/models/run_code_message.rb new file mode 100644 index 00000000..191ead34 --- /dev/null +++ b/app/models/run_code_message.rb @@ -0,0 +1,5 @@ +class RunCodeMessage < ActiveRecord::Base + # attr_accessible :title, :body + belongs_to :game + +end diff --git a/app/services/games_service.rb b/app/services/games_service.rb index d7b56838..7f0e6df4 100644 --- a/app/services/games_service.rb +++ b/app/services/games_service.rb @@ -498,7 +498,9 @@ class GamesService # 更新评测次数 game.update_column(:evaluate_count, (game.evaluate_count.to_i + 1)) - + # 清空代码评测信息 + msg = game.run_code_message + msg.update_attributes(:status => 0, :message => nil) if msg.present? # 更新时间是为了TPM端显示的更新,退出实训及访问实训的时候会更新 myshixun.update_column(:updated_at, Time.now) @@ -793,7 +795,10 @@ class GamesService # 如果没有超时并且正在评测中 # 判断评测中的状态有两种:1、如果之前没有通关的,只需判断status为1即可;如果通过关,则判断game的resubmit_identifier是否更新 if (params[:time_out] == "false") && ((params[:resubmit].blank? && game.status==1) || (params[:resubmit].present? && (params[:resubmit] != resubmit_identifier))) - return + # 代码评测的信息 + running_code_status = game.run_code_message.try(:status) + running_code_message = game.run_code_message.try(:message) + return {:running_code_status => running_code_status, :running_code_message => running_code_message} end Rails.logger.info("##### resubmit_identifier is #{resubmit_identifier}") @@ -886,8 +891,10 @@ class GamesService next_game = Game.next_game(shixun.id, game.myshixun_id, game_challenge.position).try(:identifier) output_hash = {:test_sets => test_sets, :had_test_count => test_sets_count, :test_sets_count => test_sets_count, :had_passed_testsests_error_count => had_passed_testsests_error_count} - return {:grade => grade, :gold => score, :experience => experience, :status => game_status, :had_done => had_done, :position => game_challenge.position, - :port => port, :power => power, :record => record, :mirror_name => mirror_name, :picture => picture, :web_route => web_route, :latest_output => latest_output, + + return {:grade => grade, :gold => score, :experience => experience, :status => game_status, :had_done => had_done, + :position => game_challenge.position, :port => port, :power => power, :record => record, + :mirror_name => mirror_name, :picture => picture, :web_route => web_route, :latest_output => latest_output, :star => game.star, :next_game => next_game, :prev_game => prev_game}.merge(output_hash) end diff --git a/config/additional_environment.rb.example b/config/additional_environment.rb.example old mode 100644 new mode 100755 diff --git a/config/application.rb b/config/application.rb old mode 100644 new mode 100755 diff --git a/config/boot.rb b/config/boot.rb old mode 100644 new mode 100755 diff --git a/config/configuration.yml.example b/config/configuration.yml.example old mode 100644 new mode 100755 diff --git a/config/configuration.yml.template b/config/configuration.yml.template old mode 100644 new mode 100755 diff --git a/config/environment.rb b/config/environment.rb old mode 100644 new mode 100755 diff --git a/config/environments/development.rb b/config/environments/development.rb old mode 100644 new mode 100755 diff --git a/config/environments/production.rb b/config/environments/production.rb old mode 100644 new mode 100755 diff --git a/config/environments/test.rb b/config/environments/test.rb old mode 100644 new mode 100755 diff --git a/config/environments/test_pgsql.rb b/config/environments/test_pgsql.rb old mode 100644 new mode 100755 diff --git a/config/environments/test_sqlite3.rb b/config/environments/test_sqlite3.rb old mode 100644 new mode 100755 diff --git a/config/initializers/00-core_plugins.rb b/config/initializers/00-core_plugins.rb old mode 100644 new mode 100755 diff --git a/config/initializers/10-patches.rb b/config/initializers/10-patches.rb old mode 100644 new mode 100755 diff --git a/config/initializers/20-mime_types.rb b/config/initializers/20-mime_types.rb old mode 100644 new mode 100755 diff --git a/config/initializers/30-redmine.rb b/config/initializers/30-redmine.rb old mode 100644 new mode 100755 diff --git a/config/initializers/abstract_mysql_adapter.rb b/config/initializers/abstract_mysql_adapter.rb old mode 100644 new mode 100755 diff --git a/config/initializers/autoreload_grape.rb b/config/initializers/autoreload_grape.rb old mode 100644 new mode 100755 diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb old mode 100644 new mode 100755 diff --git a/config/initializers/delayed_job_config.rb b/config/initializers/delayed_job_config.rb old mode 100644 new mode 100755 diff --git a/config/initializers/elasticsearch_dev_patch.rb b/config/initializers/elasticsearch_dev_patch.rb old mode 100644 new mode 100755 diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb old mode 100644 new mode 100755 diff --git a/config/initializers/kaminari_config.rb b/config/initializers/kaminari_config.rb old mode 100644 new mode 100755 diff --git a/config/initializers/logger.rb b/config/initializers/logger.rb old mode 100644 new mode 100755 diff --git a/config/initializers/mini_profiler.rb b/config/initializers/mini_profiler.rb old mode 100644 new mode 100755 diff --git a/config/initializers/rails_kindeditor.rb b/config/initializers/rails_kindeditor.rb old mode 100644 new mode 100755 diff --git a/config/initializers/redis.rb b/config/initializers/redis.rb old mode 100644 new mode 100755 diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb old mode 100644 new mode 100755 diff --git a/config/initializers/seems_rateable.rb b/config/initializers/seems_rateable.rb old mode 100644 new mode 100755 diff --git a/config/initializers/send_mail.rb b/config/initializers/send_mail.rb old mode 100644 new mode 100755 diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb old mode 100644 new mode 100755 diff --git a/config/initializers/subdomain.rb b/config/initializers/subdomain.rb old mode 100644 new mode 100755 diff --git a/config/initializers/task.rb b/config/initializers/task.rb old mode 100644 new mode 100755 diff --git a/config/locales/account/en.yml b/config/locales/account/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/account/zh.yml b/config/locales/account/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/admins/en.yml b/config/locales/admins/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/admins/zh.yml b/config/locales/admins/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/commons/en.yml b/config/locales/commons/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/commons/zh.yml b/config/locales/commons/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/contacts/en.yml b/config/locales/contacts/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/contacts/zh.yml b/config/locales/contacts/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/contests/en.yml b/config/locales/contests/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/contests/zh.yml b/config/locales/contests/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/courses/en.yml b/config/locales/courses/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/courses/zh.yml b/config/locales/courses/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/en.yml b/config/locales/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/forums/en.yml b/config/locales/forums/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/forums/zh.yml b/config/locales/forums/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/mailers/en.yml b/config/locales/mailers/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/mailers/zh.yml b/config/locales/mailers/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/my/en.yml b/config/locales/my/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/my/zh.yml b/config/locales/my/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/navigatiors/en.yml b/config/locales/navigatiors/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/navigatiors/zh.yml b/config/locales/navigatiors/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/projects/en.yml b/config/locales/projects/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/projects/zh.yml b/config/locales/projects/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/users/en.yml b/config/locales/users/en.yml old mode 100644 new mode 100755 diff --git a/config/locales/users/zh.yml b/config/locales/users/zh.yml old mode 100644 new mode 100755 diff --git a/config/locales/zh.yml b/config/locales/zh.yml old mode 100644 new mode 100755 diff --git a/config/menu.yml b/config/menu.yml old mode 100644 new mode 100755 diff --git a/config/menu.yml.production b/config/menu.yml.production old mode 100644 new mode 100755 diff --git a/config/menu.yml.test b/config/menu.yml.test old mode 100644 new mode 100755 diff --git a/config/newrelic.yaml b/config/newrelic.yaml old mode 100644 new mode 100755 diff --git a/config/preinitializer.rb b/config/preinitializer.rb old mode 100644 new mode 100755 diff --git a/config/private.key b/config/private.key old mode 100644 new mode 100755 diff --git a/config/query_reviewer.yml b/config/query_reviewer.yml old mode 100644 new mode 100755 diff --git a/config/routes.rb b/config/routes.rb index 0078eb48..051ed500 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -464,6 +464,7 @@ RedmineApp::Application.routes.draw do ## oauth相关 get 'sigle_mul_test' get 'sigle_update_myshixun' match 'training_task_status', :via => [:get, :post] + match 'code_runinng_message', :via => [:get, :post] end resources :games, :path => "stages" do member do diff --git a/config/settings.yml b/config/settings.yml old mode 100644 new mode 100755 diff --git a/config/wechat.yml.test b/config/wechat.yml.test old mode 100644 new mode 100755 diff --git a/db/migrate/20190315093727_create_run_code_messages.rb b/db/migrate/20190315093727_create_run_code_messages.rb new file mode 100644 index 00000000..59aea2cc --- /dev/null +++ b/db/migrate/20190315093727_create_run_code_messages.rb @@ -0,0 +1,10 @@ +class CreateRunCodeMessages < ActiveRecord::Migration + def change + create_table :run_code_messages do |t| + t.integer :status + t.string :message + t.references :game + t.timestamps + end + end +end \ No newline at end of file diff --git a/lib/dalli-2.7.2/Gemfile b/lib/dalli-2.7.2/Gemfile index bc0683f1..a432131f 100644 --- a/lib/dalli-2.7.2/Gemfile +++ b/lib/dalli-2.7.2/Gemfile @@ -1,4 +1,4 @@ -source 'http://gems.ruby-china.com/' +source 'https://gems.ruby-china.com/' gemspec diff --git a/lib/gitlab-cli/Gemfile b/lib/gitlab-cli/Gemfile index 12b41ffc..ed88c580 100644 --- a/lib/gitlab-cli/Gemfile +++ b/lib/gitlab-cli/Gemfile @@ -1,4 +1,4 @@ -source 'http://gems.ruby-china.com/' +source 'https://gems.ruby-china.com/' # Specify your gem's dependencies in gitlab.gemspec gemspec diff --git a/lib/plugins/acts-as-taggable-on/Gemfile b/lib/plugins/acts-as-taggable-on/Gemfile index 130a0954..d914b155 100644 --- a/lib/plugins/acts-as-taggable-on/Gemfile +++ b/lib/plugins/acts-as-taggable-on/Gemfile @@ -1,4 +1,4 @@ -source 'http://gems.ruby-china.com/' +source 'https://gems.ruby-china.com/' gemspec diff --git a/lib/rails_kindeditor/Gemfile b/lib/rails_kindeditor/Gemfile index 14c604cd..f3f6a510 100644 --- a/lib/rails_kindeditor/Gemfile +++ b/lib/rails_kindeditor/Gemfile @@ -1,4 +1,4 @@ -source "http://gems.ruby-china.com/" +source "https://gems.ruby-china.com/" gemspec diff --git a/lib/rails_kindeditor/Gemfile.lock b/lib/rails_kindeditor/Gemfile.lock index 65342187..636293aa 100644 --- a/lib/rails_kindeditor/Gemfile.lock +++ b/lib/rails_kindeditor/Gemfile.lock @@ -6,7 +6,7 @@ PATH mini_magick GEM - remote: http://gems.ruby-china.com/ + remote: https://gems.ruby-china.com/ specs: activemodel (4.2.3) activesupport (= 4.2.3) diff --git a/lib/wechat/Gemfile b/lib/wechat/Gemfile index 4a55499b..d5c345ff 100644 --- a/lib/wechat/Gemfile +++ b/lib/wechat/Gemfile @@ -1,4 +1,4 @@ -source 'http://gems.ruby-china.com/' +source 'https://gems.ruby-china.com/' gemspec diff --git a/plugins/redmine_ckeditor/Gemfile b/plugins/redmine_ckeditor/Gemfile index d6baef10..9ab1114a 100644 --- a/plugins/redmine_ckeditor/Gemfile +++ b/plugins/redmine_ckeditor/Gemfile @@ -1,4 +1,4 @@ -source 'http://gems.ruby-china.com/' +source 'https://gems.ruby-china.com/' gem 'rich', '1.4.6' gem 'kaminari' diff --git a/plugins/redmine_ckeditor/Gemfile.lock b/plugins/redmine_ckeditor/Gemfile.lock index 96a48386..c62d881c 100644 --- a/plugins/redmine_ckeditor/Gemfile.lock +++ b/plugins/redmine_ckeditor/Gemfile.lock @@ -1,5 +1,5 @@ GEM - remote: http://gems.ruby-china.com/ + remote: https://gems.ruby-china.com/ specs: actionmailer (4.1.6) actionpack (= 4.1.6) diff --git a/spec/factories/run_code_messages.rb b/spec/factories/run_code_messages.rb new file mode 100644 index 00000000..b52afbc3 --- /dev/null +++ b/spec/factories/run_code_messages.rb @@ -0,0 +1,5 @@ +FactoryGirl.define do + factory :run_code_message do + + end +end diff --git a/spec/models/run_code_message_spec.rb b/spec/models/run_code_message_spec.rb new file mode 100644 index 00000000..6e5cb831 --- /dev/null +++ b/spec/models/run_code_message_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe RunCodeMessage, :type => :model do + pending "add some examples to (or delete) #{__FILE__}" +end