Search in sources :

Example 1 with MonitorDto

use of com.usthe.manager.pojo.dto.MonitorDto 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)

Example 2 with MonitorDto

use of com.usthe.manager.pojo.dto.MonitorDto in project hertzbeat by dromara.

the class MonitorServiceImpl method getMonitorDto.

@Override
@Transactional(readOnly = true)
public MonitorDto getMonitorDto(long id) throws RuntimeException {
    Optional<Monitor> monitorOptional = monitorDao.findById(id);
    if (monitorOptional.isPresent()) {
        Monitor monitor = monitorOptional.get();
        MonitorDto monitorDto = new MonitorDto();
        monitorDto.setMonitor(monitor);
        List<Param> params = paramDao.findParamsByMonitorId(id);
        monitorDto.setParams(params);
        Job job = appService.getAppDefine(monitor.getApp());
        List<String> metrics = job.getMetrics().stream().map(Metrics::getName).collect(Collectors.toList());
        monitorDto.setMetrics(metrics);
        return monitorDto;
    } else {
        return null;
    }
}
Also used : MonitorDto(com.usthe.manager.pojo.dto.MonitorDto) Monitor(com.usthe.common.entity.manager.Monitor) Param(com.usthe.common.entity.manager.Param) Job(com.usthe.common.entity.job.Job) Transactional(org.springframework.transaction.annotation.Transactional)

Example 3 with MonitorDto

use of com.usthe.manager.pojo.dto.MonitorDto in project hertzbeat by dromara.

the class MonitorController method getMonitor.

@GetMapping(path = "/{id}")
@ApiOperation(value = "Obtain monitoring information based on monitoring ID", notes = "根据监控ID获取监控信息")
public ResponseEntity<Message<MonitorDto>> getMonitor(@ApiParam(value = "监控ID", example = "6565463543") @PathVariable("id") final long id) {
    // Get monitoring information
    // 获取监控信息
    MonitorDto monitorDto = monitorService.getMonitorDto(id);
    Message.MessageBuilder<MonitorDto> messageBuilder = Message.builder();
    if (monitorDto == null) {
        messageBuilder.code(MONITOR_NOT_EXIST_CODE).msg("Monitor not exist.");
    } else {
        messageBuilder.data(monitorDto);
    }
    return ResponseEntity.ok(messageBuilder.build());
}
Also used : MonitorDto(com.usthe.manager.pojo.dto.MonitorDto) Message(com.usthe.common.entity.dto.Message) GetMapping(org.springframework.web.bind.annotation.GetMapping) ApiOperation(io.swagger.annotations.ApiOperation)

Aggregations

MonitorDto (com.usthe.manager.pojo.dto.MonitorDto)3 Job (com.usthe.common.entity.job.Job)2 Monitor (com.usthe.common.entity.manager.Monitor)2 Param (com.usthe.common.entity.manager.Param)2 Transactional (org.springframework.transaction.annotation.Transactional)2 AlertDefineBindDao (com.usthe.alert.dao.AlertDefineBindDao)1 CollectJobService (com.usthe.collector.dispatch.entrance.internal.CollectJobService)1 Message (com.usthe.common.entity.dto.Message)1 Configmap (com.usthe.common.entity.job.Configmap)1 Metrics (com.usthe.common.entity.job.Metrics)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