summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlijinyang <[email protected]>2024-03-18 17:04:11 +0800
committerlijinyang <[email protected]>2024-03-18 17:04:11 +0800
commitebd4babe5220ee94c3eb3c6311592761c3dcc728 (patch)
tree6c6052a12f5a15ab829970e36af70a99ae37f148
parentc970ca0538f507b8a78b2c38910740e3aca47483 (diff)
fix:GAL-518 Saved Query Scheduler job状态信息获取接口开发
-rw-r--r--src/main/java/com/mesa/reportservice/controller/MonitorController.java18
-rw-r--r--src/main/java/com/mesa/reportservice/exception/SQSCode.java1
-rw-r--r--src/main/java/com/mesa/reportservice/exception/SQSExceptionHandler.java46
-rw-r--r--src/main/java/com/mesa/reportservice/mapper/JobMapper.java3
-rw-r--r--src/main/java/com/mesa/reportservice/service/JobService.java2
-rw-r--r--src/main/java/com/mesa/reportservice/service/MonitorService.java4
-rw-r--r--src/main/java/com/mesa/reportservice/service/impl/ExecuteProcessServiceImpl.java14
-rw-r--r--src/main/java/com/mesa/reportservice/service/impl/ExecuteServiceImpl.java22
-rw-r--r--src/main/java/com/mesa/reportservice/service/impl/JobServiceImpl.java17
-rw-r--r--src/main/java/com/mesa/reportservice/service/impl/MonitorServiceImpl.java11
-rw-r--r--src/main/java/com/mesa/reportservice/service/impl/ScheduledResultServiceImpl.java9
-rw-r--r--src/main/java/com/mesa/reportservice/util/R.java93
-rw-r--r--src/main/resources/mappers/JobMapper.xml13
-rw-r--r--src/test/java/com/mesa/reportservice/service/impl/JobServiceImplTest.java21
-rw-r--r--src/test/resources/parameters/jobTest.json (renamed from src/test/resources/parameters/mysqlTest.json)4
15 files changed, 233 insertions, 45 deletions
diff --git a/src/main/java/com/mesa/reportservice/controller/MonitorController.java b/src/main/java/com/mesa/reportservice/controller/MonitorController.java
index 8d5f8c7..ebd114c 100644
--- a/src/main/java/com/mesa/reportservice/controller/MonitorController.java
+++ b/src/main/java/com/mesa/reportservice/controller/MonitorController.java
@@ -1,11 +1,16 @@
package com.mesa.reportservice.controller;
+import com.mesa.reportservice.bean.MonitorEntity;
+import com.mesa.reportservice.service.JobService;
import com.mesa.reportservice.service.MonitorService;
+import com.mesa.reportservice.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
+import java.util.Map;
/**
*
@@ -18,9 +23,18 @@ public class MonitorController {
@Autowired
private MonitorService monitorService;
+ @Autowired
+ private JobService jobService;
@GetMapping(value = "/monitor")
- public String getJobCount() {
- return monitorService.getJobCount();
+ public R getJobCount() {
+ MonitorEntity jobCount = monitorService.getJobCount();
+ return R.ok(jobCount);
+ }
+
+ @GetMapping(value = "/monitor/job/{jobId}")
+ public R getJobState(@PathVariable String jobId) {
+ Map<String, Object> jobState = jobService.getJobDetail(jobId);
+ return R.ok(jobState);
}
}
diff --git a/src/main/java/com/mesa/reportservice/exception/SQSCode.java b/src/main/java/com/mesa/reportservice/exception/SQSCode.java
index d20f28b..96cab45 100644
--- a/src/main/java/com/mesa/reportservice/exception/SQSCode.java
+++ b/src/main/java/com/mesa/reportservice/exception/SQSCode.java
@@ -31,6 +31,7 @@ public enum SQSCode {
TASK_CANNOT_EXECUTED(500010,"task cannot be executed"),
UNKNOWN_ERROR(500999,"Unknown Error"),
+ JOB_IS_NOT_EXIST(510000, "job is not exist"),
//成功
SUCCESS(200, "success"),
//失败
diff --git a/src/main/java/com/mesa/reportservice/exception/SQSExceptionHandler.java b/src/main/java/com/mesa/reportservice/exception/SQSExceptionHandler.java
new file mode 100644
index 0000000..de3904c
--- /dev/null
+++ b/src/main/java/com/mesa/reportservice/exception/SQSExceptionHandler.java
@@ -0,0 +1,46 @@
+/**
+
+ *
+
+ *
+
+ */
+
+package com.mesa.reportservice.exception;
+
+import cn.hutool.log.Log;
+import com.mesa.reportservice.util.R;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+/**
+ * 异常处理器
+ *
+ * @author 86158
+
+ */
+@RestControllerAdvice
+public class SQSExceptionHandler {
+ private Log logger = Log.get();
+
+ /**
+ * 处理自定义异常
+ */
+ @ExceptionHandler(SQSException.class)
+ @ResponseStatus(value= HttpStatus.BAD_REQUEST)
+ public R handleSQSException(SQSException e){
+ R r = new R();
+ r.put("code", e.getCode());
+ r.put("message", e.getMsg());
+ return r;
+ }
+
+ @ExceptionHandler(Exception.class)
+ @ResponseStatus(value=HttpStatus.INTERNAL_SERVER_ERROR)
+ public R handleException(Exception e){
+ logger.error(e);
+ return R.error().put("message", e.getMessage());
+ }
+}
diff --git a/src/main/java/com/mesa/reportservice/mapper/JobMapper.java b/src/main/java/com/mesa/reportservice/mapper/JobMapper.java
index 4546b12..82f925d 100644
--- a/src/main/java/com/mesa/reportservice/mapper/JobMapper.java
+++ b/src/main/java/com/mesa/reportservice/mapper/JobMapper.java
@@ -24,6 +24,7 @@ public interface JobMapper extends BaseMapper<JobEntity> {
int updateStatue(JobEntity job);
- Map<String,Long> getJobCount(Map<String, Object> map);
+ Map<String,Long> getJobCount(long lastUpdateTime);
+ Map<String,Object> getJobDetail(String jobId);
} \ No newline at end of file
diff --git a/src/main/java/com/mesa/reportservice/service/JobService.java b/src/main/java/com/mesa/reportservice/service/JobService.java
index 706c75a..2b51d0a 100644
--- a/src/main/java/com/mesa/reportservice/service/JobService.java
+++ b/src/main/java/com/mesa/reportservice/service/JobService.java
@@ -22,4 +22,6 @@ public interface JobService extends IService<JobEntity> {
int updateProcesses(JobEntity job);
Map<String,Long> getJobCount();
+
+ Map<String,Object> getJobDetail(String jobId);
}
diff --git a/src/main/java/com/mesa/reportservice/service/MonitorService.java b/src/main/java/com/mesa/reportservice/service/MonitorService.java
index 5bccaea..fe0d38a 100644
--- a/src/main/java/com/mesa/reportservice/service/MonitorService.java
+++ b/src/main/java/com/mesa/reportservice/service/MonitorService.java
@@ -1,5 +1,7 @@
package com.mesa.reportservice.service;
+import com.mesa.reportservice.bean.MonitorEntity;
+
/**
*
* @author lijinyang
@@ -11,5 +13,5 @@ public interface MonitorService {
void addFail();
- String getJobCount();
+ MonitorEntity getJobCount();
} \ No newline at end of file
diff --git a/src/main/java/com/mesa/reportservice/service/impl/ExecuteProcessServiceImpl.java b/src/main/java/com/mesa/reportservice/service/impl/ExecuteProcessServiceImpl.java
index 4e514d1..a2d4cf5 100644
--- a/src/main/java/com/mesa/reportservice/service/impl/ExecuteProcessServiceImpl.java
+++ b/src/main/java/com/mesa/reportservice/service/impl/ExecuteProcessServiceImpl.java
@@ -1,5 +1,6 @@
package com.mesa.reportservice.service.impl;
+import cn.hutool.core.util.StrUtil;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import com.alibaba.fastjson.JSON;
@@ -50,6 +51,7 @@ public class ExecuteProcessServiceImpl implements ExecuteProcessService {
jobEntity.setEndTime(System.currentTimeMillis()/1000);
jobEntity.setDoneProgress(1.00f);
jobEntity.setIsFailed(1);
+ String resultMessage = jobEntity.getResultMessage();
try {
if (jobEntity.getIsValid() == 0) {
jobEntity.setResultMessage(Constant.CANCEL);
@@ -61,21 +63,21 @@ public class ExecuteProcessServiceImpl implements ExecuteProcessService {
jobEntity.setIsFailed(0);
logger.info(MessageFormat.format(Constant.LOG_SUCCESS_SAVE_TO_HBASE,jobEntity.getQueryId(),jobEntity.getJobId(),jobEntity.getQuerySql()));
} else {
- jobEntity.setResultMessage(Constant.WRITE_DATA_ERROR);
+ jobEntity.setResultMessage(StrUtil.concat(false,Constant.WRITE_DATA_ERROR,StrUtil.COLON,resultMessage));
monitorService.addFail();
msg = MessageFormat.format(SQSCode.TEMPLATE_SAVE_HBASE_ERROR.getMsg(),jobEntity.getExecuteStatus(),jobEntity.getQueryId(),jobEntity.getJobId(),jobEntity.getQuerySql());
logger.error(msg);
}
} else if (jobEntity.getExecuteStatus() >= Constant.JOB_BAD_REQUEST_THRESHOLD && jobEntity.getExecuteStatus() < Constant.JOB_INTERNAL_SERVER_ERROR_THRESHOLD) {
- jobEntity.setResultMessage(Constant.PARAM_SYNTAX_ERROR);
+ jobEntity.setResultMessage(StrUtil.concat(false,Constant.PARAM_SYNTAX_ERROR,StrUtil.COLON,resultMessage));
msg = MessageFormat.format(SQSCode.PARAM_SYNTAX_ERROR.getMsg(),jobEntity.getExecuteStatus(),jobEntity.getQueryId(),jobEntity.getJobId(),jobEntity.getQuerySql());
logger.error(msg);
} else if (jobEntity.getExecuteStatus() == Constant.JOB_SQL_EXECUTION_ERROR_CODE) {
- jobEntity.setResultMessage(Constant.SQL_EXECUTION_ERROR);
+ jobEntity.setResultMessage(StrUtil.concat(false,Constant.SQL_EXECUTION_ERROR,StrUtil.COLON,resultMessage));
msg = MessageFormat.format(SQSCode.TEMPLATE_SQL_EXECUTION_ERROR.getMsg(),jobEntity.getExecuteStatus(),jobEntity.getQueryId(),jobEntity.getJobId(),jobEntity.getQuerySql());
logger.error(msg);
} else {
- jobEntity.setResultMessage(Constant.UNKNOWN_ERROR);
+ jobEntity.setResultMessage(StrUtil.concat(false,Constant.UNKNOWN_ERROR,StrUtil.COLON,resultMessage));
msg = MessageFormat.format(SQSCode.UNKNOWN_ERROR.getMsg(),jobEntity.getQueryId(),jobEntity.getJobId(),jobEntity.getQuerySql());
logger.error(msg);
}
@@ -88,9 +90,9 @@ public class ExecuteProcessServiceImpl implements ExecuteProcessService {
}
while (number != 1 && z >= 0);
} catch (Exception e) {
- jobEntity.setResultMessage(Constant.DATABASE_ERROR);
+ jobEntity.setResultMessage(StrUtil.concat(false,Constant.DATABASE_ERROR,StrUtil.COLON,e.getMessage()));
jobService.updateProcesses(jobEntity);
- msg = MessageFormat.format(SQSCode.TEMPLATE_SAVE_DATABASE_ERROR.getMsg(),jobEntity.getQueryId(),jobEntity.getJobId(),e.toString());
+ msg = MessageFormat.format(SQSCode.TEMPLATE_SAVE_DATABASE_ERROR.getMsg(),jobEntity.getQueryId(),jobEntity.getJobId(),e.getMessage());
logger.error(msg);
} finally {
saveToMonitor(jobEntity);
diff --git a/src/main/java/com/mesa/reportservice/service/impl/ExecuteServiceImpl.java b/src/main/java/com/mesa/reportservice/service/impl/ExecuteServiceImpl.java
index 594d42b..1cde737 100644
--- a/src/main/java/com/mesa/reportservice/service/impl/ExecuteServiceImpl.java
+++ b/src/main/java/com/mesa/reportservice/service/impl/ExecuteServiceImpl.java
@@ -48,6 +48,8 @@ public class ExecuteServiceImpl implements ExecuteService {
if (httpResult != null) {
Map mapresult = JSON.parseObject(httpResult.getBody());
int queryStatus = Integer.parseInt(mapresult.get("status").toString());
+ job.setExecuteStatus(Integer.parseInt(mapresult.get("code").toString()));
+ job.setResultMessage(mapresult.get("message").toString());
logger.info("httpCode=" + httpResult.getCode() +" status="+queryStatus);
if (httpResult.getCode() == HttpStatus.OK.value() && queryStatus == HttpStatus.OK.value()) {
k = 0;
@@ -59,11 +61,9 @@ public class ExecuteServiceImpl implements ExecuteService {
job.setResultBytes(Long.parseLong(rows.get("result_bytes").toString()));
job.setResult(httpResult.getBody());
job.setElapsed((int) Float.parseFloat(rows.get("elapsed").toString()));
- job.setExecuteStatus(Integer.parseInt(mapresult.get("code").toString()));
logger.info("success resultId = " + job.getJobId() + " queryId=" + job.getQueryId() + " sql=" + job.getQuerySql());
} else {
k = 0;
- job.setExecuteStatus(Integer.parseInt(mapresult.get("code").toString()));
logger.error("SQL Execution Error ");
}
} else {
@@ -71,34 +71,34 @@ public class ExecuteServiceImpl implements ExecuteService {
}
} catch (SocketTimeoutException e) {
k--;
- job.setResultMessage(e.toString());
+ job.setResultMessage(e.getMessage());
if (k == 0) {
job.setExecuteStatus(Constant.JOB_EXECUTION_TIMEOUT);
job.setResultMessage(Constant.QUERY_TIME_OUT);
logger.info("timeout resultId = " + job.getJobId() + " queryId=" + job.getQueryId() + " sql=" + job.getQuerySql());
} else {
- logger.info("Socket warn " + e.toString() + "retry time " + (3 - k));
+ logger.info("Socket warn " + e.getMessage() + "retry time " + (3 - k));
}
} catch (ConnectTimeoutException e) {
job.setExecuteStatus(Constant.JOB_ERROR);
- job.setResultMessage(e.toString());
- logger.error(SQSCode.UNKNOWN_ERROR.getMsg() + e.toString());
+ job.setResultMessage(e.getMessage());
+ logger.error(SQSCode.UNKNOWN_ERROR.getMsg() + e.getMessage());
k = 0;
} catch (OutOfMemoryError e) {
job.setExecuteStatus(Constant.JOB_ERROR);
- job.setResultMessage(Constant.RESULT_TOO_LARGE);
- logger.error(SQSCode.OUT_OF_MEMORY_ERROR.getMsg() + e.toString());
+ job.setResultMessage(e.getMessage());
+ logger.error(SQSCode.OUT_OF_MEMORY_ERROR.getMsg() + e.getMessage());
k = 0;
} catch (Exception e) {
job.setExecuteStatus(Constant.JOB_ERROR);
- job.setResultMessage(e.toString());
- logger.error(SQSCode.UNKNOWN_ERROR.getMsg() + e.toString());
+ job.setResultMessage(e.getMessage());
+ logger.error(SQSCode.UNKNOWN_ERROR.getMsg() + e.getMessage());
k = 0;
}
try {
queryGatewayService.deleteJob(job.getQueryId());
} catch (Exception e) {
- logger.error(SQSCode.KILL_QUERY_ERROR.getMsg() + e.toString());
+ logger.error(SQSCode.KILL_QUERY_ERROR.getMsg() + e.getMessage());
throw new SQSException(SQSCode.KILL_QUERY_ERROR);
}
}
diff --git a/src/main/java/com/mesa/reportservice/service/impl/JobServiceImpl.java b/src/main/java/com/mesa/reportservice/service/impl/JobServiceImpl.java
index 100b93f..2f0d2fb 100644
--- a/src/main/java/com/mesa/reportservice/service/impl/JobServiceImpl.java
+++ b/src/main/java/com/mesa/reportservice/service/impl/JobServiceImpl.java
@@ -1,7 +1,10 @@
package com.mesa.reportservice.service.impl;
+import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mesa.reportservice.bean.JobEntity;
+import com.mesa.reportservice.exception.SQSCode;
+import com.mesa.reportservice.exception.SQSException;
import com.mesa.reportservice.mapper.JobMapper;
import com.mesa.reportservice.service.JobService;
import org.springframework.stereotype.Service;
@@ -42,10 +45,16 @@ public class JobServiceImpl extends ServiceImpl<JobMapper, JobEntity> implements
@Override
public Map<String,Long> getJobCount(){
LocalDate currentDate = LocalDate.now();
- long lastUpdateTime = currentDate.atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli();
- Map map = new HashMap<String,Object>();
- map.put("lastUpdateTime", lastUpdateTime);
- return this.baseMapper.getJobCount(map);
+ long lastUpdateTime = currentDate.atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli()/1000;
+ return this.baseMapper.getJobCount(lastUpdateTime);
}
+ @Override
+ public Map<String,Object> getJobDetail(String jobId){
+ Map<String,Object> jobState = this.baseMapper.getJobDetail(jobId);
+ if (ObjectUtil.isEmpty(jobState)) {
+ throw new SQSException(SQSCode.JOB_IS_NOT_EXIST);
+ }
+ return jobState;
+ }
} \ No newline at end of file
diff --git a/src/main/java/com/mesa/reportservice/service/impl/MonitorServiceImpl.java b/src/main/java/com/mesa/reportservice/service/impl/MonitorServiceImpl.java
index 0e57d84..d7bdff0 100644
--- a/src/main/java/com/mesa/reportservice/service/impl/MonitorServiceImpl.java
+++ b/src/main/java/com/mesa/reportservice/service/impl/MonitorServiceImpl.java
@@ -22,7 +22,7 @@ import java.util.Map;
public class MonitorServiceImpl implements MonitorService {
@Autowired
- private JobService mysqlService;
+ private JobService jobService;
@Autowired
private ZookeeperService zookeeperService;
@@ -54,10 +54,9 @@ public class MonitorServiceImpl implements MonitorService {
}
@Override
- public String getJobCount() {
- String json="";
+ public MonitorEntity getJobCount() {
MonitorEntity monitorEntity = new MonitorEntity();
- Map<String,Long> numMap = mysqlService.getJobCount();
+ Map<String,Long> numMap = jobService.getJobCount();
monitorEntity.setQueueJobNum(numMap.get("queueNum"));
monitorEntity.setExecutingJobNum(numMap.get("executingNum"));
monitorEntity.setTodaySuccessJobNum(numMap.get("todaySuccessNum"));
@@ -68,8 +67,6 @@ public class MonitorServiceImpl implements MonitorService {
}else{
monitorEntity.setStatus("standby");
}
- Object obj = JSONArray.toJSON(monitorEntity);
- json = obj.toString();
- return json;
+ return monitorEntity;
}
}
diff --git a/src/main/java/com/mesa/reportservice/service/impl/ScheduledResultServiceImpl.java b/src/main/java/com/mesa/reportservice/service/impl/ScheduledResultServiceImpl.java
index c43981b..b5b6759 100644
--- a/src/main/java/com/mesa/reportservice/service/impl/ScheduledResultServiceImpl.java
+++ b/src/main/java/com/mesa/reportservice/service/impl/ScheduledResultServiceImpl.java
@@ -1,5 +1,6 @@
package com.mesa.reportservice.service.impl;
+import cn.hutool.core.util.StrUtil;
import cn.hutool.log.Log;
import cn.hutool.log.LogFactory;
import com.mesa.reportservice.bean.JobEntity;
@@ -71,8 +72,8 @@ public class ScheduledResultServiceImpl implements ScheduledResultService {
}
}
} catch (Exception e) {
- logger.error(e.toString());
- throw new SQSException(e.toString());
+ logger.error(e.getMessage());
+ throw new SQSException(e.getMessage());
}
}
@@ -104,7 +105,7 @@ public class ScheduledResultServiceImpl implements ScheduledResultService {
//遍历内存中的任务对状态RUNNING的更新进度,其他更新数据库的状态
for (Map.Entry<String, JobEntity> entry : schedulerProperties.getMapResult().entrySet()) {
logger.info("key = " + entry.getKey() + ", value = " + entry.getValue().getState());
- long currentTime = System.currentTimeMillis();
+ long currentTime = System.currentTimeMillis()/1000;
long executeTime = currentTime - entry.getValue().getStartTime();
logger.info("execute time=" + executeTime + "ttlTime=" + httpClientPool.getSocketTimeout());
if (JobStates.RUNNING.getValue().equals(entry.getValue().getState()) && executeTime > httpClientPool.getSocketTimeout()) {
@@ -148,7 +149,7 @@ public class ScheduledResultServiceImpl implements ScheduledResultService {
job.setEndTime(System.currentTimeMillis()/1000);
job.setDoneProgress(1.00f);
job.setIsFailed(1);
- job.setResultMessage(Constant.UNKNOWN_ERROR);
+ job.setResultMessage(StrUtil.concat(false,Constant.UNKNOWN_ERROR,": queryId is null"));
}
if ((JobStates.RUNNING.getValue()).equals(job.getState())) {
if (jobService.updateProcesses(job) != 0) {
diff --git a/src/main/java/com/mesa/reportservice/util/R.java b/src/main/java/com/mesa/reportservice/util/R.java
new file mode 100644
index 0000000..df411e9
--- /dev/null
+++ b/src/main/java/com/mesa/reportservice/util/R.java
@@ -0,0 +1,93 @@
+package com.mesa.reportservice.util;
+
+import com.mesa.reportservice.exception.SQSCode;
+import com.mesa.reportservice.exception.SQSException;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+
+/**
+ * 返回数据
+ *
+ * 错误码、错误内容统一在枚举类SQSCode中定义, 错误码格式见SQSCode注释,错误码内容必须用英文,作为国际化的code
+ * 自定义的错误类型必须加注释
+ */
+public class R extends HashMap<String, Object> {
+ private static final long serialVersionUID = 1L;
+
+ public R() {
+ put("code", SQSCode.SUCCESS.getCode());
+ put("message", SQSCode.SUCCESS.getMsg());
+ put("time", new Date());
+ }
+
+ public static R error() {
+ return error(SQSCode.ERROR.getCode(), SQSCode.ERROR.getMsg());
+ }
+
+ public static R error(SQSCode SQSCode) {
+ R r = new R();
+ r.put("code", SQSCode.getCode());
+ r.put("message", SQSCode.getMsg());
+ r.put("time", new Date());
+ return r;
+ }
+
+ public static R error(Integer code, String msg) {
+ R r = new R();
+ r.put("code", code);
+ r.put("message", msg);
+ r.put("time", new Date());
+ return r;
+ }
+
+ public static R ok(String msg) {
+ R r = new R();
+ r.put("message", msg);
+ r.put("time", new Date());
+ return r;
+ }
+
+ public static R ok() {
+ return new R();
+ }
+
+ public static R ok(Object data) {
+ R r = new R();
+ r.put("data", data);
+ r.put("time", new Date());
+ return r;
+ }
+
+ @Override
+ public R put(String key, Object value) {
+ super.put(key, value);
+ return this;
+ }
+
+ @SuppressWarnings("unchecked")
+ public R putData(String key,Object value) {
+ Object data = super.getOrDefault("data", new LinkedHashMap<String, Object>());
+ if( !(data instanceof Map)) {
+ throw new SQSException("data put error");
+ }
+ ((Map<String, Object>)data).put(key, value);
+ super.put("data", data);
+ return this;
+ }
+
+ @SuppressWarnings("unchecked")
+ public R putDataAll(Map<String,Object> dataAll) {
+ Object data = super.getOrDefault("data", new LinkedHashMap<String, Object>());
+ if( !(data instanceof Map)) {
+ throw new SQSException("data putAll error");
+ }
+ ((Map<String, Object>)data).putAll(dataAll);;
+ super.put("data", data);
+ return this;
+ }
+}
+
diff --git a/src/main/resources/mappers/JobMapper.xml b/src/main/resources/mappers/JobMapper.xml
index 9017d60..f4be7e3 100644
--- a/src/main/resources/mappers/JobMapper.xml
+++ b/src/main/resources/mappers/JobMapper.xml
@@ -81,10 +81,6 @@
where job_id = #{jobId,jdbcType=VARCHAR}
</update>
-
-
-
-
<update id="updateStatue" parameterType="com.mesa.reportservice.bean.JobEntity" >
update saved_query_job
<set >
@@ -107,11 +103,16 @@
where job_id = #{jobId,jdbcType=VARCHAR}
</update>
-
- <select id="getJobCount" resultType="map" parameterType="hashmap">
+ <select id="getJobCount" resultType="map" parameterType="long">
SELECT (SELECT COUNT(1) FROM saved_query_job where state = 'PENDING' and is_valid = 1) as queueNum,
(SELECT COUNT(1) FROM saved_query_job where state = 'RUNNING' and is_valid = 1) as executingNum,
(SELECT COUNT(1) FROM saved_query_job where state = 'DONE' and is_failed = 0 and last_update_time > #{lastUpdateTime}) as todaySuccessNum,
(SELECT COUNT(1) FROM saved_query_job where is_failed = 1 and last_update_time > #{lastUpdateTime} ) as todayErrorNum
</select>
+
+ <select id="getJobDetail" resultType="map" parameterType="String">
+ SELECT
+ <include refid="Base_Column_List" />
+ FROM saved_query_job WHERE job_id = #{jobId}
+ </select>
</mapper> \ No newline at end of file
diff --git a/src/test/java/com/mesa/reportservice/service/impl/JobServiceImplTest.java b/src/test/java/com/mesa/reportservice/service/impl/JobServiceImplTest.java
index 6957883..95fc879 100644
--- a/src/test/java/com/mesa/reportservice/service/impl/JobServiceImplTest.java
+++ b/src/test/java/com/mesa/reportservice/service/impl/JobServiceImplTest.java
@@ -1,8 +1,11 @@
package com.mesa.reportservice.service.impl;
+import cn.hutool.core.util.ObjectUtil;
import com.mesa.ReportServiceApplicationTests;
import com.mesa.reportservice.bean.JobEntity;
import com.mesa.reportservice.enums.JobStates;
+import com.mesa.reportservice.exception.SQSCode;
+import com.mesa.reportservice.exception.SQSException;
import com.mesa.reportservice.service.JobService;
import org.junit.Assert;
import org.junit.Test;
@@ -48,15 +51,29 @@ public class JobServiceImplTest extends ReportServiceApplicationTests {
@Test
public void testUpdateProcessesSuccess() {
- JobEntity job = this.jsonToInParameter("parameters/mysqlTest.json", "updateProcessesSuccessJob", JobEntity.class);
+ JobEntity job = this.jsonToInParameter("parameters/jobTest.json", "updateProcessesSuccessJob", JobEntity.class);
int i = jobService.updateProcesses(job);
Assert.assertEquals(updateProcessesSuccess,i);
}
@Test
public void testUpdateProcessesError() {
- JobEntity job = this.jsonToInParameter("parameters/mysqlTest.json", "updateProcessesErrorJob", JobEntity.class);
+ JobEntity job = this.jsonToInParameter("parameters/jobTest.json", "updateProcessesErrorJob", JobEntity.class);
int i = jobService.updateProcesses(job);
Assert.assertNotEquals(updateProcessesSuccess,i);
}
+
+ @Test
+ public void testGetJobState() {
+ String successId = this.jsonToInParameter("parameters/jobTest.json", "getJobDetailSuccessId", String.class);
+ Map<String, Object> success = jobService.getJobDetail(successId);
+ Assert.assertTrue(ObjectUtil.isNotEmpty(success));
+
+ String errorId = this.jsonToInParameter("parameters/jobTest.json", "getJobDetailErrorId", String.class);
+ try {
+ jobService.getJobDetail(errorId);
+ } catch (SQSException e) {
+ Assert.assertTrue(e.getCode()==SQSCode.JOB_IS_NOT_EXIST.getCode());
+ }
+ }
}
diff --git a/src/test/resources/parameters/mysqlTest.json b/src/test/resources/parameters/jobTest.json
index 7ed1831..04f32b9 100644
--- a/src/test/resources/parameters/mysqlTest.json
+++ b/src/test/resources/parameters/jobTest.json
@@ -46,5 +46,7 @@
"result": "",
"memoryUsage": "",
"queryDurationMs": ""
- }
+ },
+ "getJobDetailSuccessId": "00838b9d94552afecc6fa29cde033714",
+ "getJobDetailErrorId": "00838b9d94552afecc6fa29cde033715"
} \ No newline at end of file