|
@@ -8,6 +8,8 @@ import com.jjt.biz.domain.*;
|
|
|
import com.jjt.biz.mapper.BizObjMetricsMapper;
|
|
|
import com.jjt.biz.service.*;
|
|
|
import com.jjt.common.utils.DateUtils;
|
|
|
+import com.jjt.common.utils.IntervalUtil;
|
|
|
+import com.jjt.common.utils.StringUtils;
|
|
|
import org.apache.ibatis.session.ExecutorType;
|
|
|
import org.apache.ibatis.session.SqlSession;
|
|
|
import org.apache.ibatis.session.SqlSessionFactory;
|
|
@@ -44,9 +46,13 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
@Resource
|
|
|
private IPinpointService pinpointService;
|
|
|
@Resource
|
|
|
+ private IPrometheusService prometheusService;
|
|
|
+ @Resource
|
|
|
private IBizObjTplService objTplService;
|
|
|
@Resource
|
|
|
private SqlSessionFactory factory;
|
|
|
+ @Resource
|
|
|
+ private IAlarmRecordService alarmRecordService;
|
|
|
|
|
|
/**
|
|
|
* 查询业务对象指标
|
|
@@ -90,6 +96,7 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
*/
|
|
|
@Override
|
|
|
public int updateBizObjMetrics(BizObjMetrics bizObjMetrics) {
|
|
|
+ //插入数据记录表
|
|
|
bizObjMetrics.setUpdateTime(DateUtils.getNowDate());
|
|
|
return bizObjMetricsMapper.updateBizObjMetrics(bizObjMetrics);
|
|
|
}
|
|
@@ -317,7 +324,55 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
*/
|
|
|
@Override
|
|
|
public void prometheusMetricsValue(Long objId) {
|
|
|
+ List<BizObjMetrics> mList = getAllMetricsForObjIdList(objId);
|
|
|
+ List<BizObjMetrics> metricsToUpdate = new ArrayList<>();
|
|
|
+ mList.stream().filter(om -> !"1".equals(om.getMetricsDef().getMetricsType())).forEach(om -> {
|
|
|
+ //非pinpoint
|
|
|
+ Float value = prometheusService.query(om.getDataExp());
|
|
|
+ String alarmLevel = getAlarmLevel(value, om);
|
|
|
+
|
|
|
+ if (alarmLevel != null) {
|
|
|
+ insertAlarm(om, alarmLevel);
|
|
|
+ }
|
|
|
+
|
|
|
+ om.setDValue(BigDecimal.valueOf(value));
|
|
|
+ metricsToUpdate.add(om);
|
|
|
+ });
|
|
|
+ // 更新所有需要更新的BizObjMetrics对象
|
|
|
+ metricsToUpdate.forEach(this::updateBizObjMetrics);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取告警等级
|
|
|
+ *
|
|
|
+ * @param value 值
|
|
|
+ * @param bizObjMetrics 指标对象
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String getAlarmLevel(Float value, BizObjMetrics bizObjMetrics) {
|
|
|
+ if (StringUtils.isNotEmpty(bizObjMetrics.getAlarmLow()) && IntervalUtil.inNumRange(value, bizObjMetrics.getAlarmLow())) {
|
|
|
+ return "low";
|
|
|
+ } else if (StringUtils.isNotEmpty(bizObjMetrics.getAlarmMid()) && IntervalUtil.inNumRange(value, bizObjMetrics.getAlarmMid())) {
|
|
|
+ return "mid";
|
|
|
+ } else if (StringUtils.isNotEmpty(bizObjMetrics.getAlarmHigh()) && IntervalUtil.inNumRange(value, bizObjMetrics.getAlarmHigh())) {
|
|
|
+ return "high";
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 添加告警记录
|
|
|
+ *
|
|
|
+ * @param om 指标对象
|
|
|
+ * @param alarmLevel 告警等级
|
|
|
+ */
|
|
|
+ private void insertAlarm(BizObjMetrics om, String alarmLevel) {
|
|
|
+ AlarmRecord record = new AlarmRecord();
|
|
|
+ record.setObjId(om.getObjId());
|
|
|
+ record.setObjMetricsId(om.getObjMetricsId());
|
|
|
+ record.setAlarmLevel(alarmLevel);
|
|
|
+ alarmRecordService.insertAlarmRecord(record);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -452,6 +507,11 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
omList.stream()
|
|
|
.filter(om -> om.getMetricsCode().endsWith(metricSuffix))
|
|
|
.forEach(om -> {
|
|
|
+ String alarmLevel = getAlarmLevel(value.floatValue(), om);
|
|
|
+
|
|
|
+ if (alarmLevel != null) {
|
|
|
+ insertAlarm(om, alarmLevel);
|
|
|
+ }
|
|
|
om.setDValue(value);
|
|
|
updateBizObjMetrics(om);
|
|
|
});
|
|
@@ -502,7 +562,7 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
* @param value 值
|
|
|
*/
|
|
|
private void updateMetric(BizObjMetrics om, String suffix, Number value) {
|
|
|
- if (om.getMetricsCode().endsWith(suffix)) {
|
|
|
+ if (om.getMetricsCode().endsWith(suffix) && value != null) {
|
|
|
om.setDValue(BigDecimal.valueOf(value.doubleValue()));
|
|
|
updateBizObjMetrics(om);
|
|
|
}
|
|
@@ -515,10 +575,20 @@ public class BizObjMetricsServiceImpl implements IBizObjMetricsService {
|
|
|
* @return map
|
|
|
*/
|
|
|
private Map<String, BizObjMetrics> getAllMetricsForObjId(Long objId) {
|
|
|
+ return getAllMetricsForObjIdList(objId).stream()
|
|
|
+ .collect(Collectors.toMap(BizObjMetrics::getMetricsCode, Function.identity()));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据对象ID获取所有指标
|
|
|
+ *
|
|
|
+ * @param objId 对象ID
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<BizObjMetrics> getAllMetricsForObjIdList(Long objId) {
|
|
|
BizObjMetrics search = new BizObjMetrics();
|
|
|
search.setObjId(objId);
|
|
|
- return selectBizObjMetricsList(search).stream()
|
|
|
- .collect(Collectors.toMap(BizObjMetrics::getMetricsCode, Function.identity()));
|
|
|
+ return selectBizObjMetricsList(search);
|
|
|
}
|
|
|
|
|
|
}
|