finish thread pool config change verify (#776)

* init code for verify module

* init code for verify module

* create application for config modify in thread pool manage

* finish rejectModification

* finish rejectModification

* add todo

* finish threadPoolManage accept

* finish threadPoolManage accept

* finish threadPoolManage config verify

* formatting code

* optimize ConfigModifyVerifyService

* finish config modification verify

* finish config modification verify

* finish webConfig modification verify

* finish webConfig modification verify

* finish webConfig modification verify

* finish threadPoolInstanceConfig modification verify

* finish adapterThreadPoolConfig modification verify

* finish adapterThreadPoolConfig modification verify

* finish adapterThreadPoolConfig modification verify

* optmize ConfigVerifyController

* optmize ConfigVerifyController

* optmize ConfigVerifyController

* fix ConfigModifyVerifyReqDTO

* fix bug

* optimize verifyController

* optimize verifyController

* fix request param

* finish modify application query page

* finish modify application query page

* finish modify application query detail

* finish modify application query detail

* finish thread pool config modification verify module

* optimize accept modification logic

* formatting code

* fix bug

* formatting code

* formatting code

* update sql file

* add annotation

* add annotation and formatting code

* add annotation and formatting code

* remove useless code

* fix sql

Co-authored-by: airoger <czzx201101136>
pull/778/head
shanjianq 2 years ago committed by GitHub
parent fbfdecaef1
commit 656d508b35
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,41 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.common.constant;
public class ConfigModifyTypeConstants {
/**
* Thread pool manager change
*/
public static final int THREAD_POOL_MANAGER = 1;
/**
* Thread pool instance change
*/
public static final int THREAD_POOL_INSTANCE = 2;
/**
* Web thread pool change
*/
public static final int WEB_THREAD_POOL = 3;
/**
* Adapter thread pool change
*/
public static final int ADAPTER_THREAD_POOL = 4;
}

@ -62,6 +62,8 @@ public class Constants {
public static final String LISTENER_PATH = CONFIG_CONTROLLER_PATH + "/listener";
public static final String VERIFY_PATH = CONFIG_CONTROLLER_PATH + "/verify";
public static final String MONITOR_PATH = BASE_PATH + "/monitor";
public static final String REGISTER_ADAPTER_BASE_PATH = BASE_PATH + "/adapter/thread-pool";

@ -0,0 +1,58 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.common.enums;
public enum VerifyEnum {
/**
* unVerify
*/
TO_VERIFY(0, "待审核"),
/**
* accept
*/
VERIFY_ACCEPT(1, "审核通过"),
/**
* reject
*/
VERIFY_REJECT(2, "审核拒绝"),
/**
* invalid
*/
VERIFY_INVALID(3, "失效");
private final Integer verifyStatus;
private final String desc;
VerifyEnum(Integer verifyStatus, String desc) {
this.verifyStatus = verifyStatus;
this.desc = desc;
}
public String getDesc() {
return this.desc;
}
public Integer getVerifyStatus() {
return this.verifyStatus;
}
}

@ -59,6 +59,12 @@
<artifactId>hippo4j-adapter-base</artifactId>
</dependency>
<dependency>
<groupId>cn.hippo4j</groupId>
<artifactId>hippo4j-discovery</artifactId>
<version>${version}</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
@ -79,5 +85,6 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

@ -17,17 +17,22 @@
package cn.hippo4j.config.controller;
import cn.hippo4j.common.constant.ConfigModifyTypeConstants;
import cn.hippo4j.common.constant.Constants;
import cn.hippo4j.common.model.register.DynamicThreadPoolRegisterWrapper;
import cn.hippo4j.common.toolkit.BeanUtil;
import cn.hippo4j.common.toolkit.StringUtil;
import cn.hippo4j.common.toolkit.UserContext;
import cn.hippo4j.common.web.base.Result;
import cn.hippo4j.common.web.base.Results;
import cn.hippo4j.config.model.ConfigAllInfo;
import cn.hippo4j.config.model.ConfigInfoBase;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifySaveReqDTO;
import cn.hippo4j.config.service.ConfigCacheService;
import cn.hippo4j.config.service.ConfigServletInner;
import cn.hippo4j.config.service.biz.ConfigService;
import cn.hippo4j.config.toolkit.Md5ConfigUtil;
import cn.hippo4j.config.verify.ConfigModificationVerifyServiceChoose;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.util.StringUtils;
@ -50,6 +55,8 @@ public class ConfigController {
private final ConfigServletInner configServletInner;
private final ConfigModificationVerifyServiceChoose configModificationVerifyServiceChoose;
@GetMapping
public Result<ConfigInfoBase> detailConfigInfo(@RequestParam("tpId") String tpId,
@RequestParam("itemId") String itemId,
@ -62,7 +69,18 @@ public class ConfigController {
@PostMapping
public Result<Boolean> publishConfig(@RequestParam(value = "identify", required = false) String identify,
@RequestBody ConfigAllInfo config) {
configService.insertOrUpdate(identify, true, config);
if (UserContext.getUserRole().equals("ROLE_ADMIN")) {
configService.insertOrUpdate(identify, true, config);
} else {
ConfigModifySaveReqDTO modifySaveReqDTO = BeanUtil.convert(config, ConfigModifySaveReqDTO.class);
modifySaveReqDTO.setCorePoolSize(config.getCoreSize());
modifySaveReqDTO.setMaximumPoolSize(config.getMaxSize());
modifySaveReqDTO.setModifyUser(UserContext.getUserName());
modifySaveReqDTO.setModifyAll(StringUtil.isEmpty(identify) ? true : false);
modifySaveReqDTO.setIdentify(identify);
modifySaveReqDTO.setType(ConfigModifyTypeConstants.THREAD_POOL_INSTANCE);
configModificationVerifyServiceChoose.choose(modifySaveReqDTO.getType()).saveConfigModifyApplication(modifySaveReqDTO);
}
return Results.success(true);
}

@ -0,0 +1,29 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.mapper;
import cn.hippo4j.config.model.HisConfigVerifyInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* his config verify info mapper
*/
@Mapper
public interface HisConfigVerifyMapper extends BaseMapper<HisConfigVerifyInfo> {
}

@ -0,0 +1,101 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.model;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.util.Date;
/**
* His config verify info
*/
@Data
@TableName("his_config_verify")
public class HisConfigVerifyInfo {
@TableId(type = IdType.AUTO)
private Long id;
/**
* Change type
*/
private Integer type;
/**
* Tenant id
*/
private String tenantId;
/**
* Item id
*/
private String itemId;
/**
* Thread pool id
*/
private String tpId;
/**
* Thread pool mark
*/
private String mark;
/**
* Thread pool instance identify
*/
private String identify;
/**
* Config content
*/
private String content;
/**
* Weather modify all thread pool instances
*/
private Boolean modifyAll = false;
/**
* GmtCreate
*/
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;
/**
* ModifyUserId
*/
private String modifyUser;
/**
* Verify status
*/
private Integer verifyStatus;
/**
* GmtVerify
*/
private Date gmtVerify;
/**
* VerifyUser
*/
private String verifyUser;
}

@ -66,4 +66,9 @@ public class ThreadPoolAdapterReqDTO {
* Client address list
*/
private List<String> clientAddressList;
/**
* weather Modify all instances
*/
private Boolean modifyAll;
}

@ -0,0 +1,97 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.model.biz.threadpool;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
/**
* Config modify query resp
*/
@Data
public class ConfigModificationQueryRespDTO {
/**
* His_config_verify id
*/
private String id;
/**
* Config modify type
*/
private Integer type;
/**
* Thread pool mark
*/
private String mark;
/**
* Tenant id
*/
private String tenantId;
/**
* Item id
*/
private String itemId;
/**
* Thread pool id
*/
private String tpId;
/**
* Thread pool identify
*/
private String identify;
/**
* Weather modify all instances
*/
private Boolean modifyAll;
/**
* Modify user
*/
private String modifyUser;
/**
* Verify status
*/
private Integer verifyStatus;
/**
* GmtCreate
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date gmtCreate;
/**
* GmtVerify
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date gmtVerify;
/**
* Verify user
*/
private String verifyUser;
}

@ -0,0 +1,124 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.model.biz.threadpool;
import lombok.Data;
import javax.validation.constraints.Pattern;
@Data
public class ConfigModifySaveReqDTO {
/**
* Thread pool config change type.
*/
private Integer type;
/**
* Thread pool instance id
*/
private String identify;
/**
* Weather modify all instances
*/
private Boolean modifyAll = false;
/**
* Tenant Id
*/
@Pattern(regexp = "^((?!\\+).)*$", message = "租户、项目、线程池 ID 包含+号")
private String tenantId;
/**
* Thread pool id
*/
@Pattern(regexp = "^((?!\\+).)*$", message = "租户、项目、线程池 ID 包含+号")
private String tpId;
/**
* Item id
*/
@Pattern(regexp = "^((?!\\+).)*$", message = "租户、项目、线程池 ID 包含+号")
private String itemId;
/**
* Thread pool mark
*/
private String mark;
/**
* Core pool size
*/
private Integer corePoolSize;
/**
* Maximum pool size
*/
private Integer maximumPoolSize;
/**
* Queue type
*/
private Integer queueType;
/**
* Capacity
*/
private Integer capacity;
/**
* Keep alive time
*/
private Integer keepAliveTime;
/**
* Execute time out
*/
private Long executeTimeOut;
/**
* Is alarm
*/
private Integer isAlarm;
/**
* Capacity alarm
*/
private Integer capacityAlarm;
/**
* Liveness alarm
*/
private Integer livenessAlarm;
/**
* Rejected type
*/
private Integer rejectedType;
/**
* Allow core thread timeout
*/
private Integer allowCoreThreadTimeOut;
/**
* ModifyUser
*/
private String modifyUser;
}

@ -0,0 +1,138 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.model.biz.threadpool;
import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.Data;
import java.util.List;
/**
* Config modify verify dto
*/
@Data
public class ConfigModifyVerifyReqDTO {
/**
* His config verify id
*/
private String id;
/**
* Config verify type
*/
private Integer type;
/**
* Tenant id
*/
private String tenantId;
/**
* Item id
*/
private String itemId;
/**
* Instance identify
*/
private String identify;
/**
* Adapter thread pool mark
*/
private String mark;
/**
* Adapter thread pool key
*/
private String threadPoolKey;
/**
* Thread pool id
*/
@JsonAlias("threadPoolId")
private String tpId;
/**
* Weather modify all instances
*/
private Boolean modifyAll;
/**
* Weather accept config modification
*/
private Boolean accept;
/**
* Core pool size
*/
private Integer corePoolSize;
/**
* Maximum pool size
*/
private Integer maximumPoolSize;
/**
* Queue type
*/
private Integer queueType;
/**
* Capacity
*/
private Integer capacity;
/**
* Keep alive time
*/
private Integer keepAliveTime;
/**
* Execute time out
*/
private Long executeTimeOut;
/**
* Rejected type
*/
private Integer rejectedType;
/**
* Is alarm
*/
private Integer isAlarm;
/**
* Capacity alarm
*/
private Integer capacityAlarm;
/**
* Liveness alarm
*/
@JsonAlias("activeAlarm")
private Integer livenessAlarm;
/**
* Allow core thread timeout
*/
private Integer allowCoreThreadTimeOut;
}

@ -0,0 +1,45 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.service.biz;
import cn.hippo4j.common.model.ThreadPoolParameterInfo;
import cn.hippo4j.config.model.biz.threadpool.ConfigModificationQueryRespDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolQueryReqDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
/**
* Config modification application query service.
*/
public interface ConfigModificationQueryService {
/**
* Query config modification application page.
*
* @param reqDTO
* @return
*/
IPage<ConfigModificationQueryRespDTO> queryApplicationPage(ThreadPoolQueryReqDTO reqDTO);
/**
* Query config modification detail by application id.
*
* @param id
* @return
*/
ThreadPoolParameterInfo queryApplicationDetail(Long id);
}

@ -0,0 +1,55 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.service.biz;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifySaveReqDTO;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifyVerifyReqDTO;
/**
* Config modification verify service.
*/
public interface ConfigModificationVerifyService {
/**
* Get type.
*
* @return
*/
Integer type();
/**
* Save config change application.
*
* @param reqDTO
*/
void saveConfigModifyApplication(ConfigModifySaveReqDTO reqDTO);
/**
* Reject config modification.
*
* @param reqDTO
*/
void rejectModification(ConfigModifyVerifyReqDTO reqDTO);
/**
* Accept config modification.
*
* @param reqDTO
*/
void acceptModification(ConfigModifyVerifyReqDTO reqDTO);
}

@ -0,0 +1,114 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.service.biz.impl;
import cn.hippo4j.common.enums.VerifyEnum;
import cn.hippo4j.common.model.InstanceInfo;
import cn.hippo4j.common.toolkit.BeanUtil;
import cn.hippo4j.common.toolkit.ConditionUtil;
import cn.hippo4j.common.toolkit.JSONUtil;
import cn.hippo4j.common.toolkit.UserContext;
import cn.hippo4j.config.mapper.HisConfigVerifyMapper;
import cn.hippo4j.config.model.HisConfigVerifyInfo;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifySaveReqDTO;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifyVerifyReqDTO;
import cn.hippo4j.config.service.biz.ConfigModificationVerifyService;
import cn.hippo4j.discovery.core.BaseInstanceRegistry;
import cn.hippo4j.discovery.core.Lease;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Abstract config modification verify service.
*/
public abstract class AbstractConfigModificationVerifyService implements ConfigModificationVerifyService {
@Resource
protected HisConfigVerifyMapper hisConfigVerifyMapper;
@Resource
private BaseInstanceRegistry baseInstanceRegistry;
@Override
public void saveConfigModifyApplication(ConfigModifySaveReqDTO reqDTO) {
HisConfigVerifyInfo hisConfigVerifyInfo = BeanUtil.convert(reqDTO, HisConfigVerifyInfo.class);
hisConfigVerifyInfo.setContent(JSONUtil.toJSONString(reqDTO));
hisConfigVerifyInfo.setVerifyStatus(VerifyEnum.TO_VERIFY.getVerifyStatus());
hisConfigVerifyMapper.insert(hisConfigVerifyInfo);
}
@Override
public void rejectModification(ConfigModifyVerifyReqDTO reqDTO) {
LambdaUpdateWrapper<HisConfigVerifyInfo> updateWrapper = new LambdaUpdateWrapper<HisConfigVerifyInfo>()
.eq(HisConfigVerifyInfo::getId, Long.parseLong(reqDTO.getId()))
.set(HisConfigVerifyInfo::getVerifyStatus, VerifyEnum.VERIFY_REJECT.getVerifyStatus())
.set(HisConfigVerifyInfo::getGmtVerify, new Date())
.set(HisConfigVerifyInfo::getVerifyUser, UserContext.getUserName());
hisConfigVerifyMapper.update(null, updateWrapper);
}
public void acceptModification(ConfigModifyVerifyReqDTO reqDTO) {
updateThreadPoolParameter(reqDTO);
LambdaUpdateWrapper<HisConfigVerifyInfo> updateWrapper = new LambdaUpdateWrapper<HisConfigVerifyInfo>()
.eq(HisConfigVerifyInfo::getId, Long.parseLong(reqDTO.getId()))
.set(HisConfigVerifyInfo::getVerifyStatus, VerifyEnum.VERIFY_ACCEPT.getVerifyStatus())
.set(HisConfigVerifyInfo::getGmtVerify, new Date())
.set(HisConfigVerifyInfo::getVerifyUser, UserContext.getUserName());
hisConfigVerifyMapper.update(null, updateWrapper);
Date gmtVerify = hisConfigVerifyMapper.selectById(reqDTO.getId()).getGmtVerify();
LambdaUpdateWrapper<HisConfigVerifyInfo> invalidUpdateWrapper = new LambdaUpdateWrapper<HisConfigVerifyInfo>()
.eq(HisConfigVerifyInfo::getType, reqDTO.getType())
.eq(reqDTO.getTenantId() != null, HisConfigVerifyInfo::getTenantId, reqDTO.getTenantId())
.eq(reqDTO.getItemId() != null, HisConfigVerifyInfo::getItemId, reqDTO.getItemId())
.eq(reqDTO.getTpId() != null, HisConfigVerifyInfo::getTpId, reqDTO.getTpId())
.and(reqDTO.getIdentify() != null, wrapper -> wrapper.eq(HisConfigVerifyInfo::getIdentify, reqDTO.getIdentify()).or().eq(HisConfigVerifyInfo::getModifyAll, true))
.lt(HisConfigVerifyInfo::getGmtVerify, gmtVerify)
.set(HisConfigVerifyInfo::getVerifyStatus, VerifyEnum.VERIFY_INVALID.getVerifyStatus());
hisConfigVerifyMapper.update(null, invalidUpdateWrapper);
}
/**
* Get client address.
*
* @param reqDTO
* @return
*/
protected List<String> getClientAddress(ConfigModifyVerifyReqDTO reqDTO) {
List<String> clientAddressList = new ArrayList<>();
List<Lease<InstanceInfo>> leases = baseInstanceRegistry.listInstance(reqDTO.getItemId());
ConditionUtil
.condition(reqDTO.getModifyAll(),
() -> leases.forEach(lease -> clientAddressList.add(lease.getHolder().getCallBackUrl())),
() -> clientAddressList.add(
leases.stream()
.filter(lease -> lease.getHolder().getIdentify().equals(reqDTO.getIdentify())).findAny().orElseThrow(() -> new RuntimeException("该线程池实例不存在")).getHolder()
.getCallBackUrl()));
return clientAddressList;
}
/**
* Update thread pool parameter.
*
* @param reqDTO
*/
protected abstract void updateThreadPoolParameter(ConfigModifyVerifyReqDTO reqDTO);
}

@ -0,0 +1,52 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.service.biz.impl;
import cn.hippo4j.common.constant.ConfigModifyTypeConstants;
import cn.hippo4j.common.toolkit.JSONUtil;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifyVerifyReqDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
/**
* Adapter thread pool config modification verify service impl.
*/
@Slf4j
@Service
public class AdapterThreadPoolConfigModificationVerifyServiceImpl extends AbstractConfigModificationVerifyService {
private final RestTemplate restTemplate = new RestTemplate();
@Override
public Integer type() {
return ConfigModifyTypeConstants.ADAPTER_THREAD_POOL;
}
@Override
protected void updateThreadPoolParameter(ConfigModifyVerifyReqDTO reqDTO) {
for (String each : getClientAddress(reqDTO)) {
String urlString = new StringBuilder()
.append("http://")
.append(each)
.append("/adapter/thread-pool/update")
.toString();
restTemplate.postForObject(urlString, JSONUtil.toJSONString(reqDTO), Object.class);
}
}
}

@ -0,0 +1,62 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.service.biz.impl;
import cn.hippo4j.common.model.ThreadPoolParameterInfo;
import cn.hippo4j.common.toolkit.BeanUtil;
import cn.hippo4j.common.toolkit.JSONUtil;
import cn.hippo4j.config.mapper.HisConfigVerifyMapper;
import cn.hippo4j.config.model.HisConfigVerifyInfo;
import cn.hippo4j.config.model.biz.threadpool.ConfigModificationQueryRespDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolQueryReqDTO;
import cn.hippo4j.config.service.biz.ConfigModificationQueryService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* Config modification query service impl
*/
@Service
public class ConfigModificationQueryServiceImpl implements ConfigModificationQueryService {
@Resource
private HisConfigVerifyMapper hisConfigVerifyMapper;
@Override
public IPage<ConfigModificationQueryRespDTO> queryApplicationPage(ThreadPoolQueryReqDTO reqDTO) {
LambdaQueryWrapper<HisConfigVerifyInfo> wrapper = Wrappers.lambdaQuery(HisConfigVerifyInfo.class)
.eq(!StringUtils.isBlank(reqDTO.getTenantId()), HisConfigVerifyInfo::getTenantId, reqDTO.getTenantId())
.eq(!StringUtils.isBlank(reqDTO.getItemId()), HisConfigVerifyInfo::getItemId, reqDTO.getItemId())
.orderByDesc(HisConfigVerifyInfo::getGmtCreate);
return hisConfigVerifyMapper.selectPage(reqDTO, wrapper).convert(each -> BeanUtil.convert(each, ConfigModificationQueryRespDTO.class));
}
@Override
public ThreadPoolParameterInfo queryApplicationDetail(Long id) {
HisConfigVerifyInfo hisConfigVerifyInfo = hisConfigVerifyMapper.selectById(id);
ThreadPoolParameterInfo poolParameterInfo = JSONUtil.parseObject(hisConfigVerifyInfo.getContent(), ThreadPoolParameterInfo.class);
poolParameterInfo.setCorePoolSize(poolParameterInfo.corePoolSizeAdapt());
poolParameterInfo.setMaximumPoolSize(poolParameterInfo.maximumPoolSizeAdapt());
return poolParameterInfo;
}
}

@ -0,0 +1,53 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.service.biz.impl;
import cn.hippo4j.common.constant.ConfigModifyTypeConstants;
import cn.hippo4j.common.toolkit.BeanUtil;
import cn.hippo4j.config.model.ConfigAllInfo;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifyVerifyReqDTO;
import cn.hippo4j.config.service.biz.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* Thread pool instance config modification verify service impl.
*/
@Slf4j
@Service
public class ThreadPoolInstanceConfigModificationVerifyServiceImpl extends AbstractConfigModificationVerifyService {
@Resource
private ConfigService configService;
@Override
public Integer type() {
return ConfigModifyTypeConstants.THREAD_POOL_INSTANCE;
}
@Override
protected void updateThreadPoolParameter(ConfigModifyVerifyReqDTO reqDTO) {
ConfigAllInfo config = BeanUtil.convert(reqDTO, ConfigAllInfo.class);
config.setCoreSize(reqDTO.getCorePoolSize());
config.setMaxSize(reqDTO.getMaximumPoolSize());
configService.insertOrUpdate(reqDTO.getIdentify(), true, config);
}
}

@ -0,0 +1,53 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.service.biz.impl;
import cn.hippo4j.common.constant.ConfigModifyTypeConstants;
import cn.hippo4j.common.toolkit.BeanUtil;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifyVerifyReqDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolSaveOrUpdateReqDTO;
import cn.hippo4j.config.service.biz.ThreadPoolService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* Thread pool manager config modification verify service impl.
*/
@Slf4j
@Service
public class ThreadPoolManageConfigModificationVerifyServiceImpl extends AbstractConfigModificationVerifyService {
@Resource
private ThreadPoolService threadPoolService;
@Override
public Integer type() {
return ConfigModifyTypeConstants.THREAD_POOL_MANAGER;
}
@Override
public void updateThreadPoolParameter(ConfigModifyVerifyReqDTO reqDTO) {
ThreadPoolSaveOrUpdateReqDTO saveOrUpdateReqDTO = BeanUtil.convert(reqDTO, ThreadPoolSaveOrUpdateReqDTO.class);
saveOrUpdateReqDTO.setCoreSize(reqDTO.getCorePoolSize());
saveOrUpdateReqDTO.setMaxSize(reqDTO.getMaximumPoolSize());
threadPoolService.saveOrUpdateThreadPoolConfig(null, saveOrUpdateReqDTO);
}
}

@ -17,20 +17,19 @@
package cn.hippo4j.config.service.biz.impl;
import cn.hippo4j.common.constant.ConfigModifyTypeConstants;
import cn.hippo4j.common.enums.DelEnum;
import cn.hippo4j.common.toolkit.BeanUtil;
import cn.hippo4j.common.toolkit.JSONUtil;
import cn.hippo4j.common.toolkit.UserContext;
import cn.hippo4j.config.mapper.ConfigInfoMapper;
import cn.hippo4j.config.model.ConfigAllInfo;
import cn.hippo4j.config.model.LogRecordInfo;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolDelReqDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolQueryReqDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolRespDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolSaveOrUpdateReqDTO;
import cn.hippo4j.config.model.biz.threadpool.*;
import cn.hippo4j.config.service.biz.ConfigService;
import cn.hippo4j.config.service.biz.OperationLogService;
import cn.hippo4j.config.service.biz.ThreadPoolService;
import cn.hippo4j.common.toolkit.BeanUtil;
import cn.hippo4j.config.verify.ConfigModificationVerifyServiceChoose;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@ -55,6 +54,8 @@ public class ThreadPoolServiceImpl implements ThreadPoolService {
private final OperationLogService operationLogService;
private final ConfigModificationVerifyServiceChoose configModificationVerifyServiceChoose;
@Override
public IPage<ThreadPoolRespDTO> queryThreadPoolPage(ThreadPoolQueryReqDTO reqDTO) {
LambdaQueryWrapper<ConfigAllInfo> wrapper = Wrappers.lambdaQuery(ConfigAllInfo.class)
@ -82,10 +83,22 @@ public class ThreadPoolServiceImpl implements ThreadPoolService {
@Override
public void saveOrUpdateThreadPoolConfig(String identify, ThreadPoolSaveOrUpdateReqDTO reqDTO) {
ConfigAllInfo configAllInfo = BeanUtil.convert(reqDTO, ConfigAllInfo.class);
Long executeTimeOut = Objects.equals(configAllInfo.getExecuteTimeOut(), 0L) ? null : configAllInfo.getExecuteTimeOut();
configAllInfo.setExecuteTimeOut(executeTimeOut);
configService.insertOrUpdate(identify, false, configAllInfo);
// TODO to optimize the Role of judgment
if (UserContext.getUserRole().equals("ROLE_ADMIN")) {
ConfigAllInfo configAllInfo = BeanUtil.convert(reqDTO, ConfigAllInfo.class);
Long executeTimeOut = Objects.equals(configAllInfo.getExecuteTimeOut(), 0L) ? null : configAllInfo.getExecuteTimeOut();
configAllInfo.setExecuteTimeOut(executeTimeOut);
configService.insertOrUpdate(identify, false, configAllInfo);
} else {
ConfigModifySaveReqDTO modifySaveReqDTO = BeanUtil.convert(reqDTO, ConfigModifySaveReqDTO.class);
modifySaveReqDTO.setCorePoolSize(reqDTO.getCoreSize());
modifySaveReqDTO.setMaximumPoolSize(reqDTO.getMaxSize());
modifySaveReqDTO.setModifyUser(UserContext.getUserName());
modifySaveReqDTO.setModifyAll(false);
modifySaveReqDTO.setType(ConfigModifyTypeConstants.THREAD_POOL_MANAGER);
configModificationVerifyServiceChoose.choose(modifySaveReqDTO.getType()).saveConfigModifyApplication(modifySaveReqDTO);
}
}
@Override

@ -0,0 +1,52 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.service.biz.impl;
import cn.hippo4j.common.constant.ConfigModifyTypeConstants;
import cn.hippo4j.common.toolkit.JSONUtil;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifyVerifyReqDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
/**
* Web thread pool config modification verify service impl.
*/
@Slf4j
@Service
public class WebThreadPoolConfigModificationVerifyServiceImpl extends AbstractConfigModificationVerifyService {
private final RestTemplate restTemplate = new RestTemplate();
@Override
public Integer type() {
return ConfigModifyTypeConstants.WEB_THREAD_POOL;
}
@Override
protected void updateThreadPoolParameter(ConfigModifyVerifyReqDTO reqDTO) {
for (String each : getClientAddress(reqDTO)) {
String urlString = new StringBuilder()
.append("http://")
.append(each)
.append("/web/update/pool")
.toString();
restTemplate.postForObject(urlString, JSONUtil.toJSONString(reqDTO), Object.class);
}
}
}

@ -0,0 +1,57 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.config.verify;
import cn.hippo4j.common.config.ApplicationContextHolder;
import cn.hippo4j.common.constant.ConfigModifyTypeConstants;
import cn.hippo4j.config.service.biz.ConfigModificationVerifyService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* Config change verify service choose
*/
@Component
public class ConfigModificationVerifyServiceChoose implements CommandLineRunner {
/**
* Storage config change verify service container.
*/
private Map<Integer, ConfigModificationVerifyService> configChangeVerifyServiceChooseMap = new HashMap<>();
/**
* Choose by type.
*
* @param type {@link ConfigModifyTypeConstants}
* @return
*/
public ConfigModificationVerifyService choose(Integer type) {
ConfigModificationVerifyService verifyService = configChangeVerifyServiceChooseMap.get(type);
return verifyService;
}
@Override
public void run(String... args) throws Exception {
Map<String, ConfigModificationVerifyService> configChangeVerifyServiceMap =
ApplicationContextHolder.getBeansOfType(ConfigModificationVerifyService.class);
configChangeVerifyServiceMap.values().forEach(each -> configChangeVerifyServiceChooseMap.put(each.type(), each));
}
}

@ -0,0 +1,64 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package cn.hippo4j.console.controller;
import cn.hippo4j.common.constant.Constants;
import cn.hippo4j.common.model.ThreadPoolParameterInfo;
import cn.hippo4j.common.toolkit.ConditionUtil;
import cn.hippo4j.common.web.base.Result;
import cn.hippo4j.common.web.base.Results;
import cn.hippo4j.config.model.biz.threadpool.ConfigModificationQueryRespDTO;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifyVerifyReqDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolQueryReqDTO;
import cn.hippo4j.config.service.biz.ConfigModificationQueryService;
import cn.hippo4j.config.service.biz.ConfigModificationVerifyService;
import cn.hippo4j.config.verify.ConfigModificationVerifyServiceChoose;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
@RestController
@AllArgsConstructor
@RequestMapping(Constants.VERIFY_PATH)
public class ConfigVerifyController {
private final ConfigModificationVerifyServiceChoose serviceChoose;
private final ConfigModificationQueryService queryService;
@PostMapping
public Result<Void> verifyConfigModification(@RequestBody ConfigModifyVerifyReqDTO reqDTO) {
ConfigModificationVerifyService modifyVerifyService = serviceChoose.choose(reqDTO.getType());
ConditionUtil
.condition(reqDTO.getAccept(),
() -> modifyVerifyService.acceptModification(reqDTO),
() -> modifyVerifyService.rejectModification(reqDTO));
return Results.success();
}
@PostMapping("/query/application/page")
public Result<IPage<ConfigModificationQueryRespDTO>> modificationApplicationPage(@RequestBody ThreadPoolQueryReqDTO reqDTO) {
return Results.success(queryService.queryApplicationPage(reqDTO));
}
@GetMapping("/query/application/detail")
public Result<ThreadPoolParameterInfo> modificationApplicationDetail(@RequestParam("id") String id) {
return Results.success(queryService.queryApplicationDetail(Long.parseLong(id)));
}
}

@ -17,12 +17,17 @@
package cn.hippo4j.console.controller;
import cn.hippo4j.common.constant.ConfigModifyTypeConstants;
import cn.hippo4j.common.toolkit.BeanUtil;
import cn.hippo4j.common.toolkit.JSONUtil;
import cn.hippo4j.common.toolkit.UserContext;
import cn.hippo4j.common.web.base.Result;
import cn.hippo4j.common.web.base.Results;
import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterReqDTO;
import cn.hippo4j.config.model.biz.adapter.ThreadPoolAdapterRespDTO;
import cn.hippo4j.config.model.biz.threadpool.ConfigModifySaveReqDTO;
import cn.hippo4j.config.service.ThreadPoolAdapterService;
import cn.hippo4j.config.verify.ConfigModificationVerifyServiceChoose;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@ -30,11 +35,9 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import static cn.hippo4j.common.constant.Constants.HTTP_EXECUTE_TIMEOUT;
import static cn.hippo4j.common.constant.Constants.REGISTER_ADAPTER_BASE_PATH;
/**
@ -46,6 +49,8 @@ public class ThreadPoolAdapterController {
private final ThreadPoolAdapterService threadPoolAdapterService;
private final ConfigModificationVerifyServiceChoose configModificationVerifyServiceChoose;
private final RestTemplate restTemplate = new RestTemplate();
@GetMapping(REGISTER_ADAPTER_BASE_PATH + "/query")
@ -62,13 +67,23 @@ public class ThreadPoolAdapterController {
@PostMapping(REGISTER_ADAPTER_BASE_PATH + "/update")
public Result<Void> updateAdapterThreadPool(@RequestBody ThreadPoolAdapterReqDTO requestParameter) {
for (String each : requestParameter.getClientAddressList()) {
String urlString = new StringBuilder()
.append("http://")
.append(each)
.append("/adapter/thread-pool/update")
.toString();
restTemplate.postForObject(urlString, JSONUtil.toJSONString(requestParameter), Object.class);
if (UserContext.getUserRole().equals("ROLE_ADMIN")) {
for (String each : requestParameter.getClientAddressList()) {
String urlString = new StringBuilder()
.append("http://")
.append(each)
.append("/adapter/thread-pool/update")
.toString();
restTemplate.postForObject(urlString, JSONUtil.toJSONString(requestParameter), Object.class);
}
} else {
ConfigModifySaveReqDTO modifySaveReqDTO = BeanUtil.convert(requestParameter, ConfigModifySaveReqDTO.class);
modifySaveReqDTO.setModifyUser(UserContext.getUserName());
modifySaveReqDTO.setTenantId(requestParameter.getTenant());
modifySaveReqDTO.setItemId(requestParameter.getItem());
modifySaveReqDTO.setTpId(requestParameter.getThreadPoolKey());
modifySaveReqDTO.setType(ConfigModifyTypeConstants.ADAPTER_THREAD_POOL);
configModificationVerifyServiceChoose.choose(modifySaveReqDTO.getType()).saveConfigModifyApplication(modifySaveReqDTO);
}
return Results.success();
}

@ -17,22 +17,18 @@
package cn.hippo4j.console.controller;
import cn.hippo4j.common.constant.ConfigModifyTypeConstants;
import cn.hippo4j.common.constant.Constants;
import cn.hippo4j.common.model.InstanceInfo;
import cn.hippo4j.common.toolkit.CollectionUtil;
import cn.hippo4j.common.toolkit.JSONUtil;
import cn.hippo4j.common.toolkit.StringUtil;
import cn.hippo4j.common.toolkit.*;
import cn.hippo4j.common.web.base.Result;
import cn.hippo4j.common.web.base.Results;
import cn.hippo4j.common.web.exception.ErrorCodeEnum;
import cn.hippo4j.config.model.CacheItem;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolDelReqDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolQueryReqDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolRespDTO;
import cn.hippo4j.config.model.biz.threadpool.ThreadPoolSaveOrUpdateReqDTO;
import cn.hippo4j.config.model.biz.threadpool.*;
import cn.hippo4j.config.service.ConfigCacheService;
import cn.hippo4j.config.service.biz.ThreadPoolService;
import cn.hippo4j.common.toolkit.BeanUtil;
import cn.hippo4j.config.verify.ConfigModificationVerifyServiceChoose;
import cn.hippo4j.console.model.ThreadPoolInstanceInfo;
import cn.hippo4j.console.model.WebThreadPoolReqDTO;
import cn.hippo4j.console.model.WebThreadPoolRespDTO;
@ -44,13 +40,12 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.hippo4j.common.constant.Constants.HTTP_EXECUTE_TIMEOUT;
import static cn.hippo4j.common.toolkit.ContentUtil.getGroupKey;
/**
@ -65,6 +60,8 @@ public class ThreadPoolController {
private final BaseInstanceRegistry baseInstanceRegistry;
private final ConfigModificationVerifyServiceChoose configModificationVerifyServiceChoose;
private final RestTemplate restTemplate = new RestTemplate();
@PostMapping("/query/page")
@ -157,6 +154,8 @@ public class ThreadPoolController {
continue;
}
WebThreadPoolRespDTO result = BeanUtil.convert(data, WebThreadPoolRespDTO.class);
result.setItemId(itemId);
result.setTenantId(each.getHolder().getGroupKey().split("[+]")[1]);
result.setActive(each.getHolder().getActive());
result.setIdentify(each.getHolder().getIdentify());
result.setClientAddress(each.getHolder().getCallBackUrl());
@ -191,13 +190,20 @@ public class ThreadPoolController {
@PostMapping("/web/update/pool")
public Result<Void> updateWebThreadPool(@RequestBody WebThreadPoolReqDTO requestParam) {
for (String each : requestParam.getClientAddressList()) {
String urlString = new StringBuilder()
.append("http://")
.append(each)
.append("/web/update/pool")
.toString();
restTemplate.postForObject(urlString, JSONUtil.toJSONString(requestParam), Object.class);
if (UserContext.getUserRole().equals("ROLE_ADMIN")) {
for (String each : requestParam.getClientAddressList()) {
String urlString = new StringBuilder()
.append("http://")
.append(each)
.append("/web/update/pool")
.toString();
restTemplate.postForObject(urlString, JSONUtil.toJSONString(requestParam), Object.class);
}
} else {
ConfigModifySaveReqDTO modifySaveReqDTO = BeanUtil.convert(requestParam, ConfigModifySaveReqDTO.class);
modifySaveReqDTO.setModifyUser(UserContext.getUserName());
modifySaveReqDTO.setType(ConfigModifyTypeConstants.WEB_THREAD_POOL);
configModificationVerifyServiceChoose.choose(modifySaveReqDTO.getType()).saveConfigModifyApplication(modifySaveReqDTO);
}
return Results.success();
}
@ -215,9 +221,9 @@ public class ThreadPoolController {
String groupKey = getGroupKey(tpId, itemTenantKey);
Map<String, CacheItem> content = ConfigCacheService.getContent(groupKey);
Map<String, String> activeMap =
leases.stream().map(Lease::getHolder).filter(each -> StringUtil.isNotBlank(each.getActive()))
leases.stream().map(each -> each.getHolder()).filter(each -> StringUtil.isNotBlank(each.getActive()))
.collect(Collectors.toMap(InstanceInfo::getIdentify, InstanceInfo::getActive));
Map<String, String> clientBasePathMap = leases.stream().map(Lease::getHolder)
Map<String, String> clientBasePathMap = leases.stream().map(each -> each.getHolder())
.filter(each -> StringUtil.isNotBlank(each.getClientBasePath()))
.collect(Collectors.toMap(InstanceInfo::getIdentify, InstanceInfo::getClientBasePath));
List<ThreadPoolInstanceInfo> returnThreadPool = new ArrayList<>();
@ -232,4 +238,5 @@ public class ThreadPoolController {
});
return Results.success(returnThreadPool);
}
}

@ -27,6 +27,21 @@ import java.util.List;
@Data
public class WebThreadPoolReqDTO {
/**
* Thread-pool id
*/
private String tenantId;
/**
* Item id
*/
private String itemId;
/**
* thread pool instance id
*/
private String identify;
/**
* Core pool size
*/
@ -42,6 +57,11 @@ public class WebThreadPoolReqDTO {
*/
private Integer keepAliveTime;
/**
* weather modify all instances
*/
private Boolean modifyAll;
/**
* Client address list
*/

@ -25,6 +25,16 @@ import lombok.Data;
@Data
public class WebThreadPoolRespDTO {
/**
* thread pool tenant id
*/
private String tenantId;
/**
* item id
*/
private String itemId;
/**
* Active
*/

@ -208,6 +208,29 @@ CREATE TABLE `notify` (
UNIQUE KEY `uk_notify_biz_key` (`tenant_id`,`item_id`,`tp_id`,`platform`,`type`,`del_flag`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='通知表';
-- ----------------------------
-- Table structure for his_config_verify
-- ----------------------------
DROP TABLE IF EXISTS `his_config_verify`;
CREATE TABLE `his_config_verify` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`type` int NULL DEFAULT NULL COMMENT '变更类型',
`mark` varchar(128) DEFAULT NULL COMMENT '框架线程池类型',
`tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID',
`item_id` varchar(128) DEFAULT NULL COMMENT '项目ID',
`tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID',
`identify` varchar(64) DEFAULT NULL COMMENT '线程池唯一标识',
`content` longtext NULL COMMENT '参数变更内容',
`modify_all` tinyint(1) NULL DEFAULT NULL COMMENT '是否全部修改',
`gmt_create` datetime NULL DEFAULT NULL COMMENT '参数变更时间',
`modify_user` varchar(128) DEFAULT NULL COMMENT '修改人',
`verify_status` tinyint(1) NULL DEFAULT NULL COMMENT '审核状态 0:待审核 1审核通过 2审核拒绝',
`gmt_verify` datetime NULL DEFAULT NULL COMMENT '审核时间',
`verify_user` varchar(128) DEFAULT NULL COMMENT '审核人',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET=utf8mb4 COMMENT = '参数变更审核记录表';
/* Init SQL */
INSERT IGNORE INTO `tenant` (`id`, `tenant_id`, `tenant_name`, `tenant_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', '处方组', '负责维护处方服务, 包括不限于电子处方等业务', '谢良辰', '2021-10-24 13:42:11', '2021-10-24 13:42:11', '0');

@ -15,3 +15,23 @@ ALTER TABLE inst_config Modify COLUMN tp_id varchar(256) COMMENT '线程池ID';
ALTER TABLE his_run_data Modify COLUMN tp_id varchar(256) COMMENT '线程池ID';
ALTER TABLE notify Modify COLUMN tp_id varchar(256) COMMENT '线程池ID';
DROP TABLE IF EXISTS `his_config_verify`;
CREATE TABLE `his_config_verify` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`type` int NULL DEFAULT NULL COMMENT '变更类型',
`mark` varchar(128) DEFAULT NULL COMMENT '框架线程池类型',
`tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID',
`item_id` varchar(128) DEFAULT NULL COMMENT '项目ID',
`tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID',
`identify` varchar(64) DEFAULT NULL COMMENT '线程池唯一标识',
`content` longtext DEFAULT NULL COMMENT '参数变更内容',
`modify_all` tinyint(1) NULL DEFAULT NULL COMMENT '是否全部修改',
`gmt_create` datetime NULL DEFAULT NULL COMMENT '参数变更时间',
`modify_user` varchar(128) DEFAULT NULL COMMENT '修改人',
`verify_status` tinyint(1) NULL DEFAULT NULL COMMENT '审核状态 0:待审核 1审核通过 2审核拒绝',
`gmt_verify` datetime NULL DEFAULT NULL COMMENT '审核时间',
`verify_user` varchar(128) DEFAULT NULL COMMENT '审核人',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET=utf8mb4 COMMENT = '参数变更审核记录表';

@ -144,6 +144,24 @@ CREATE TABLE IF NOT EXISTS `notify` (
PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `his_config_verify` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`type` int NULL DEFAULT NULL COMMENT '变更类型',
`mark` varchar(128) DEFAULT NULL COMMENT '框架线程池类型',
`tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID',
`item_id` varchar(128) DEFAULT NULL COMMENT '项目ID',
`tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID',
`identify` varchar(64) DEFAULT NULL COMMENT '线程池唯一标识',
`content` longtext COMMENT '参数变更内容',
`modify_all` tinyint(1) COMMENT '是否全部修改',
`gmt_create` datetime COMMENT '参数变更时间',
`modify_user` varchar(128) DEFAULT NULL COMMENT '修改人',
`verify_status` tinyint(1) COMMENT '审核状态 0:待审核 1审核通过 2审核拒绝',
`gmt_verify` datetime COMMENT '审核时间',
`verify_user` varchar(128) DEFAULT NULL COMMENT '审核人',
PRIMARY KEY (`id`) USING BTREE
);
INSERT INTO `tenant` (`id`, `tenant_id`, `tenant_name`, `tenant_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', '处方组', '负责维护处方服务, 包括不限于电子处方等业务', '谢良辰', '2021-10-24 13:42:11', '2021-10-24 13:42:11', '0');
INSERT INTO `item` (`id`, `tenant_id`, `item_id`, `item_name`, `item_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', 'dynamic-threadpool-example', '动态线程池示例项目', '动态线程池示例项目,对应 Hippo 项目的 example 模块', '马称', '2021-10-24 16:11:00', '2021-10-24 16:11:00', '0');

@ -198,6 +198,28 @@ CREATE TABLE IF NOT EXISTS `notify` (
UNIQUE KEY `uk_notify_biz_key` (`tenant_id`,`item_id`,`tp_id`,`platform`,`type`,`del_flag`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='通知表';
-- ----------------------------
-- Table structure for his_config_verify
-- ----------------------------
DROP TABLE IF EXISTS `his_config_verify`;
CREATE TABLE `his_config_verify` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`type` int NULL DEFAULT NULL COMMENT '变更类型',
`mark` varchar(128) DEFAULT NULL COMMENT '框架线程池类型',
`tenant_id` varchar(128) DEFAULT NULL COMMENT '租户ID',
`item_id` varchar(128) DEFAULT NULL COMMENT '项目ID',
`tp_id` varchar(256) DEFAULT NULL COMMENT '线程池ID',
`identify` varchar(64) DEFAULT NULL COMMENT '线程池唯一标识',
`content` longtext NULL COMMENT '参数变更内容',
`modify_all` tinyint(1) NULL DEFAULT NULL COMMENT '是否全部修改',
`gmt_create` datetime NULL DEFAULT NULL COMMENT '参数变更时间',
`modify_user` varchar(128) DEFAULT NULL COMMENT '修改人',
`verify_status` tinyint(1) NULL DEFAULT NULL COMMENT '审核状态 0:待审核 1审核通过 2审核拒绝',
`gmt_verify` datetime NULL DEFAULT NULL COMMENT '审核时间',
`verify_user` varchar(128) DEFAULT NULL COMMENT '审核人',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET=utf8mb4 COMMENT = '参数变更审核记录表';
/* Init SQL */
INSERT IGNORE INTO `tenant` (`id`, `tenant_id`, `tenant_name`, `tenant_desc`, `owner`, `gmt_create`, `gmt_modified`, `del_flag`) VALUES ('1', 'prescription', '处方组', '负责维护处方服务, 包括不限于电子处方等业务', '谢良辰', '2021-10-24 13:42:11', '2021-10-24 13:42:11', '0');

Loading…
Cancel
Save