139 lines
5.5 KiB
Java
139 lines
5.5 KiB
Java
|
|
package com.educoder.bridge.controller;
|
|||
|
|
|
|||
|
|
import com.alibaba.fastjson.JSONObject;
|
|||
|
|
import com.educoder.bridge.exception.GameException;
|
|||
|
|
import com.educoder.bridge.service.GameService;
|
|||
|
|
import com.educoder.bridge.settings.AppConfig;
|
|||
|
|
import com.educoder.bridge.utils.Base64Util;
|
|||
|
|
import io.swagger.annotations.Api;
|
|||
|
|
import io.swagger.annotations.ApiOperation;
|
|||
|
|
import io.swagger.annotations.ApiParam;
|
|||
|
|
import org.apache.commons.io.FileUtils;
|
|||
|
|
import org.slf4j.Logger;
|
|||
|
|
import org.slf4j.LoggerFactory;
|
|||
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|||
|
|
import org.springframework.http.MediaType;
|
|||
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|||
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|||
|
|
import org.springframework.web.bind.annotation.RestController;
|
|||
|
|
|
|||
|
|
import java.io.File;
|
|||
|
|
import java.io.IOException;
|
|||
|
|
import java.nio.charset.Charset;
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* created by weishao at 2017/8/7
|
|||
|
|
* 数据迁移控制器,用于保证已经发布的实训不受影响
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
@Api(value = "数据迁移控制器", hidden = true)
|
|||
|
|
@RestController
|
|||
|
|
@RequestMapping("/dataTransfer")
|
|||
|
|
public class DataTransferController extends BaseController{
|
|||
|
|
@Autowired
|
|||
|
|
private GameService gameService;
|
|||
|
|
|
|||
|
|
@Autowired
|
|||
|
|
private AppConfig appConfig;
|
|||
|
|
|
|||
|
|
private static final Logger logger = LoggerFactory.getLogger(DataTransferController.class);
|
|||
|
|
|
|||
|
|
@RequestMapping(path = "/transfer")
|
|||
|
|
@ApiOperation(value = "数据迁移,写测试用例,生成模板脚本,tpi评测脚本", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
|
|||
|
|
public JSONObject transfer(
|
|||
|
|
@ApiParam(name = "gameInfo", required = true, value = "实训的相关配置,base64编码") @RequestParam String gameInfo,
|
|||
|
|
@ApiParam(name = "tpiList", required = true, value = "实训实例的信息,包括tpiID与instanceGitURL") @RequestParam String tpiList) {
|
|||
|
|
logger.debug("/dataTransfer/transfer: gameInfo: " + gameInfo + ", tpiList: " + tpiList);
|
|||
|
|
|
|||
|
|
JSONObject result = new JSONObject();
|
|||
|
|
// // 将字符串解码后转换为JSON对象
|
|||
|
|
// gameInfo = Base64Util.decode(gameInfo);
|
|||
|
|
// JSONObject info = JSONObject.parseObject(gameInfo);
|
|||
|
|
//
|
|||
|
|
// tpiList = Base64Util.decode(tpiList);
|
|||
|
|
// JSONArray list = JSONObject.parseArray(tpiList);
|
|||
|
|
//
|
|||
|
|
// try {
|
|||
|
|
// transferTPM(info);
|
|||
|
|
//
|
|||
|
|
// for (int i = 0; i < list.size(); i++) {
|
|||
|
|
// try {
|
|||
|
|
// transferTPI(info.getString("tpmID"), list.getJSONObject(i).getString("tpiID"),
|
|||
|
|
// list.getJSONObject(i).getString("instanceGitURL"));
|
|||
|
|
// } catch (GameException e) {
|
|||
|
|
// logger.error("TPI 转换失败,tpiID:{}", list.getJSONObject(i).getString("tpiID"));
|
|||
|
|
// continue;
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// }catch (GameException e) {
|
|||
|
|
//
|
|||
|
|
// logger.error("TPM 转换失败,tpmID:{}", info.getString("tpmID"));
|
|||
|
|
// result.put("code", -1);
|
|||
|
|
// result.put("msg", "转换失败");
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
result.put("code", 0);
|
|||
|
|
result.put("msg", "转换成功");
|
|||
|
|
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@RequestMapping(path = "/transferTPI")
|
|||
|
|
@ApiOperation(value = "数据迁移,单个tpi迁移", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
|
|||
|
|
public JSONObject transferATPI(
|
|||
|
|
@ApiParam(name = "tpmID", required = true, value = "tpmID") @RequestParam String tpmID,
|
|||
|
|
@ApiParam(name = "tpiID", required = true, value = "tpiID") @RequestParam String tpiID,
|
|||
|
|
@ApiParam(name = "instanceGitURL", required = true, value = "TPI版本库地址,base64编码") @RequestParam String instanceGitURL)
|
|||
|
|
throws GameException {
|
|||
|
|
JSONObject result = new JSONObject();
|
|||
|
|
|
|||
|
|
instanceGitURL = Base64Util.decode(instanceGitURL);
|
|||
|
|
transferTPI (tpmID, tpiID, instanceGitURL);
|
|||
|
|
|
|||
|
|
result.put("code", 0);
|
|||
|
|
result.put("msg", "转换成功");
|
|||
|
|
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 转换tpm
|
|||
|
|
* @param gameInfo
|
|||
|
|
*/
|
|||
|
|
private void transferTPM (JSONObject gameInfo) throws GameException {
|
|||
|
|
logger.debug("DataTransferController: transferTPM: gameInfo: " + gameInfo);
|
|||
|
|
// 将测试用例写入工作目录下的文件中
|
|||
|
|
// gameService.generateTestCasesForGame(gameInfo.getString("tpmID"),
|
|||
|
|
// gameInfo.getJSONArray("testCases"));
|
|||
|
|
//
|
|||
|
|
// // 生成Tpm评测脚本到工作目录下指定文件
|
|||
|
|
// gameService.generateTpmEvaluateShellScript(gameInfo);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 转换tpi
|
|||
|
|
* @param tpmID
|
|||
|
|
* @param tpiID
|
|||
|
|
* @param instanceGitURL
|
|||
|
|
*/
|
|||
|
|
private void transferTPI (String tpmID, String tpiID, String instanceGitURL) throws GameException {
|
|||
|
|
logger.debug("DataTransferController: transferTPI: tpmID: " + tpmID + ", tpiID: " + tpiID + ", instanceGitURL: " + instanceGitURL);
|
|||
|
|
|
|||
|
|
// String repoName = StringUtil.getRepoName(instanceGitURL);
|
|||
|
|
// String path = appConfig.getWorkspace() + File.separator + "myshixun_" + tpiID;
|
|||
|
|
// // 删除旧数据
|
|||
|
|
// if (!StringUtils.isEmpty(tpiID)) {
|
|||
|
|
// ShellUtil.execute("rm -rf " + path);
|
|||
|
|
// }
|
|||
|
|
// // 克隆版本库
|
|||
|
|
// gameService.gitClone(path, instanceGitURL, "origin", repoName);
|
|||
|
|
//
|
|||
|
|
// //根据实训模板评测脚本生成Tpi脚本到工作目录
|
|||
|
|
// gameService.generateTpiEvaluateShellScript(appConfig.getWorkspace() + "/shell/" + tpmID + "/evaluate.sh",
|
|||
|
|
// appConfig.getWorkspace() + "/myshixun_" + tpiID + "/" + repoName + "/");
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|