|
|
@@ -1,13 +1,27 @@
|
|
|
package com.usthe.manager.service.impl;
|
|
|
|
|
|
+import com.usthe.common.entity.job.Configmap;
|
|
|
+import com.usthe.common.entity.job.Job;
|
|
|
+import com.usthe.common.util.CommonConstants;
|
|
|
+import com.usthe.common.util.SnowFlakeIdGenerator;
|
|
|
+import com.usthe.manager.dao.MonitorDao;
|
|
|
+import com.usthe.manager.dao.ParamDao;
|
|
|
import com.usthe.manager.pojo.dto.MonitorDto;
|
|
|
import com.usthe.manager.pojo.entity.Monitor;
|
|
|
import com.usthe.manager.pojo.entity.Param;
|
|
|
+import com.usthe.manager.service.AppService;
|
|
|
import com.usthe.manager.service.MonitorService;
|
|
|
+import com.usthe.manager.support.exception.MonitorDatabaseException;
|
|
|
import com.usthe.manager.support.exception.MonitorDetectException;
|
|
|
+import com.usthe.scheduler.JobScheduling;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.List;
|
|
|
+import java.util.Optional;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* 监控管理服务实现
|
|
|
@@ -15,20 +29,66 @@ import java.util.List;
|
|
|
* @date 2021/11/14 13:06
|
|
|
*/
|
|
|
@Service
|
|
|
+@Slf4j
|
|
|
public class MonitorServiceImpl implements MonitorService {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private AppService appService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private JobScheduling jobScheduling;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private MonitorDao monitorDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ParamDao paramDao;
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(readOnly = true)
|
|
|
public void detectMonitor(Monitor monitor, List<Param> params) throws MonitorDetectException {
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
public void addMonitor(Monitor monitor, List<Param> params) throws RuntimeException {
|
|
|
-
|
|
|
+ // 申请 monitor id
|
|
|
+ long monitorId = SnowFlakeIdGenerator.generateId();
|
|
|
+ // 构造采集任务Job实体
|
|
|
+ Job appDefine = appService.getAppDefine(monitor.getApp());
|
|
|
+ appDefine.setMonitorId(monitorId);
|
|
|
+ appDefine.setInterval(monitor.getIntervals());
|
|
|
+ appDefine.setCyclic(true);
|
|
|
+ appDefine.setTimestamp(System.currentTimeMillis());
|
|
|
+ List<Configmap> 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);
|
|
|
+ // 下发采集任务得到jobId
|
|
|
+ long jobId = jobScheduling.addAsyncCollectJob(appDefine);
|
|
|
+ // 下发成功后刷库
|
|
|
+ try {
|
|
|
+ monitor.setId(monitorId);
|
|
|
+ monitor.setJobId(jobId);
|
|
|
+ monitor.setStatus(CommonConstants.AVAILABLE);
|
|
|
+ monitor.setGmtCreate(null);
|
|
|
+ monitor.setGmtUpdate(null);
|
|
|
+ monitorDao.save(monitor);
|
|
|
+ paramDao.saveAll(params);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error(e.getMessage(), e);
|
|
|
+ // 刷库异常取消之前的下发任务
|
|
|
+ jobScheduling.cancelAsyncCollectJob(jobId);
|
|
|
+ throw new MonitorDatabaseException(e.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(readOnly = true)
|
|
|
public void validate(MonitorDto monitorDto, boolean isModify) throws IllegalArgumentException {
|
|
|
|
|
|
}
|
|
|
@@ -44,7 +104,17 @@ public class MonitorServiceImpl implements MonitorService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
+ @Transactional(readOnly = true)
|
|
|
public MonitorDto getMonitor(long id) throws RuntimeException {
|
|
|
- return null;
|
|
|
+ Optional<Monitor> monitorOptional = monitorDao.findById(id);
|
|
|
+ if (monitorOptional.isPresent()) {
|
|
|
+ MonitorDto monitorDto = new MonitorDto();
|
|
|
+ monitorDto.setMonitor(monitorOptional.get());
|
|
|
+ List<Param> params = paramDao.findParamsByMonitorId(id);
|
|
|
+ monitorDto.setParams(params);
|
|
|
+ return monitorDto;
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|
|
|
}
|