Search in sources :

Example 1 with ParamDefine

use of com.usthe.common.entity.manager.ParamDefine in project hertzbeat by dromara.

the class MonitorServiceImpl method validate.

@Override
@Transactional(readOnly = true)
public void validate(MonitorDto monitorDto, Boolean isModify) throws IllegalArgumentException {
    // The request monitoring parameter matches the monitoring parameter definition mapping check
    // 请求监控参数与监控参数定义映射校验匹配
    Monitor monitor = monitorDto.getMonitor();
    monitor.setHost(monitor.getHost().trim());
    monitor.setName(monitor.getName().trim());
    Map<String, Param> paramMap = monitorDto.getParams().stream().peek(param -> {
        param.setMonitorId(monitor.getId());
        String value = param.getValue() == null ? null : param.getValue().trim();
        param.setValue(value);
    }).collect(Collectors.toMap(Param::getField, param -> param));
    // Check name uniqueness    校验名称唯一性
    if (isModify != null) {
        Optional<Monitor> monitorOptional = monitorDao.findMonitorByNameEquals(monitor.getName());
        if (monitorOptional.isPresent()) {
            Monitor existMonitor = monitorOptional.get();
            if (isModify) {
                if (!existMonitor.getId().equals(monitor.getId())) {
                    throw new IllegalArgumentException("监控名称不能重复!");
                }
            } else {
                throw new IllegalArgumentException("监控名称不能重复!");
            }
        }
    }
    // todo 校验标签
    if (monitor.getTags() != null) {
        monitor.setTags(monitor.getTags().stream().distinct().collect(Collectors.toList()));
    }
    // Parameter definition structure verification  参数定义结构校验
    List<ParamDefine> paramDefines = appService.getAppParamDefines(monitorDto.getMonitor().getApp());
    if (paramDefines != null) {
        for (ParamDefine paramDefine : paramDefines) {
            String field = paramDefine.getField();
            Param param = paramMap.get(field);
            if (paramDefine.isRequired() && (param == null || param.getValue() == null)) {
                throw new IllegalArgumentException("Params field " + field + " is required.");
            }
            if (param != null && param.getValue() != null && !"".equals(param.getValue())) {
                switch(paramDefine.getType()) {
                    case "number":
                        double doubleValue;
                        try {
                            doubleValue = Double.parseDouble(param.getValue());
                        } catch (Exception e) {
                            throw new IllegalArgumentException("Params field " + field + " type " + paramDefine.getType() + " is invalid.");
                        }
                        if (paramDefine.getRange() != null) {
                            if (!IntervalExpressionUtil.validNumberIntervalExpress(doubleValue, paramDefine.getRange())) {
                                throw new IllegalArgumentException("Params field " + field + " type " + paramDefine.getType() + " over range " + paramDefine.getRange());
                            }
                        }
                        param.setType(CommonConstants.PARAM_TYPE_NUMBER);
                        break;
                    case "textarea":
                    case "text":
                        Short limit = paramDefine.getLimit();
                        if (limit != null) {
                            if (param.getValue() != null && param.getValue().length() > limit) {
                                throw new IllegalArgumentException("Params field " + field + " type " + paramDefine.getType() + " over limit " + limit);
                            }
                        }
                        break;
                    case "host":
                        String hostValue = param.getValue();
                        if (!IpDomainUtil.validateIpDomain(hostValue)) {
                            throw new IllegalArgumentException("Params field " + field + " value " + hostValue + " is invalid host value.");
                        }
                        break;
                    case "password":
                        // The plaintext password needs to be encrypted for transmission and storage
                        // 明文密码需加密传输存储
                        String passwordValue = param.getValue();
                        if (!AesUtil.isCiphertext(passwordValue)) {
                            passwordValue = AesUtil.aesEncode(passwordValue);
                            param.setValue(passwordValue);
                        }
                        param.setType(CommonConstants.PARAM_TYPE_PASSWORD);
                        break;
                    case "boolean":
                        // boolean check
                        String booleanValue = param.getValue();
                        try {
                            Boolean.parseBoolean(booleanValue);
                        } catch (Exception e) {
                            throw new IllegalArgumentException("Params field " + field + " value " + booleanValue + " is invalid boolean value.");
                        }
                        break;
                    case "radio":
                        // radio single value check  radio单选值校验
                        List<ParamDefine.Option> options = paramDefine.getOptions();
                        boolean invalid = true;
                        if (options != null) {
                            for (ParamDefine.Option option : options) {
                                if (param.getValue().equalsIgnoreCase(option.getValue())) {
                                    invalid = false;
                                    break;
                                }
                            }
                        }
                        if (invalid) {
                            throw new IllegalArgumentException("Params field " + field + " value " + param.getValue() + " is invalid option value");
                        }
                        break;
                    case "checkbox":
                        // todo checkbox校验
                        break;
                    case "key-value":
                        // todo key-value校验
                        break;
                    // 更多参数定义与实际值格式校验
                    default:
                        throw new IllegalArgumentException("ParamDefine type " + paramDefine.getType() + " is invalid.");
                }
            }
        }
    }
}
Also used : java.util(java.util) CommonConstants(com.usthe.common.util.CommonConstants) MonitorDao(com.usthe.manager.dao.MonitorDao) ParamDefine(com.usthe.common.entity.manager.ParamDefine) MonitorDatabaseException(com.usthe.manager.support.exception.MonitorDatabaseException) Configmap(com.usthe.common.entity.job.Configmap) Autowired(org.springframework.beans.factory.annotation.Autowired) Param(com.usthe.common.entity.manager.Param) IntervalExpressionUtil(com.usthe.common.util.IntervalExpressionUtil) MonitorService(com.usthe.manager.service.MonitorService) Job(com.usthe.common.entity.job.Job) AppCount(com.usthe.manager.pojo.dto.AppCount) Tag(com.usthe.common.entity.manager.Tag) Service(org.springframework.stereotype.Service) MonitorDto(com.usthe.manager.pojo.dto.MonitorDto) CollectRep(com.usthe.common.entity.message.CollectRep) ParamDao(com.usthe.manager.dao.ParamDao) Monitor(com.usthe.common.entity.manager.Monitor) PageRequest(org.springframework.data.domain.PageRequest) Page(org.springframework.data.domain.Page) Collectors(java.util.stream.Collectors) IpDomainUtil(com.usthe.common.util.IpDomainUtil) Slf4j(lombok.extern.slf4j.Slf4j) AlertDefineBindDao(com.usthe.alert.dao.AlertDefineBindDao) SnowFlakeIdGenerator(com.usthe.common.util.SnowFlakeIdGenerator) Specification(org.springframework.data.jpa.domain.Specification) AppService(com.usthe.manager.service.AppService) AesUtil(com.usthe.common.util.AesUtil) CollectJobService(com.usthe.collector.dispatch.entrance.internal.CollectJobService) MonitorDetectException(com.usthe.manager.support.exception.MonitorDetectException) Metrics(com.usthe.common.entity.job.Metrics) Transactional(org.springframework.transaction.annotation.Transactional) MonitorDatabaseException(com.usthe.manager.support.exception.MonitorDatabaseException) MonitorDetectException(com.usthe.manager.support.exception.MonitorDetectException) ParamDefine(com.usthe.common.entity.manager.ParamDefine) Monitor(com.usthe.common.entity.manager.Monitor) Param(com.usthe.common.entity.manager.Param) Transactional(org.springframework.transaction.annotation.Transactional)

Aggregations

AlertDefineBindDao (com.usthe.alert.dao.AlertDefineBindDao)1 CollectJobService (com.usthe.collector.dispatch.entrance.internal.CollectJobService)1 Configmap (com.usthe.common.entity.job.Configmap)1 Job (com.usthe.common.entity.job.Job)1 Metrics (com.usthe.common.entity.job.Metrics)1 Monitor (com.usthe.common.entity.manager.Monitor)1 Param (com.usthe.common.entity.manager.Param)1 ParamDefine (com.usthe.common.entity.manager.ParamDefine)1 Tag (com.usthe.common.entity.manager.Tag)1 CollectRep (com.usthe.common.entity.message.CollectRep)1 AesUtil (com.usthe.common.util.AesUtil)1 CommonConstants (com.usthe.common.util.CommonConstants)1 IntervalExpressionUtil (com.usthe.common.util.IntervalExpressionUtil)1 IpDomainUtil (com.usthe.common.util.IpDomainUtil)1 SnowFlakeIdGenerator (com.usthe.common.util.SnowFlakeIdGenerator)1 MonitorDao (com.usthe.manager.dao.MonitorDao)1 ParamDao (com.usthe.manager.dao.ParamDao)1 AppCount (com.usthe.manager.pojo.dto.AppCount)1 MonitorDto (com.usthe.manager.pojo.dto.MonitorDto)1 AppService (com.usthe.manager.service.AppService)1