|
@@ -21,6 +21,7 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.ibatis.session.ExecutorType;
|
|
|
import org.apache.ibatis.session.SqlSession;
|
|
|
import org.apache.ibatis.session.SqlSessionFactory;
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@@ -68,6 +69,8 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
private ISysConfigService configService;
|
|
|
@Resource
|
|
|
private IBizObjMcService mcService;
|
|
|
+ @Resource
|
|
|
+ private JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
/**
|
|
|
* 查询业务对象指标
|
|
@@ -791,8 +794,15 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
Map<Long, AlarmRecord> recordMap = alarmRecordService.selectAlarmRecordListCurr(objId);
|
|
|
//查询当前对象未结束事件列表
|
|
|
Map<Long, HlEvent> eventMap = eventService.selectHlEventListCurr(objId);
|
|
|
- updateJvmMetrics(objId, agentVOList, date, recordMap, eventMap);
|
|
|
- updateLinkMetrics(objId, pinpointVOList, date, recordMap, eventMap);
|
|
|
+ Map<Long, BigDecimal> updateMap = new HashMap<>();
|
|
|
+ updateJvmMetrics(objId, agentVOList, date, recordMap, eventMap, updateMap);
|
|
|
+ updateLinkMetrics(objId, pinpointVOList, date, recordMap, eventMap, updateMap);
|
|
|
+ if (updateMap.size() > 0) {
|
|
|
+ jdbcTemplate.batchUpdate("update biz_obj_metrics set d_value = ?, UPDATE_TIME = ? where obj_metrics_id = ?",
|
|
|
+ updateMap.entrySet().stream()
|
|
|
+ .map(entry -> new Object[]{entry.getValue(), new Date(), entry.getKey()})
|
|
|
+ .collect(Collectors.toList()));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -802,18 +812,17 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
* * @param agentVOList jvm信息
|
|
|
* @param date 数据时间
|
|
|
*/
|
|
|
- private void updateJvmMetrics(Long objId, List<AgentVO> agentVOList, Date
|
|
|
- date, Map<Long, AlarmRecord> recordMap, Map<Long, HlEvent> eventMap) {
|
|
|
+ private void updateJvmMetrics(Long objId, List<AgentVO> agentVOList, Date date, Map<Long, AlarmRecord> recordMap, Map<Long, HlEvent> eventMap, Map<Long, BigDecimal> updateMap) {
|
|
|
BizObjMetrics jvmMetrics = new BizObjMetrics();
|
|
|
jvmMetrics.setObjId(objId);
|
|
|
jvmMetrics.setMetricsCode("pp.jvm.");
|
|
|
List<BizObjMetrics> omList = selectBizObjMetricsList(jvmMetrics);
|
|
|
for (AgentVO vo : agentVOList) {
|
|
|
if (vo.getCode() == 100) {
|
|
|
- updateMetricsValues(omList, "tps", vo.getAgentId(), BigDecimal.valueOf(vo.getTps()), date, recordMap, eventMap);
|
|
|
- updateMetricsValues(omList, "heap.usage", vo.getAgentId(), BigDecimal.valueOf(vo.getHeapUsage()), date, recordMap, eventMap);
|
|
|
- updateMetricsValues(omList, "open", vo.getAgentId(), BigDecimal.valueOf(vo.getOpenFiles()), date, recordMap, eventMap);
|
|
|
- updateMetricsValues(omList, "gc", vo.getAgentId(), BigDecimal.valueOf(vo.getGcCount()), date, recordMap, eventMap);
|
|
|
+ updateMetricsValues(omList, "tps", vo.getAgentId(), BigDecimal.valueOf(vo.getTps()), date, recordMap, eventMap, updateMap);
|
|
|
+ updateMetricsValues(omList, "heap.usage", vo.getAgentId(), BigDecimal.valueOf(vo.getHeapUsage()), date, recordMap, eventMap, updateMap);
|
|
|
+ updateMetricsValues(omList, "open", vo.getAgentId(), BigDecimal.valueOf(vo.getOpenFiles()), date, recordMap, eventMap, updateMap);
|
|
|
+ updateMetricsValues(omList, "gc", vo.getAgentId(), BigDecimal.valueOf(vo.getGcCount()), date, recordMap, eventMap, updateMap);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -829,7 +838,7 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
* @param date 数据时间
|
|
|
*/
|
|
|
private void updateMetricsValues(List<BizObjMetrics> omList, String metricSuffix, String agentId, BigDecimal value, Date
|
|
|
- date, Map<Long, AlarmRecord> recordMap, Map<Long, HlEvent> eventMap) {
|
|
|
+ date, Map<Long, AlarmRecord> recordMap, Map<Long, HlEvent> eventMap, Map<Long, BigDecimal> updateMap) {
|
|
|
List<BizObjMetricsData> dataList = new ArrayList<>();
|
|
|
List<AlarmRecord> addRList = new ArrayList<>();
|
|
|
List<AlarmRecord> updateRList = new ArrayList<>();
|
|
@@ -841,7 +850,8 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
.forEach(om -> {
|
|
|
om.setDValue(value);
|
|
|
om.setUpdateTime(DateUtils.getNowDate());
|
|
|
- updateList.add(om);
|
|
|
+ updateMap.put(om.getObjMetricsId(), value);
|
|
|
+// updateList.add(om);
|
|
|
// updateBizObjMetrics(om);
|
|
|
BizObjMetricsData data = new BizObjMetricsData();
|
|
|
data.setObjMetricsId(om.getObjMetricsId());
|
|
@@ -866,36 +876,62 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
updateEList.add(eMap.get("update"));
|
|
|
}
|
|
|
});
|
|
|
- batchUpdate(updateList, dataList, addRList, updateRList, addEList, updateEList);
|
|
|
+ batchUpdate(null, dataList, addRList, updateRList, addEList, updateEList);
|
|
|
}
|
|
|
|
|
|
private void batchUpdate
|
|
|
(List<BizObjMetrics> metricsToUpdate, List<BizObjMetricsData> dataList, List<AlarmRecord> addRList, List<AlarmRecord> updateRList, List<HlEvent> addEList, List<HlEvent> updateEList) {
|
|
|
// 更新所有需要更新的BizObjMetrics对象
|
|
|
- try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
|
|
|
- BizObjMetricsMapper mapper = sqlSession.getMapper(BizObjMetricsMapper.class);
|
|
|
- if (metricsToUpdate != null && metricsToUpdate.size() > 0) {
|
|
|
+ if (metricsToUpdate != null && !metricsToUpdate.isEmpty()) {
|
|
|
+ // 按 objMetricsId 排序,保证更新顺序一致,避免死锁
|
|
|
+ metricsToUpdate.sort(Comparator.comparing(BizObjMetrics::getObjMetricsId));
|
|
|
+ try (SqlSession sqlSession = factory.openSession(ExecutorType.BATCH, false)) {
|
|
|
+ BizObjMetricsMapper mapper = sqlSession.getMapper(BizObjMetricsMapper.class);
|
|
|
metricsToUpdate.forEach(mapper::updateBizObjMetrics);
|
|
|
+ sqlSession.commit();
|
|
|
}
|
|
|
- if (dataList != null && dataList.size() > 0) {
|
|
|
+ }
|
|
|
+
|
|
|
+ if (dataList != null && dataList.size() > 0) {
|
|
|
+ try (SqlSession sqlSession = factory.openSession(ExecutorType.SIMPLE, false)) {
|
|
|
BizObjMetricsDataMapper dataMapper = sqlSession.getMapper(BizObjMetricsDataMapper.class);
|
|
|
dataList.forEach(dataMapper::insertBizObjMetricsData);
|
|
|
+ sqlSession.commit();
|
|
|
}
|
|
|
- AlarmRecordMapper recordMapper = sqlSession.getMapper(AlarmRecordMapper.class);
|
|
|
- if (addRList != null && addRList.size() > 0) {
|
|
|
+ }
|
|
|
+
|
|
|
+ if (addRList != null && addRList.size() > 0) {
|
|
|
+ try (SqlSession sqlSession = factory.openSession(ExecutorType.SIMPLE, false)) {
|
|
|
+ AlarmRecordMapper recordMapper = sqlSession.getMapper(AlarmRecordMapper.class);
|
|
|
addRList.forEach(recordMapper::insertAlarmRecord);
|
|
|
+ sqlSession.commit();
|
|
|
}
|
|
|
- if (updateRList != null && updateRList.size() > 0) {
|
|
|
+ }
|
|
|
+
|
|
|
+ if (updateRList != null && updateRList.size() > 0) {
|
|
|
+ try (SqlSession sqlSession = factory.openSession(ExecutorType.SIMPLE, false)) {
|
|
|
+ AlarmRecordMapper recordMapper = sqlSession.getMapper(AlarmRecordMapper.class);
|
|
|
+ updateRList.sort(Comparator.comparing(AlarmRecord::getAlarmId));
|
|
|
updateRList.forEach(recordMapper::updateAlarmRecord);
|
|
|
+ sqlSession.commit();
|
|
|
}
|
|
|
- HlEventMapper eventMapper = sqlSession.getMapper(HlEventMapper.class);
|
|
|
- if (addEList != null && addEList.size() > 0) {
|
|
|
+ }
|
|
|
+
|
|
|
+ if (addEList != null && addEList.size() > 0) {
|
|
|
+ try (SqlSession sqlSession = factory.openSession(ExecutorType.SIMPLE, false)) {
|
|
|
+ HlEventMapper eventMapper = sqlSession.getMapper(HlEventMapper.class);
|
|
|
addEList.forEach(eventMapper::insertHlEvent);
|
|
|
+ sqlSession.commit();
|
|
|
}
|
|
|
- if (updateEList != null && updateEList.size() > 0) {
|
|
|
+ }
|
|
|
+
|
|
|
+ if (updateEList != null && updateEList.size() > 0) {
|
|
|
+ try (SqlSession sqlSession = factory.openSession(ExecutorType.SIMPLE, false)) {
|
|
|
+ HlEventMapper eventMapper = sqlSession.getMapper(HlEventMapper.class);
|
|
|
+ updateEList.sort(Comparator.comparing(HlEvent::getEventId));
|
|
|
updateEList.forEach(eventMapper::updateHlEvent);
|
|
|
+ sqlSession.commit();
|
|
|
}
|
|
|
- sqlSession.commit();
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -907,9 +943,9 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
* @param date 时间
|
|
|
*/
|
|
|
private void updateLinkMetrics(Long objId, List<PinpointVO> pinpointVOList, Date
|
|
|
- date, Map<Long, AlarmRecord> recordMap, Map<Long, HlEvent> eventMap) {
|
|
|
+ date, Map<Long, AlarmRecord> recordMap, Map<Long, HlEvent> eventMap, Map<Long, BigDecimal> updateMap) {
|
|
|
Map<String, List<BizObjMetrics>> metricsMap = getAllMetricsForObjId(objId);
|
|
|
- pinpointVOList.forEach(vo -> updateMetricsValues(metricsMap, vo, date, recordMap, eventMap));
|
|
|
+ pinpointVOList.forEach(vo -> updateMetricsValues(metricsMap, vo, date, recordMap, eventMap, updateMap));
|
|
|
}
|
|
|
|
|
|
|
|
@@ -921,9 +957,9 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
* @param date 时间
|
|
|
*/
|
|
|
private void updateMetricsValues(Map<String, List<BizObjMetrics>> metricsMap, PinpointVO vo, Date
|
|
|
- date, Map<Long, AlarmRecord> recordMap, Map<Long, HlEvent> eventMap) {
|
|
|
+ date, Map<Long, AlarmRecord> recordMap, Map<Long, HlEvent> eventMap, Map<Long, BigDecimal> updateMap) {
|
|
|
List<BizObjMetricsData> dataList = new ArrayList<>();
|
|
|
- List<BizObjMetrics> updateList = new ArrayList<>();
|
|
|
+// List<BizObjMetrics> updateList = new ArrayList<>();
|
|
|
List<AlarmRecord> addRList = new ArrayList<>();
|
|
|
List<AlarmRecord> updateRList = new ArrayList<>();
|
|
|
List<HlEvent> addEList = new ArrayList<>();
|
|
@@ -933,24 +969,24 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
list.forEach(om -> {
|
|
|
if (om.getMetricsName().startsWith(vo.getCategory() + "/")) {
|
|
|
if (vo.getTot() != 0) {
|
|
|
- updateMetric(om, "pp.1s", vo.getTime1s(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.3s", vo.getTime3s(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.5s", vo.getTime5s(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.100ms", vo.getTime100ms(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.300ms", vo.getTime300ms(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.500ms", vo.getTime500ms(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.tot", vo.getTot(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.sum", vo.getSum(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.max", vo.getMax(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.avg", vo.getAvg(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.slow", vo.getSlow(), date, dataList, updateList);
|
|
|
- updateMetric(om, "pp.error", vo.getError(), date, dataList, updateList);
|
|
|
+ updateMetric(om, "pp.1s", vo.getTime1s(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.3s", vo.getTime3s(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.5s", vo.getTime5s(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.100ms", vo.getTime100ms(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.300ms", vo.getTime300ms(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.500ms", vo.getTime500ms(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.tot", vo.getTot(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.sum", vo.getSum(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.max", vo.getMax(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.avg", vo.getAvg(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.slow", vo.getSlow(), date, dataList, updateMap);
|
|
|
+ updateMetric(om, "pp.error", vo.getError(), date, dataList, updateMap);
|
|
|
Integer time1 = vo.getTime1s();
|
|
|
if (time1 == null) {
|
|
|
time1 = vo.getTime100ms();
|
|
|
}
|
|
|
BigDecimal rate = BigDecimal.valueOf(time1).divide(BigDecimal.valueOf(vo.getTot()), 4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
|
|
|
- updateMetric(om, "pp.rate", rate, date, dataList, updateList);
|
|
|
+ updateMetric(om, "pp.rate", rate, date, dataList, updateMap);
|
|
|
if (om.getDValue() != null) {
|
|
|
//处理告警
|
|
|
Map<String, AlarmRecord> aMap = alarmRecordService.process(om, recordMap, date);
|
|
@@ -974,7 +1010,7 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
- batchUpdate(updateList, dataList, addRList, updateRList, addEList, updateEList);
|
|
|
+ batchUpdate(null, dataList, addRList, updateRList, addEList, updateEList);
|
|
|
// metricsMap.values().stream()
|
|
|
// .filter(om -> om.getMetricsCode().startsWith(vo.getApplicationName() + "/"))
|
|
|
// .forEach(om -> {
|
|
@@ -1002,11 +1038,12 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
* @param date 时间
|
|
|
*/
|
|
|
private void updateMetric(BizObjMetrics om, String suffix, Number value, Date
|
|
|
- date, List<BizObjMetricsData> dataList, List<BizObjMetrics> updateList) {
|
|
|
+ date, List<BizObjMetricsData> dataList, Map<Long, BigDecimal> updateMap) {
|
|
|
if (om.getMetricsCode().endsWith(suffix) && value != null) {
|
|
|
om.setDValue(BigDecimal.valueOf(value.doubleValue()));
|
|
|
om.setUpdateTime(new Date());
|
|
|
- updateList.add(om);
|
|
|
+ updateMap.put(om.getObjMetricsId(), om.getDValue());
|
|
|
+// updateList.add(om);
|
|
|
// updateBizObjMetrics(om);
|
|
|
|
|
|
BizObjMetricsData data = new BizObjMetricsData();
|