合并主机额外配置.

This commit is contained in:
lijiahang
2024-04-19 10:18:56 +08:00
parent 33cfb13342
commit 714940bdcf
23 changed files with 173 additions and 221 deletions

View File

@@ -1,13 +1,3 @@
### 修改主机别名
PUT {{baseUrl}}/asset/host-extra/update-alias
Content-Type: application/json
Authorization: {{token}}
{
"id": 1,
"name": "alias"
}
### 获取主机拓展信息
GET {{baseUrl}}/asset/host-extra/get?hostId=1&item=ssh
Authorization: {{token}}

View File

@@ -3,7 +3,6 @@ package com.orion.ops.module.asset.controller;
import com.orion.ops.framework.log.core.annotation.IgnoreLog;
import com.orion.ops.framework.log.core.enums.IgnoreLogMode;
import com.orion.ops.framework.web.core.annotation.RestWrapper;
import com.orion.ops.module.asset.entity.request.host.HostAliasUpdateRequest;
import com.orion.ops.module.asset.entity.request.host.HostExtraQueryRequest;
import com.orion.ops.module.asset.entity.request.host.HostExtraUpdateRequest;
import com.orion.ops.module.asset.service.HostExtraService;
@@ -36,12 +35,6 @@ public class HostExtraController {
@Resource
private HostExtraService hostExtraService;
@PutMapping("/update-alias")
@Operation(summary = "修改主机别名")
public Integer updateHostAlias(@Validated @RequestBody HostAliasUpdateRequest request) {
return hostExtraService.updateHostAlias(request);
}
@IgnoreLog(IgnoreLogMode.RET)
@GetMapping("/get")
@Operation(summary = "获取主机拓展信息")

View File

@@ -1,36 +0,0 @@
package com.orion.ops.module.asset.entity.request.host;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* 主机别名 更新请求对象
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023-9-13 14:31
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "HostAliasUpdateRequest", description = "主机别名 更新请求对象")
public class HostAliasUpdateRequest implements Serializable {
@NotNull
@Schema(description = "id")
private Long id;
@NotNull
@Size(max = 32)
@Schema(description = "别名")
private String name;
}

View File

@@ -3,9 +3,9 @@ package com.orion.ops.module.asset.enums;
import com.orion.ops.framework.common.handler.data.GenericsDataDefinition;
import com.orion.ops.framework.common.handler.data.model.GenericsDataModel;
import com.orion.ops.framework.common.handler.data.strategy.MapDataStrategy;
import com.orion.ops.module.asset.handler.host.extra.model.HostColorExtraModel;
import com.orion.ops.module.asset.handler.host.extra.model.HostLabelExtraModel;
import com.orion.ops.module.asset.handler.host.extra.model.HostSshExtraModel;
import com.orion.ops.module.asset.handler.host.extra.strategy.HostColorExtraStrategy;
import com.orion.ops.module.asset.handler.host.extra.strategy.HostLabelExtraStrategy;
import com.orion.ops.module.asset.handler.host.extra.strategy.HostSshExtraStrategy;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -27,9 +27,9 @@ public enum HostExtraItemEnum implements GenericsDataDefinition {
SSH("ssh", HostSshExtraModel.class, HostSshExtraStrategy.class),
/**
* 颜色额外配置
* 标签额外配置
*/
COLOR("color", HostColorExtraModel.class, HostColorExtraStrategy.class),
LABEL("label", HostLabelExtraModel.class, HostLabelExtraStrategy.class),
;

View File

@@ -8,7 +8,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 主机拓展信息 - color 模型
* 主机拓展信息 - 标签模型
*
* @author Jiahang Li
* @version 1.0.0
@@ -18,10 +18,13 @@ import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(name = "HostColorExtraModel", description = "主机拓展信息 - color 模型")
public class HostColorExtraModel implements GenericsDataModel {
@Schema(name = "HostLabelExtraModel", description = "主机拓展信息 - 标签模型")
public class HostLabelExtraModel implements GenericsDataModel {
@Schema(description = "标签 tab 颜色")
@Schema(description = "别名")
private String alias;
@Schema(description = "颜色")
private String color;
}

View File

@@ -1,37 +0,0 @@
package com.orion.ops.module.asset.handler.host.extra.strategy;
import com.orion.ops.framework.common.handler.data.strategy.MapDataStrategy;
import com.orion.ops.module.asset.handler.host.extra.model.HostColorExtraModel;
import org.springframework.stereotype.Component;
/**
* 主机拓展信息 - 颜色 模型处理策略
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/2/29 23:16
*/
@Component
public class HostColorExtraStrategy implements MapDataStrategy<HostColorExtraModel> {
@Override
public HostColorExtraModel getDefault() {
return HostColorExtraModel.builder()
// 默认透明
.color("")
.build();
}
@Override
public void updateFill(HostColorExtraModel beforeModel, HostColorExtraModel afterModel) {
}
@Override
public void preValid(HostColorExtraModel model) {
}
@Override
public void valid(HostColorExtraModel model) {
}
}

View File

@@ -0,0 +1,47 @@
package com.orion.ops.module.asset.handler.host.extra.strategy;
import com.orion.ops.framework.common.constant.Const;
import com.orion.ops.framework.common.handler.data.strategy.MapDataStrategy;
import com.orion.ops.module.asset.handler.host.extra.model.HostLabelExtraModel;
import org.springframework.stereotype.Component;
/**
* 主机拓展信息 - 标签模型处理策略
*
* @author Jiahang Li
* @version 1.0.0
* @since 2024/2/29 23:16
*/
@Component
public class HostLabelExtraStrategy implements MapDataStrategy<HostLabelExtraModel> {
@Override
public HostLabelExtraModel getDefault() {
return HostLabelExtraModel.builder()
// 透明
.color(Const.EMPTY)
// 无别名
.alias(Const.EMPTY)
.build();
}
@Override
public void updateFill(HostLabelExtraModel beforeModel, HostLabelExtraModel afterModel) {
// 为空则覆盖
if (afterModel.getAlias() == null) {
afterModel.setAlias(beforeModel.getAlias());
}
if (afterModel.getColor() == null) {
afterModel.setColor(beforeModel.getColor());
}
}
@Override
public void preValid(HostLabelExtraModel model) {
}
@Override
public void valid(HostLabelExtraModel model) {
}
}

View File

@@ -1,7 +1,6 @@
package com.orion.ops.module.asset.service;
import com.orion.ops.framework.common.handler.data.model.GenericsDataModel;
import com.orion.ops.module.asset.entity.request.host.HostAliasUpdateRequest;
import com.orion.ops.module.asset.entity.request.host.HostExtraQueryRequest;
import com.orion.ops.module.asset.entity.request.host.HostExtraUpdateRequest;
import com.orion.ops.module.asset.enums.HostExtraItemEnum;
@@ -17,14 +16,6 @@ import java.util.Map;
*/
public interface HostExtraService {
/**
* 修改主机别名
*
* @param request request
* @return effect
*/
Integer updateHostAlias(HostAliasUpdateRequest request);
/**
* 获取主机额外配置
*

View File

@@ -1,8 +1,6 @@
package com.orion.ops.module.asset.service.impl;
import com.alibaba.fastjson.JSON;
import com.orion.lang.function.Functions;
import com.orion.lang.utils.Refs;
import com.orion.lang.utils.collect.Lists;
import com.orion.lang.utils.collect.Maps;
import com.orion.lang.utils.collect.Sets;
@@ -14,10 +12,10 @@ import com.orion.ops.module.asset.entity.request.asset.AssetAuthorizedDataQueryR
import com.orion.ops.module.asset.entity.vo.*;
import com.orion.ops.module.asset.enums.HostConfigTypeEnum;
import com.orion.ops.module.asset.enums.HostConnectTypeEnum;
import com.orion.ops.module.asset.handler.host.extra.model.HostColorExtraModel;
import com.orion.ops.module.asset.enums.HostExtraItemEnum;
import com.orion.ops.module.asset.handler.host.extra.model.HostLabelExtraModel;
import com.orion.ops.module.asset.service.*;
import com.orion.ops.module.infra.api.*;
import com.orion.ops.module.infra.constant.DataExtraItems;
import com.orion.ops.module.infra.entity.dto.data.DataGroupDTO;
import com.orion.ops.module.infra.entity.dto.tag.TagDTO;
import com.orion.ops.module.infra.enums.*;
@@ -138,9 +136,9 @@ public class AssetAuthorizedDataServiceImpl implements AssetAuthorizedDataServic
// 查询最近连接的主机
Future<List<Long>> latestConnectHostIdList = hostConnectLogService.getLatestConnectHostIdAsync(HostConnectTypeEnum.of(type), userId);
// 查询主机拓展信息
Future<List<Map<Long, String>>> hostExtraResult = dataExtraApi.getExtraItemsValuesByCacheAsync(userId,
Future<Map<Long, String>> labelExtraResult = dataExtraApi.getExtraItemValuesByCacheAsync(userId,
DataExtraTypeEnum.HOST,
Lists.of(DataExtraItems.ALIAS, DataExtraItems.COLOR));
HostExtraItemEnum.LABEL.getItem());
// 查询分组
List<DataGroupDTO> dataGroup = dataGroupApi.getDataGroupList(DataGroupTypeEnum.HOST);
// 查询分组引用
@@ -156,7 +154,7 @@ public class AssetAuthorizedDataServiceImpl implements AssetAuthorizedDataServic
// 设置主机拓展信息
this.getAuthorizedHostExtra(wrapper.getHostList(),
favoriteResult.get(),
hostExtraResult.get());
labelExtraResult.get());
// 设置最近连接的主机
wrapper.setLatestHosts(new LinkedHashSet<>(latestConnectHostIdList.get()));
return wrapper;
@@ -262,13 +260,13 @@ public class AssetAuthorizedDataServiceImpl implements AssetAuthorizedDataServic
/**
* 设置授权主机的额外参数
*
* @param hosts hosts
* @param favorite favorite
* @param extraList extraList
* @param hosts hosts
* @param favorite favorite
* @param labelExtra labelExtra
*/
private void getAuthorizedHostExtra(List<HostVO> hosts,
List<Long> favorite,
List<Map<Long, String>> extraList) {
Map<Long, String> labelExtra) {
if (Lists.isEmpty(hosts)) {
return;
}
@@ -284,25 +282,18 @@ public class AssetAuthorizedDataServiceImpl implements AssetAuthorizedDataServic
for (int i = 0; i < hosts.size(); i++) {
hosts.get(i).setTags(tags.get(i));
}
// 设置主机别名
Map<Long, String> aliasMap = extraList.get(0);
if (!Maps.isEmpty(aliasMap)) {
hosts.forEach(s -> {
String alias = aliasMap.get(s.getId());
if (alias != null) {
s.setAlias(Refs.unrefToString(alias));
}
});
}
// 设置主机颜色
Map<Long, String> colorMap = extraList.get(1);
if (!Maps.isEmpty(colorMap)) {
hosts.forEach(s -> {
HostColorExtraModel color = JSON.parseObject(colorMap.get(s.getId()), HostColorExtraModel.class);
if (color != null) {
s.setColor(color.getColor());
}
});
// 这种主机标签信息
for (HostVO host : hosts) {
String extra = labelExtra.get(host.getId());
if (extra == null) {
continue;
}
HostLabelExtraModel label = HostExtraItemEnum.LABEL.parse(extra);
if (label == null) {
continue;
}
host.setAlias(label.getAlias());
host.setColor(label.getColor());
}
}

View File

@@ -1,20 +1,16 @@
package com.orion.ops.module.asset.service.impl;
import com.orion.lang.function.Functions;
import com.orion.lang.utils.Refs;
import com.orion.lang.utils.collect.Maps;
import com.orion.ops.framework.common.constant.ErrorMessage;
import com.orion.ops.framework.common.handler.data.model.GenericsDataModel;
import com.orion.ops.framework.common.handler.data.strategy.MapDataStrategy;
import com.orion.ops.framework.common.utils.Valid;
import com.orion.ops.framework.security.core.utils.SecurityUtils;
import com.orion.ops.module.asset.entity.request.host.HostAliasUpdateRequest;
import com.orion.ops.module.asset.entity.request.host.HostExtraQueryRequest;
import com.orion.ops.module.asset.entity.request.host.HostExtraUpdateRequest;
import com.orion.ops.module.asset.enums.HostExtraItemEnum;
import com.orion.ops.module.asset.service.HostExtraService;
import com.orion.ops.module.infra.api.DataExtraApi;
import com.orion.ops.module.infra.constant.DataExtraItems;
import com.orion.ops.module.infra.entity.dto.data.DataExtraDTO;
import com.orion.ops.module.infra.entity.dto.data.DataExtraQueryDTO;
import com.orion.ops.module.infra.entity.dto.data.DataExtraSetDTO;
@@ -39,17 +35,6 @@ public class HostExtraServiceImpl implements HostExtraService {
@Resource
private DataExtraApi dataExtraApi;
@Override
public Integer updateHostAlias(HostAliasUpdateRequest request) {
DataExtraSetDTO update = DataExtraSetDTO.builder()
.userId(SecurityUtils.getLoginUserId())
.item(DataExtraItems.ALIAS)
.relId(request.getId())
.value(Refs.json(request.getName()))
.build();
return dataExtraApi.setExtraItem(update, DataExtraTypeEnum.HOST);
}
@Override
public Map<String, Object> getHostExtra(Long hostId, String item) {
HostExtraItemEnum extraItem = Valid.valid(HostExtraItemEnum::of, item);
@@ -110,21 +95,24 @@ public class HostExtraServiceImpl implements HostExtraService {
@Override
public Integer updateHostExtra(HostExtraUpdateRequest request) {
String item = request.getItem();
Long hostId = request.getHostId();
Long userId = SecurityUtils.getLoginUserId();
HostExtraItemEnum extraItem = Valid.valid(HostExtraItemEnum::of, item);
MapDataStrategy<GenericsDataModel> strategy = extraItem.getStrategyBean();
HostExtraItemEnum item = Valid.valid(HostExtraItemEnum::of, request.getItem());
MapDataStrategy<GenericsDataModel> strategy = item.getStrategyBean();
// 查询原始配置
DataExtraQueryDTO query = DataExtraQueryDTO.builder()
.userId(userId)
.relId(hostId)
.item(item)
.item(item.getItem())
.build();
DataExtraDTO beforeExtraItem = dataExtraApi.getExtraItem(query, DataExtraTypeEnum.HOST);
Valid.notNull(beforeExtraItem, ErrorMessage.CONFIG_ABSENT);
GenericsDataModel newExtra = extraItem.parse(request.getExtra());
GenericsDataModel beforeExtra = extraItem.parse(beforeExtraItem.getValue());
if (beforeExtraItem == null) {
// 初始化并查询
this.checkInitItem(item, userId, hostId);
beforeExtraItem = dataExtraApi.getExtraItem(query, DataExtraTypeEnum.HOST);
}
GenericsDataModel newExtra = item.parse(request.getExtra());
GenericsDataModel beforeExtra = item.parse(beforeExtraItem.getValue());
// 更新验证
strategy.doValidChain(beforeExtra, newExtra);
// 更新配置
@@ -134,28 +122,42 @@ public class HostExtraServiceImpl implements HostExtraService {
/**
* 检查配置项并且转为视图 (不存在则初始化默认值)
*
* @param extraItem extraItem
* @param item item
* @param extraValue extraValue
* @param userId userId
* @param hostId hostId
* @return viewMap
*/
private Map<String, Object> checkItemAndToView(HostExtraItemEnum extraItem, String extraValue, Long userId, Long hostId) {
String item = extraItem.getItem();
MapDataStrategy<GenericsDataModel> strategy = extraItem.getStrategyBean();
private Map<String, Object> checkItemAndToView(HostExtraItemEnum item, String extraValue, Long userId, Long hostId) {
MapDataStrategy<GenericsDataModel> strategy = item.getStrategyBean();
if (extraValue == null) {
// 初始化默认数据
extraValue = strategy.getDefault().serial();
// 插入默认值
DataExtraSetDTO set = DataExtraSetDTO.builder()
.userId(userId)
.relId(hostId)
.item(item)
.value(extraValue)
.build();
dataExtraApi.addExtraItem(set, DataExtraTypeEnum.HOST);
extraValue = this.checkInitItem(item, userId, hostId);
}
return strategy.toView(extraValue);
}
/**
* 检查配置项 不存在则初始化默认值
*
* @param item item
* @param userId userId
* @param hostId hostId
* @return defaultValue
*/
private String checkInitItem(HostExtraItemEnum item, Long userId, Long hostId) {
MapDataStrategy<GenericsDataModel> strategy = item.getStrategyBean();
// 初始化默认数据
String extraValue = strategy.getDefault().serial();
// 插入默认值
DataExtraSetDTO set = DataExtraSetDTO.builder()
.userId(userId)
.relId(hostId)
.item(item.getItem())
.value(extraValue)
.build();
dataExtraApi.addExtraItem(set, DataExtraTypeEnum.HOST);
return extraValue;
}
}