🔨 优化缓存删除逻辑.
This commit is contained in:
@@ -210,6 +210,10 @@ public interface ErrorMessage {
|
|||||||
|
|
||||||
String PLEASE_SELECT_SUFFIX_FILE = "请选择 {} 类型的文件";
|
String PLEASE_SELECT_SUFFIX_FILE = "请选择 {} 类型的文件";
|
||||||
|
|
||||||
|
String SPEC_FORMAT_INCORRECT = "规格格式不正确";
|
||||||
|
|
||||||
|
String INFLUXDB_UNSUPPORTED = "InfluxDB 服务未开启";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否为业务异常
|
* 是否为业务异常
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -30,7 +30,9 @@ import com.influxdb.client.write.Point;
|
|||||||
import com.influxdb.query.FluxRecord;
|
import com.influxdb.query.FluxRecord;
|
||||||
import com.influxdb.query.FluxTable;
|
import com.influxdb.query.FluxTable;
|
||||||
import org.dromara.visor.common.constant.Const;
|
import org.dromara.visor.common.constant.Const;
|
||||||
|
import org.dromara.visor.common.constant.ErrorMessage;
|
||||||
import org.dromara.visor.common.entity.chart.TimeChartSeries;
|
import org.dromara.visor.common.entity.chart.TimeChartSeries;
|
||||||
|
import org.dromara.visor.common.utils.Assert;
|
||||||
import org.dromara.visor.framework.influxdb.core.query.FluxQueryBuilder;
|
import org.dromara.visor.framework.influxdb.core.query.FluxQueryBuilder;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
@@ -66,6 +68,7 @@ public class InfluxdbUtils {
|
|||||||
* @param points points
|
* @param points points
|
||||||
*/
|
*/
|
||||||
public static void writePoints(List<Point> points) {
|
public static void writePoints(List<Point> points) {
|
||||||
|
Assert.notNull(client, ErrorMessage.INFLUXDB_UNSUPPORTED);
|
||||||
try (WriteApi api = client.makeWriteApi()) {
|
try (WriteApi api = client.makeWriteApi()) {
|
||||||
// 写入指标
|
// 写入指标
|
||||||
api.writePoints(points);
|
api.writePoints(points);
|
||||||
@@ -79,6 +82,7 @@ public class InfluxdbUtils {
|
|||||||
* @return points
|
* @return points
|
||||||
*/
|
*/
|
||||||
public static List<FluxTable> queryTable(String query) {
|
public static List<FluxTable> queryTable(String query) {
|
||||||
|
Assert.notNull(client, ErrorMessage.INFLUXDB_UNSUPPORTED);
|
||||||
return client.getQueryApi().query(query);
|
return client.getQueryApi().query(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,13 @@
|
|||||||
*/
|
*/
|
||||||
package org.dromara.visor.module.asset.service.impl;
|
package org.dromara.visor.module.asset.service.impl;
|
||||||
|
|
||||||
|
import cn.orionsec.kit.lang.utils.Exceptions;
|
||||||
import cn.orionsec.kit.lang.utils.Strings;
|
import cn.orionsec.kit.lang.utils.Strings;
|
||||||
import cn.orionsec.kit.lang.utils.collect.Lists;
|
import cn.orionsec.kit.lang.utils.collect.Lists;
|
||||||
|
import cn.orionsec.kit.lang.utils.collect.Maps;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.visor.common.constant.Const;
|
import org.dromara.visor.common.constant.Const;
|
||||||
import org.dromara.visor.common.constant.ErrorMessage;
|
import org.dromara.visor.common.constant.ErrorMessage;
|
||||||
import org.dromara.visor.common.handler.data.model.GenericsDataModel;
|
import org.dromara.visor.common.handler.data.model.GenericsDataModel;
|
||||||
@@ -44,6 +47,7 @@ import org.dromara.visor.module.infra.enums.DataExtraTypeEnum;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -55,6 +59,7 @@ import java.util.stream.Collectors;
|
|||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
* @since 2023/12/20 12:11
|
* @since 2023/12/20 12:11
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
public class HostExtraServiceImpl implements HostExtraService {
|
public class HostExtraServiceImpl implements HostExtraService {
|
||||||
|
|
||||||
@@ -156,40 +161,57 @@ public class HostExtraServiceImpl implements HostExtraService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void syncHostSpec(String key, String taskId, JSONObject spec) {
|
public void syncHostSpec(String key, String taskId, JSONObject spec) {
|
||||||
try {
|
// 查询主机id
|
||||||
// 查询主机id
|
Long id = hostDAO.selectIdByAgentKey(key);
|
||||||
Long id = hostDAO.selectIdByAgentKey(key);
|
Assert.notNull(id, ErrorMessage.HOST_ABSENT);
|
||||||
Assert.notNull(id, ErrorMessage.HOST_ABSENT);
|
// 设置已同步标识
|
||||||
// 设置已同步标识
|
spec.put(Const.SYNCED, true);
|
||||||
spec.put(Const.SYNCED, true);
|
// 查询配置信息
|
||||||
// 查询配置信息
|
String newSpec;
|
||||||
String newSpec;
|
HostSpecExtraModel beforeSpec = this.getHostSpecMap(Lists.singleton(id)).get(id);
|
||||||
HostSpecExtraModel beforeSpec = this.getHostSpecMap(Lists.singleton(id)).get(id);
|
if (beforeSpec == null) {
|
||||||
if (beforeSpec == null) {
|
// 新增
|
||||||
// 新增
|
newSpec = spec.toString();
|
||||||
newSpec = spec.toString();
|
} else {
|
||||||
} else {
|
// 合并
|
||||||
// 合并
|
JSONObject beforeSpecValue = JSON.parseObject(beforeSpec.serial());
|
||||||
JSONObject beforeSpecValue = JSON.parseObject(beforeSpec.serial());
|
spec.forEach((k, v) -> {
|
||||||
spec.forEach((k, v) -> {
|
// 获取原数据
|
||||||
if (v != null) {
|
Object beforeValue = beforeSpecValue.get(k);
|
||||||
beforeSpecValue.put(k, v);
|
// 检查是否存在
|
||||||
|
boolean present = false;
|
||||||
|
if (beforeValue != null) {
|
||||||
|
if (beforeValue instanceof String) {
|
||||||
|
present = !Strings.isBlank((String) beforeValue);
|
||||||
|
} else if (beforeValue instanceof Collection) {
|
||||||
|
present = !Lists.isEmpty((Collection<?>) beforeValue);
|
||||||
|
} else if (beforeValue instanceof Map) {
|
||||||
|
present = !Maps.isEmpty((Map<?, ?>) beforeValue);
|
||||||
|
} else {
|
||||||
|
present = true;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
newSpec = beforeSpecValue.toJSONString();
|
// 不存在则覆盖
|
||||||
}
|
if (!present && v != null) {
|
||||||
// 修改规格
|
beforeSpecValue.put(k, v);
|
||||||
DataExtraSetDTO update = new DataExtraSetDTO();
|
}
|
||||||
update.setUserId(Const.SYSTEM_USER_ID);
|
});
|
||||||
update.setRelId(id);
|
newSpec = beforeSpecValue.toJSONString();
|
||||||
update.setItem(HostExtraItemEnum.SPEC.name());
|
|
||||||
update.setValue(newSpec);
|
|
||||||
dataExtraApi.setExtraItem(update, DataExtraTypeEnum.HOST);
|
|
||||||
// 回调成功
|
|
||||||
} catch (Exception e) {
|
|
||||||
// 回调失败
|
|
||||||
throw e;
|
|
||||||
}
|
}
|
||||||
|
// 检查是否能反解析 防止格式错误导致其他地方报错
|
||||||
|
try {
|
||||||
|
JSON.parseObject(newSpec, HostSpecExtraModel.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("HostExtraService-setHostSpec error: {}, spec: {}", e.getMessage(), newSpec, e);
|
||||||
|
throw Exceptions.app(ErrorMessage.SPEC_FORMAT_INCORRECT, e);
|
||||||
|
}
|
||||||
|
// 修改规格
|
||||||
|
DataExtraSetDTO update = new DataExtraSetDTO();
|
||||||
|
update.setUserId(Const.SYSTEM_USER_ID);
|
||||||
|
update.setRelId(id);
|
||||||
|
update.setItem(HostExtraItemEnum.SPEC.name());
|
||||||
|
update.setValue(newSpec);
|
||||||
|
dataExtraApi.setExtraItem(update, DataExtraTypeEnum.HOST);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user