diff --git a/manager/src/main/java/com/usthe/manager/controller/MonitorController.java b/manager/src/main/java/com/usthe/manager/controller/MonitorController.java
index 2e22ae7..2b55366 100644
--- a/manager/src/main/java/com/usthe/manager/controller/MonitorController.java
+++ b/manager/src/main/java/com/usthe/manager/controller/MonitorController.java
@@ -28,6 +28,7 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
@Api(tags = "监控管理API")
@RestController
@RequestMapping(path = "/monitor", produces = {APPLICATION_JSON_VALUE})
+@Validated
public class MonitorController {
@Autowired
diff --git a/manager/src/main/java/com/usthe/manager/dao/ParamDao.java b/manager/src/main/java/com/usthe/manager/dao/ParamDao.java
index da70bac..87d03c1 100644
--- a/manager/src/main/java/com/usthe/manager/dao/ParamDao.java
+++ b/manager/src/main/java/com/usthe/manager/dao/ParamDao.java
@@ -18,4 +18,10 @@ public interface ParamDao extends JpaRepository {
* @return 参数值列表
*/
List findParamsByMonitorId(long monitorId);
+
+ /**
+ * 根据监控ID删除与之关联的参数列表
+ * @param monitorId 监控ID
+ */
+ void deleteParamsByMonitorId(long monitorId);
}
diff --git a/manager/src/main/java/com/usthe/manager/service/impl/MonitorServiceImpl.java b/manager/src/main/java/com/usthe/manager/service/impl/MonitorServiceImpl.java
index d133301..cc2dba2 100644
--- a/manager/src/main/java/com/usthe/manager/service/impl/MonitorServiceImpl.java
+++ b/manager/src/main/java/com/usthe/manager/service/impl/MonitorServiceImpl.java
@@ -2,6 +2,7 @@ package com.usthe.manager.service.impl;
import com.usthe.common.entity.job.Configmap;
import com.usthe.common.entity.job.Job;
+import com.usthe.common.entity.message.CollectRep;
import com.usthe.common.util.CommonConstants;
import com.usthe.common.util.SnowFlakeIdGenerator;
import com.usthe.manager.dao.MonitorDao;
@@ -32,6 +33,8 @@ import java.util.stream.Collectors;
@Slf4j
public class MonitorServiceImpl implements MonitorService {
+ private static final Long MONITOR_ID_TMP = 1000000000L;
+
@Autowired
private AppService appService;
@@ -47,7 +50,19 @@ public class MonitorServiceImpl implements MonitorService {
@Override
@Transactional(readOnly = true)
public void detectMonitor(Monitor monitor, List params) throws MonitorDetectException {
-
+ Long monitorId = monitor.getId();
+ if (monitorId == null || monitorId == 0) {
+ monitorId = MONITOR_ID_TMP;
+ }
+ Job appDefine = appService.getAppDefine(monitor.getApp());
+ appDefine.setMonitorId(monitorId);
+ appDefine.setCyclic(false);
+ appDefine.setTimestamp(System.currentTimeMillis());
+ List configmaps = params.stream().map(param ->
+ new Configmap(param.getField(), param.getValue(), param.getType())).collect(Collectors.toList());
+ appDefine.setConfigmap(configmaps);
+ CollectRep collectRep = jobScheduling.addSyncCollectJob(appDefine);
+ // 判断探测结果 失败则抛出探测异常
}
@Override
@@ -95,12 +110,57 @@ public class MonitorServiceImpl implements MonitorService {
@Override
public void modifyMonitor(Monitor monitor, List params) throws RuntimeException {
-
+ long monitorId = monitor.getId();
+ // 查判断monitorId对应的此监控是否存在
+ Optional queryOption = monitorDao.findById(monitorId);
+ if (!queryOption.isPresent()) {
+ throw new IllegalArgumentException("The Monitor " + monitorId + " not exists");
+ }
+ Monitor preMonitor = queryOption.get();
+ if (!preMonitor.getApp().equals(monitor.getApp()) || !preMonitor.getHost().equals(monitor.getHost())) {
+ // 监控的 类型和host不能修改
+ throw new IllegalArgumentException("Can not modify monitor's app or host");
+ }
+ // 构造采集任务Job实体
+ Job appDefine = appService.getAppDefine(monitor.getApp());
+ appDefine.setId(preMonitor.getJobId());
+ appDefine.setMonitorId(monitorId);
+ appDefine.setInterval(monitor.getIntervals());
+ appDefine.setCyclic(true);
+ appDefine.setTimestamp(System.currentTimeMillis());
+ List configmaps = params.stream().map(param -> {
+ param.setMonitorId(monitorId);
+ param.setGmtCreate(null);
+ param.setGmtUpdate(null);
+ return new Configmap(param.getField(), param.getValue(), param.getType());
+ }).collect(Collectors.toList());
+ appDefine.setConfigmap(configmaps);
+ // 更新采集任务
+ jobScheduling.updateAsyncCollectJob(appDefine);
+ // 下发更新成功后刷库
+ try {
+ monitor.setJobId(preMonitor.getJobId());
+ monitor.setStatus(preMonitor.getStatus());
+ monitor.setGmtCreate(null);
+ monitor.setGmtUpdate(null);
+ monitorDao.save(monitor);
+ paramDao.saveAll(params);
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ throw new MonitorDatabaseException(e.getMessage());
+ }
}
@Override
+ @Transactional(rollbackFor = Exception.class)
public void deleteMonitor(long id) throws RuntimeException {
-
+ Optional monitorOptional = monitorDao.findById(id);
+ if (monitorOptional.isPresent()) {
+ Monitor monitor = monitorOptional.get();
+ monitorDao.deleteById(id);
+ paramDao.deleteParamsByMonitorId(id);
+ jobScheduling.cancelAsyncCollectJob(monitor.getJobId());
+ }
}
@Override
diff --git a/manager/src/main/java/com/usthe/manager/support/GlobalExceptionHandler.java b/manager/src/main/java/com/usthe/manager/support/GlobalExceptionHandler.java
index f0a45ff..3729142 100644
--- a/manager/src/main/java/com/usthe/manager/support/GlobalExceptionHandler.java
+++ b/manager/src/main/java/com/usthe/manager/support/GlobalExceptionHandler.java
@@ -8,14 +8,18 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DataAccessException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;
+import java.lang.reflect.Field;
+
import static com.usthe.common.util.CommonConstants.DETECT_FAILED;
import static com.usthe.common.util.CommonConstants.MONITOR_CONFLICT;
+import static com.usthe.common.util.CommonConstants.PARAM_INVALID;
/**
* controller exception handler
@@ -26,6 +30,15 @@ import static com.usthe.common.util.CommonConstants.MONITOR_CONFLICT;
@Slf4j
public class GlobalExceptionHandler {
+ private static Field detailMessage;
+
+ static {
+ try {
+ detailMessage = Throwable.class.getDeclaredField("detailMessage");
+ detailMessage.setAccessible(true);
+ } catch (Exception e) {}
+ }
+
/**
* 处理探测失败
* @param exception 探测异常
@@ -50,6 +63,35 @@ public class GlobalExceptionHandler {
return ResponseEntity.status(HttpStatus.CONFLICT).body(message);
}
+ /**
+ * 处理参数错误的失败
+ * @param exception 参数异常
+ * @return response
+ */
+ @ExceptionHandler(IllegalArgumentException.class)
+ @ResponseBody
+ ResponseEntity> handleIllegalArgumentException(IllegalArgumentException exception) {
+ Message message = Message.builder().msg(exception.getMessage()).code(PARAM_INVALID).build();
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(message);
+ }
+
+ /**
+ * 处理请求参数错误的失败, 请求参数json映射body时出错
+ * @param exception 参数映射body异常
+ * @return response
+ */
+ @ExceptionHandler(HttpMessageNotReadableException.class)
+ @ResponseBody
+ ResponseEntity> handleHttpMessageNotReadableException(HttpMessageNotReadableException exception) {
+ try {
+ Message message = Message.builder().msg((String) detailMessage.get(exception)).code(PARAM_INVALID).build();
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(message);
+ } catch (Exception e) {
+ Message message = Message.builder().msg(exception.getMessage()).code(PARAM_INVALID).build();
+ return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(message);
+ }
+ }
+
/**
* handler the exception thrown for data input verify
diff --git a/pom.xml b/pom.xml
index 41fec05..3480b4d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,8 +103,8 @@
rulesets/java/ali-comment.xml
rulesets/java/ali-concurrent.xml
rulesets/java/ali-constant.xml
- rulesets/java/ali-exception.xml
-
+
+
rulesets/java/ali-naming.xml
rulesets/java/ali-oop.xml
rulesets/java/ali-orm.xml