Merge branch 'dev_daiao' into dev_jupyter

chromesetting
daiao 5 years ago
commit 4f51d0a120

@ -1,6 +1,6 @@
class GamesController < ApplicationController class GamesController < ApplicationController
before_action :require_login, :check_auth before_action :require_login, :check_auth
before_action :find_game before_action :find_game, except: [:jupyter]
before_action :find_shixun, only: [:show, :answer, :rep_content, :choose_build, :game_build, :game_status] before_action :find_shixun, only: [:show, :answer, :rep_content, :choose_build, :game_build, :game_status]
before_action :allowed before_action :allowed
@ -91,6 +91,13 @@ class GamesController < ApplicationController
end end
end end
def jupyter
# Jupyter没有challenge
@myshixun = Myshixun.find_by_identifier params[:identifier]
@shixun = @myshixun.shixun
end
def reset_vnc_link def reset_vnc_link
begin begin
# 删除vnc的pod # 删除vnc的pod

@ -6,16 +6,17 @@ class ShixunsController < ApplicationController
before_action :require_login, :check_auth, except: [:download_file, :index, :menus, :show, :show_right, :ranking_list, before_action :require_login, :check_auth, except: [:download_file, :index, :menus, :show, :show_right, :ranking_list,
:discusses, :collaborators, :fork_list, :propaedeutics] :discusses, :collaborators, :fork_list, :propaedeutics]
before_action :check_account, only: [:new, :create, :shixun_exec] before_action :check_account, only: [:new, :create, :shixun_exec, :jupyter_exec]
before_action :find_shixun, except: [:index, :new, :create, :menus, :get_recommend_shixuns, before_action :find_shixun, except: [:index, :new, :create, :menus, :get_recommend_shixuns,
:propaedeutics, :departments, :apply_shixun_mirror, :propaedeutics, :departments, :apply_shixun_mirror,
:get_mirror_script, :download_file, :shixun_list, :batch_send_to_course] :get_mirror_script, :download_file, :shixun_list, :batch_send_to_course]
before_action :shixun_access_allowed, except: [:index, :new, :create, :menus, :get_recommend_shixuns, before_action :shixun_access_allowed, except: [:index, :new, :create, :menus, :get_recommend_shixuns,
:propaedeutics, :departments, :apply_shixun_mirror, :propaedeutics, :departments, :apply_shixun_mirror, :jupyter_exec,
:get_mirror_script, :download_file, :shixun_list, :batch_send_to_course] :get_mirror_script, :download_file, :shixun_list, :batch_send_to_course]
before_action :find_repo_name, only: [:repository, :commits, :file_content, :update_file, :shixun_exec, :copy, :add_file] before_action :find_repo_name, only: [:repository, :commits, :file_content, :update_file, :shixun_exec, :copy,
:add_file, :jupyter_exec]
before_action :allowed, only: [:update, :close, :update_propaedeutics, :settings, :publish, before_action :allowed, only: [:update, :close, :update_propaedeutics, :settings, :publish,
:shixun_members_added, :change_manager, :collaborators_delete, :shixun_members_added, :change_manager, :collaborators_delete,
@ -691,112 +692,40 @@ class ShixunsController < ApplicationController
end end
end end
# def shixun_exec # jupyter开启挑战
# if is_shixun_opening? def jupyter_exec
# tip_show_exception(-3, "#{@shixun.opening_time.strftime('%Y-%m-%d %H:%M:%S')}") begin
# end if is_shixun_opening?
# current_myshixun = @shixun.current_myshixun(current_user.id) tip_show_exception(-3, "#{@shixun.opening_time.strftime('%Y-%m-%d %H:%M:%S')}")
# end
# min_challenges = @shixun.challenges.pluck(:id , :st) current_myshixun = @shixun.current_myshixun(current_user.id)
# # 因为读写分离有延迟所以如果是重置来的请求可以先跳过重置过来的params[:reset]为1 if current_myshixun
# if current_myshixun && params[:reset] != "1" @myshixun = current_myshixun
# games = current_myshixun.games else
# # 如果TPM和TPI的管卡数不相等或者关卡顺序错了说明实训被极大的改动需要重置,实训发布前打过的实训都需要重置 commit = GitService.commits(repo_path: @repo_path).try(:first)
# if is_shixun_reset?(games, min_challenges, current_myshixun) uid_logger("First comit########{commit}")
# # 这里页面弹框要收到 当前用户myshixun的identifier. tip_exception("开启实战前请先在版本库中提交代码") if commit.blank?
# tip_show_exception("/myshixuns/#{current_myshixun.try(:identifier)}/reset_my_game") commit_id = commit["id"]
# end cloud_bridge = edu_setting('cloud_bridge')
# myshixun_identifier = generate_identifier Myshixun, 10
# ActiveRecord::Base.transaction do
# if current_myshixun.repo_name.nil? @myshixun = @shixun.myshixuns.create!(user_id: current_user.id, identifier: myshixun_identifier,
# g = Gitlab.client modify_time: @shixun.modify_time, reset_time: @shixun.reset_time,
# repo_name = g.project(current_myshixun.gpid).try(:path_with_namespace) onclick_time: Time.now, commit_id: commit_id)
# current_myshixun.update_column(:repo_name, repo_name) # fork仓库
# end project_fork(@myshixun, @repo_path, current_user.login)
# rep_url = Base64.urlsafe_encode64(repo_ip_url @repo_path)
# # 如果存在实训,则直接进入实训 uri = "#{cloud_bridge}/bridge/game/openGameInstance"
# # 如果实训允许跳关传参params[:challenge_id]跳入具体的关卡 params = {tpiID: "#{myshixun.id}", tpmGitURL: rep_url, tpiRepoName: myshixun.repo_name.split("/").last}
# @current_task = interface_post uri, params, 83, "实训云平台繁忙繁忙等级83"
# if params[:challenge_id] end
# game = games.where(challenge_id: params[:challenge_id]).take end
# if @shixun.task_pass || game.status != 3 rescue => e
# game uid_logger_error(e.message)
# else tip_exception("实训云平台繁忙繁忙等级81")
# current_myshixun.current_task(games) end
# end end
# else
# current_myshixun.current_task(games)
# end
# else
# # 如果未创建关卡一定不能开启实训否则TPI没法找到当前的关卡
# if @shixun.challenges_count == 0
# tip_exception("开启实战前请先创建实训关卡")
# end
#
# # 判断实训是否全为选择题
# is_choice_type = (min_challenges.size == min_challenges.select{|challenge| challenge.last == 1}.count)
# if !is_choice_type
# commit = GitService.commits(repo_path: @repo_path).try(:first)
# uid_logger("First comit########{commit}")
# tip_exception("开启实战前请先在版本库中提交代码") if commit.blank?
# commit_id = commit["id"]
# end
#
# begin
# ActiveRecord::Base.transaction do
# begin
# myshixun_identifier = generate_identifier Myshixun, 10
# myshixun_params = {user_id: current_user.id, identifier: myshixun_identifier,
# modify_time: @shixun.modify_time, reset_time: @shixun.reset_time,
# onclick_time: Time.now, commit_id: commit_id}
# @myshixun = @shixun.myshixuns.create!(myshixun_params)
# # 其它创建关卡等操作
# challenges = @shixun.challenges
# # 之所以增加user_id是为了方便统计查询性能
# game_attrs = %i[challenge_id myshixun_id status user_id open_time identifier modify_time created_at updated_at]
# Game.bulk_insert(*game_attrs) do |worker|
# base_attr = {myshixun_id: @myshixun.id, user_id: @myshixun.user_id}
# challenges.each_with_index do |challenge, index|
# status = (index == 0 ? 0 : 3)
# game_identifier = generate_identifier(Game, 12)
# worker.add(base_attr.merge(challenge_id: challenge.id, status: status, open_time: Time.now,
# identifier: game_identifier, modify_time: challenge.modify_time))
# end
# end
# @current_task = @myshixun.current_task(@myshixun.games)
# rescue Exception => e
# logger.error("------ActiveRecord::RecordInvalid: #{e.message}")
# raise("ActiveRecord::RecordInvalid")
# end
# end
# # 如果实训是纯选择题则不需要去fork仓库以及中间层的相关操作了
# ActiveRecord::Base.transaction do
# unless is_choice_type
# # fork仓库
# cloud_bridge = edu_setting('cloud_bridge')
# project_fork(@myshixun, @repo_path, current_user.login)
# rep_url = Base64.urlsafe_encode64(repo_ip_url @repo_path)
# uid_logger("start openGameInstance")
# uri = "#{cloud_bridge}/bridge/game/openGameInstance"
# logger.info("end openGameInstance")
# params = {tpiID: "#{@myshixun.id}", tpmGitURL: rep_url, tpiRepoName: @myshixun.repo_name.split("/").last}
# uid_logger("openGameInstance params is #{params}")
# interface_post uri, params, 83, "实训云平台繁忙繁忙等级83"
# end
# end
# rescue Exception => e
# logger.info("shixun_exec error: #{e.message}")
# if e.message != "ActiveRecord::RecordInvalid"
# logger.error("##########project_fork error #{e.message}")
# @myshixun.destroy!
# end
# raise "实训云平台繁忙繁忙等级81"
# end
# end
# end
# gameID 及实训ID
# status: 0 , 1 申请过, 2实训关卡路径未填 3 实训标签未填, 4 实训未创建关卡
def publish def publish
@status = 0 @status = 0
@position = [] @position = []

@ -0,0 +1,5 @@
json.user do
json.partial! 'users/user', user: current_user
end
json.(@shixun, :id, :identifier, :status, :name)

@ -0,0 +1 @@
json.identifier @myshixun.identifier

@ -218,6 +218,7 @@ Rails.application.routes.draw do
get :check_test_sets get :check_test_sets
get :unlock_choose_answer get :unlock_choose_answer
get :get_choose_answer get :get_choose_answer
get :jupyter
end end
collection do collection do
@ -277,6 +278,7 @@ Rails.application.routes.draw do
post :update_permission_setting post :update_permission_setting
post :update_learn_setting post :update_learn_setting
get :jupyter_data_sets get :jupyter_data_sets
get :jupyter_exec
end end
resources :challenges do resources :challenges do

Loading…
Cancel
Save