diff --git a/src/main/java/neatlogic/module/tenant/api/logger/changeLoggerLevelApi.java b/src/main/java/neatlogic/module/tenant/api/logger/changeLoggerLevelApi.java index 32ac4eef9b99468d0c32c0a39dcf55fabac48c8e..4245027d867bb883da6cf78f012fddb1a551d37a 100644 --- a/src/main/java/neatlogic/module/tenant/api/logger/changeLoggerLevelApi.java +++ b/src/main/java/neatlogic/module/tenant/api/logger/changeLoggerLevelApi.java @@ -18,18 +18,36 @@ package neatlogic.module.tenant.api.logger; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.LoggerContext; +import neatlogic.framework.asynchronization.threadlocal.RequestContext; +import neatlogic.framework.common.config.Config; import neatlogic.framework.common.constvalue.ApiParamType; +import neatlogic.framework.exception.core.ApiRuntimeException; +import neatlogic.framework.exception.server.ServerHostIsBankException; +import neatlogic.framework.exception.server.ServerNotFoundException; +import neatlogic.framework.heartbeat.dao.mapper.ServerMapper; +import neatlogic.framework.heartbeat.dto.ServerClusterVo; +import neatlogic.framework.integration.authentication.enums.AuthenticateType; import neatlogic.framework.restful.annotation.*; import neatlogic.framework.restful.constvalue.OperationTypeEnum; import neatlogic.framework.restful.core.privateapi.PrivateApiComponentBase; import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.util.HttpRequestUtil; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.Objects; + @Component @OperationType(type = OperationTypeEnum.UPDATE) public class changeLoggerLevelApi extends PrivateApiComponentBase { + @Resource + private ServerMapper serverMapper; + @Override public String getToken() { return "logger/updatelevel"; @@ -45,17 +63,55 @@ public class changeLoggerLevelApi extends PrivateApiComponentBase { return null; } - @Input({@Param(name = "level", type = ApiParamType.ENUM, rule = "ALL,TRACE,DEBUG,INFO,WARN,ERROR,OFF", - isRequired = true, desc = "日志级别")}) - @Output({@Param(type = ApiParamType.STRING, desc = "当前日志级别")}) + @Input({ + @Param(name = "serverId", type = ApiParamType.INTEGER, isRequired = true, desc = "term.framework.serverid"), + @Param(name = "level", type = ApiParamType.ENUM, rule = "ALL,TRACE,DEBUG,INFO,WARN,ERROR,OFF", isRequired = true, desc = "日志级别") + }) + @Output({ + @Param(type = ApiParamType.STRING, desc = "当前日志级别") + }) @Description(desc = "修改日志级别接口") @Override - public Object myDoService(JSONObject jsonObj) throws Exception { - String level = jsonObj.getString("level"); - LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory(); - ch.qos.logback.classic.Logger logger = loggerContext.getLogger("neatlogic"); - logger.setLevel(Level.toLevel(level)); - return logger.getLevel().levelStr; + public Object myDoService(JSONObject paramObj) throws Exception { + Integer serverId = paramObj.getInteger("serverId"); + if (Objects.equals(serverId, Config.SCHEDULE_SERVER_ID)) { + String level = paramObj.getString("level"); + LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); + ch.qos.logback.classic.Logger logger = loggerContext.getLogger("neatlogic"); + logger.setLevel(Level.toLevel(level)); + return logger.getLevel().levelStr; + } else { + ServerClusterVo serverClusterVo = serverMapper.getServerByServerId(serverId); + if (serverClusterVo != null) { + String host = serverClusterVo.getHost(); + if (StringUtils.isNotBlank(host)) { + HttpServletRequest request = RequestContext.get().getRequest(); + String url = host + request.getRequestURI(); + HttpRequestUtil httpRequestUtil = HttpRequestUtil.post(url) + .setPayload(paramObj.toJSONString()) + .setAuthType(AuthenticateType.BUILDIN) + .setConnectTimeout(5000) + .setReadTimeout(5000) + .sendRequest(); + String error = httpRequestUtil.getError(); + if (StringUtils.isNotBlank(error)) { + throw new ApiRuntimeException(error); + } + JSONObject resultJson = httpRequestUtil.getResultJson(); + if (MapUtils.isNotEmpty(resultJson)) { + String status = resultJson.getString("Status"); + if (!"OK".equals(status)) { + throw new RuntimeException(resultJson.getString("Message")); + } + return resultJson.getJSONObject("Return"); + } + } else { + throw new ServerHostIsBankException(serverId); + } + } else { + throw new ServerNotFoundException(serverId); + } + return StringUtils.EMPTY; + } } - }