You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
5.5 KiB
139 lines
5.5 KiB
package net.educoder.schedule;
|
|
|
|
import cn.hutool.core.util.RandomUtil;
|
|
import cn.hutool.http.HttpUtil;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import net.educoder.config.PropertiesConfig;
|
|
import net.educoder.model.AutoEvaParamConfig;
|
|
import net.educoder.service.AutoEvaParamConfigService;
|
|
import net.educoder.util.SignatureUtil;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.scheduling.annotation.Async;
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.util.StringUtils;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.UUID;
|
|
|
|
/**
|
|
* @Author: youys
|
|
* @Date: 2022/4/2
|
|
* @Description: 评测检查告警任务.
|
|
*/
|
|
@Slf4j
|
|
@Component
|
|
public class EvaCheckWarningTask {
|
|
|
|
|
|
@Autowired
|
|
private PropertiesConfig propertiesConfig;
|
|
|
|
|
|
@Autowired
|
|
private AutoEvaParamConfigService autoEvaParamConfigService;
|
|
|
|
@Value("${bridge.sign.accessKeySecret}")
|
|
private String accessKeySecret;
|
|
|
|
|
|
@Async
|
|
@Scheduled(cron = "${task.cron.evalCheck}")
|
|
public void check() {
|
|
log.info("自动化评测接口告警检查---------start ");
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
List<AutoEvaParamConfig> autoEvaParamConfigList = autoEvaParamConfigService.findAll();
|
|
log.info("自动化评测接口告警检查,总共有[{}]条需要评测", autoEvaParamConfigList.size());
|
|
for (AutoEvaParamConfig autoEvaParamConfig : autoEvaParamConfigList) {
|
|
try {
|
|
if (autoEvaParamConfig.getType().equals(AutoEvaParamConfig.SX_EVA)) {
|
|
String extras = autoEvaParamConfig.getExtras();
|
|
if (!StringUtils.hasLength(extras)) {
|
|
continue;
|
|
}
|
|
|
|
postEvaluation(autoEvaParamConfig);
|
|
} else if (autoEvaParamConfig.getType().equals(AutoEvaParamConfig.OJ_EVA)) {
|
|
|
|
if (!StringUtils.hasLength(autoEvaParamConfig.getCodeFileContent())) {
|
|
continue;
|
|
}
|
|
postOjEvaluation(autoEvaParamConfig);
|
|
}
|
|
} catch (Exception e) {
|
|
log.error("自动化评测接口告警检查任务异常", e);
|
|
}
|
|
}
|
|
log.info("自动化评测接口告警检查 ---------end ,总耗时:{}ms", (System.currentTimeMillis() - startTime));
|
|
}
|
|
|
|
|
|
/**
|
|
* 处理实训评测.
|
|
*
|
|
* @param autoEvaParamConfig 配置
|
|
*/
|
|
private void postEvaluation(AutoEvaParamConfig autoEvaParamConfig) {
|
|
JSONObject extrasObject = JSONObject.parseObject(autoEvaParamConfig.getExtras());
|
|
|
|
Map<String, Object> param = new HashMap<>(32);
|
|
param.put("isPublished", extrasObject.getInteger("isPublished"));
|
|
param.put("trimBlank", extrasObject.getInteger("trimBlank"));
|
|
param.put("containers", extrasObject.getString("containers"));
|
|
param.put("instanceChallenge", extrasObject.getString("instanceChallenge"));
|
|
param.put("tpmScript", extrasObject.getString("tpmScript"));
|
|
param.put("timeLimit", extrasObject.getInteger("timeLimit"));
|
|
param.put("times", extrasObject.getInteger("times"));
|
|
param.put("resubmit", extrasObject.getInteger("resubmit"));
|
|
param.put("podType", extrasObject.getInteger("podType"));
|
|
param.put("content_modified", extrasObject.getInteger("content_modified"));
|
|
param.put("tpiID", autoEvaParamConfig.getTpiId());
|
|
param.put("testCases", autoEvaParamConfig.getTestCases());
|
|
param.put("tpiGitURL", autoEvaParamConfig.getTpiGitUrl());
|
|
param.put("buildID", autoEvaParamConfig.getBuildId());
|
|
param.put("sec_key", UUID.randomUUID().toString());
|
|
param.put("callBackUrl", propertiesConfig.getCallbackUrl());
|
|
param.put("ak", RandomUtil.randomString(16));
|
|
param.put("nonce", RandomUtil.randomString(16));
|
|
|
|
String sign = SignatureUtil.genSignature(accessKeySecret, param);
|
|
log.info("postEvaluation---------签名值sign:{}", sign);
|
|
|
|
param.put("sign", sign);
|
|
|
|
String result = HttpUtil.post(propertiesConfig.getGameEvaluationUrl(), param);
|
|
JSONObject jsonResult = JSONObject.parseObject(result);
|
|
log.info("实训评测接口返回:{},tpiId:{}", jsonResult, autoEvaParamConfig.getTpiId());
|
|
}
|
|
|
|
/**
|
|
* 处理oj评测.
|
|
*
|
|
* @param autoEvaParamConfig 配置
|
|
*/
|
|
private void postOjEvaluation(AutoEvaParamConfig autoEvaParamConfig) {
|
|
Map<String, Object> param = new HashMap<>(16);
|
|
param.put("tpiID", autoEvaParamConfig.getTpiId());
|
|
param.put("testCases", autoEvaParamConfig.getTestCases());
|
|
param.put("codeFileContent", autoEvaParamConfig.getCodeFileContent());
|
|
param.put("sec_key", UUID.randomUUID().toString());
|
|
param.put("callBackUrl", propertiesConfig.getCallbackUrl());
|
|
param.put("ak", RandomUtil.randomString(16));
|
|
param.put("nonce", RandomUtil.randomString(16));
|
|
|
|
String sign = SignatureUtil.genSignature(accessKeySecret, param);
|
|
log.info("postEvaluation---------签名值:{}", sign);
|
|
param.put("sign", sign);
|
|
|
|
|
|
String result = HttpUtil.post(propertiesConfig.getOjEvaluationUrl(), param);
|
|
JSONObject jsonResult = JSONObject.parseObject(result);
|
|
log.info("Oj评测接口返回:{},tpiId:{}", jsonResult, autoEvaParamConfig.getTpiId());
|
|
}
|
|
}
|