| @@ -421,24 +421,6 @@ class ApplicationController < ActionController::Base | |||
| "#{edu_setting('git_address_domain')}/#{repo_path}" | |||
| end | |||
| # 通关后,把最后一次成功的代码存到数据库 | |||
| # type 0 创始内容, 1 最新内容 | |||
| # def game_passed_code(path, myshixun, game_id) | |||
| # # 如果代码窗口是隐藏的,则不用保存代码 | |||
| # return if myshixun.shixun.hide_code || myshixun.shixun.vnc | |||
| # file_content = git_fle_content myshixun.repo_path, path | |||
| # #unless file_content.present? | |||
| # # raise("获取文件代码异常") | |||
| # #end | |||
| # logger.info("#######game_id:#{game_id}, file_content:#{file_content}") | |||
| # game_code = GameCode.where(:game_id => game_id, :path => path).first | |||
| # if game_code.nil? | |||
| # GameCode.create!(:game_id => game_id, :new_code => file_content, :path => path) | |||
| # else | |||
| # game_code.update_attributes!(:new_code => file_content) | |||
| # end | |||
| # end | |||
| # Post请求 | |||
| def uri_post(uri, params) | |||
| begin | |||
| @@ -530,112 +512,6 @@ class ApplicationController < ActionController::Base | |||
| end | |||
| # 实训主类别列表,自带描述 | |||
| def shixun_main_type | |||
| list = [] | |||
| mirrors = MirrorRepository.select([:id, :type_name, :description, :name]).published_main_mirror | |||
| mirrors.try(:each) do |mirror| | |||
| list << {id: mirror.id, type_name: mirror.type_name, description: mirror.try(:description), mirror_name: mirror.name} | |||
| end | |||
| list | |||
| end | |||
| # 小类别列表 | |||
| def shixun_small_type | |||
| list = [] | |||
| mirrors = MirrorRepository.select([:id, :type_name, :description, :name]).published_small_mirror | |||
| mirrors.try(:each) do |mirror| | |||
| list << {id: mirror.id, type_name: mirror.type_name, description: mirror.description, mirror_name: mirror.name} | |||
| end | |||
| list | |||
| end | |||
| def container_limit(mirror_repositories) | |||
| container = [] | |||
| mirror_repositories.each do |mr| | |||
| if mr.name.present? | |||
| container << {:image => mr.name, :cpuLimit => mr.cpu_limit, :memoryLimit => "#{mr.memory_limit}M", :type => mr.try(:main_type) == "1" ? "main" : "sub"} | |||
| end | |||
| end | |||
| container.to_json | |||
| end | |||
| # 实训中间层pod配置 | |||
| def shixun_container_limit shixun | |||
| container = [] | |||
| shixun.shixun_service_configs.each do |config| | |||
| mirror = config.mirror_repository | |||
| if mirror.name.present? | |||
| # 资源限制没有就传默认值。 | |||
| cpu_limit = config.cpu_limit.presence || 1 | |||
| cpu_request = config.lower_cpu_limit.presence || 0.1 | |||
| memory_limit = config.memory_limit.presence || 1024 | |||
| request_limit = config.request_limit.presence || 10 | |||
| resource_limit = config.resource_limit.presence || 10000 | |||
| container << {:image => mirror.name, | |||
| :cpuLimit => cpu_limit, | |||
| :cpuRequest => cpu_request, | |||
| :memoryLimit => "#{memory_limit}M", | |||
| :memoryRequest => "#{request_limit}M", | |||
| :resourceLimit => "#{resource_limit}K", | |||
| :type => mirror.try(:main_type) == "1" ? "main" : "sub"} | |||
| end | |||
| end | |||
| container.to_json | |||
| end | |||
| # 毕设任务列表的赛选 | |||
| def course_work(task, **option) | |||
| logger.info("#############{option}") | |||
| course = task.course | |||
| work_list = task.graduation_works.includes(user: [:user_extension]) | |||
| # 教师评阅搜索 0: 未评, 1 已评 | |||
| if option[:teacher_comment] | |||
| graduation_work_ids = GraduationWorkScore.where(graduation_work_id: work_list.map(&:id)).pluck(:graduation_work_id) | |||
| if option[:teacher_comment].zero? | |||
| work_list = work_list.where.not(id: graduation_work_ids) | |||
| elsif option[:teacher_comment] == 1 | |||
| work_list = work_list.where(id: graduation_work_ids).where.not(work_status: 0) | |||
| end | |||
| end | |||
| # 作品状态 0: 未提交, 1 按时提交, 2 延迟提交 | |||
| if option[:task_status] | |||
| work_list = work_list.where(work_status: option[:task_status]) | |||
| end | |||
| # 分班情况 | |||
| if option[:course_group] | |||
| group_user_ids = course.course_members.where(course_group_id: option[:course_group]).pluck(:user_id) | |||
| # 有分组只可能是老师身份查看列表 | |||
| work_list = work_list.where(user_id: group_user_ids) | |||
| end | |||
| # 只看我的交叉评阅 | |||
| if option[:cross_comment] | |||
| graduation_work_id = task.graduation_work_comment_assignations.where(:user_id => current_user.id) | |||
| .pluck(:graduation_work_id).uniq if task.graduation_work_comment_assignations | |||
| work_list = work_list.where(id: graduation_work_id) | |||
| end | |||
| # 输入姓名和学号搜索 | |||
| # TODO user_extension 如果修改 请调整 | |||
| if option[:search] | |||
| work_list = work_list.joins(user: :user_extension).where("concat(lastname, firstname) like ? | |||
| or student_id like ?", "%#{option[:search]}%", "%#{option[:search]}%") | |||
| end | |||
| # 排序 | |||
| rorder = UserExtension.column_names.include?(option[:order]) ? option[:order] : "updated_at" | |||
| b_order = %w(desc asc).include?(option[:b_order]) ? option[:b_order] : "desc" | |||
| if rorder == "created_at" || rorder == "work_score" | |||
| work_list = work_list.order("graduation_works.#{rorder} #{b_order}") | |||
| elsif rorder == "student_id" | |||
| work_list = work_list.joins(user: :user_extension).order("user_extensions.#{rorder} #{b_order}") | |||
| end | |||
| work_list | |||
| end | |||
| def strip_html(text, len=0, endss="...") | |||
| ss = "" | |||
| if !text.nil? && text.length>0 | |||
| @@ -1176,16 +1052,19 @@ class ApplicationController < ActionController::Base | |||
| # 接口限流,请求量大有性能问题 | |||
| def request_limit | |||
| record_count = Rails.cache.read("request/#{controller_name}/#{Time.now.strftime('%Y%m%d%H')}/#{request.remote_ip}") | |||
| if record_count.present? | |||
| record_count = record_count + 1 | |||
| else | |||
| record_count = 1 | |||
| end | |||
| Rails.logger.info("请求太快,请稍后再试。#{controller_name}::#{request.remote_ip}") if record_count > 100 | |||
| tip_exception("请求太快,请稍后再试。") if record_count > 100 | |||
| white_list_ip = ["106.75.110.152"] | |||
| unless white_list_ip.include?(request.remote_ip) | |||
| record_count = Rails.cache.read("request/#{controller_name}/#{Time.now.strftime('%Y%m%d%H')}/#{request.remote_ip}") | |||
| if record_count.present? | |||
| record_count = record_count + 1 | |||
| else | |||
| record_count = 1 | |||
| end | |||
| Rails.logger.info("请求太快,请稍后再试。#{controller_name}::#{request.remote_ip}") if record_count > 200 | |||
| tip_exception("请求太快,请稍后再试。") if record_count > 200 | |||
| Rails.cache.write("request/#{controller_name}/#{Time.now.strftime('%Y%m%d%H')}/#{request.remote_ip}", record_count, expires_in: 1.hour) | |||
| Rails.cache.write("request/#{controller_name}/#{Time.now.strftime('%Y%m%d%H')}/#{request.remote_ip}", record_count, expires_in: 1.hour) | |||
| end | |||
| end | |||
| def check_batch_requests | |||