diff --git a/others/script/jenkins_auto_build.sh b/others/script/jenkins_auto_build.sh index b92b074c..4bf807a0 100755 --- a/others/script/jenkins_auto_build.sh +++ b/others/script/jenkins_auto_build.sh @@ -1,32 +1,31 @@ #!/bin/bash cd `dirname $0`/../.. || exit echo "================== 构建 jar ==================" -mvn clean package -Pdev -DskipTests -U -e +mvn clean package -Pdev -DskipTests -e echo "================== 拷贝 jar ==================" /bin/cp -rf powerjob-server/powerjob-server-starter/target/*.jar powerjob-server/docker/powerjob-server.jar -/bin/cp -rf powerjob-worker-agent/target/*.jar powerjob-worker-agent/powerjob-agent.jar echo "================== 关闭老应用 ==================" docker stop powerjob-server -docker stop powerjob-agent -docker stop powerjob-agent2 +docker stop powerjob-worker-samples +docker stop powerjob-worker-samples2 echo "================== 删除老容器 ==================" docker container rm powerjob-server -docker container rm powerjob-agent -docker container rm powerjob-agent2 +docker container rm powerjob-worker-samples +docker container rm powerjob-worker-samples2 echo "================== 删除旧镜像 ==================" docker rmi -f tjqq/powerjob-server:latest -docker rmi -f tjqq/powerjob-agent:latest +docker rmi -f tjqq/powerjob-worker-samples:latest echo "================== 构建 powerjob-server 镜像 ==================" docker build -t tjqq/powerjob-server:latest powerjob-server/docker/. || exit -echo "================== 构建 powerjob-agent 镜像 ==================" -docker build -t tjqq/powerjob-agent:latest powerjob-worker-agent/. || exit +echo "================== 构建 powerjob-worker-samples 镜像 ==================" +docker build -t tjqq/powerjob-worker-samples:latest powerjob-worker-samples/. || exit echo "================== 准备启动 powerjob-server ==================" docker run -d \ --restart=always \ --name powerjob-server \ -p 7700:7700 -p 10086:10086 -p 5001:5005 -p 10001:10000 \ -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \ - -e PARAMS="--oms.swagger.enable=true --spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --spring.data.mongodb.uri=mongodb://remotehost:27017/powerjob-product" \ + -e PARAMS="--oms.swagger.enable=true --spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://remotehost:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --oms.mongodb.enable=false --spring.data.mongodb.uri=mongodb://remotehost:27017/powerjob-product" \ -v ~/docker/powerjob-server:/root/powerjob/server -v ~/.m2:/root/.m2 \ tjqq/powerjob-server:latest sleep 60 @@ -37,19 +36,19 @@ echo "使用的Server地址:$serverAddress" docker run -d \ --restart=always \ - --name powerjob-agent \ + --name powerjob-worker-samples \ -p 27777:27777 -p 5002:5005 -p 10002:10000 \ -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \ - -e PARAMS="--app powerjob-agent-test --server $serverAddress" \ - -v ~/docker/powerjob-agent:/root \ - tjqq/powerjob-agent:latest + -e PARAMS="--powerjob.worker.server-address=$serverAddress" \ + -v ~/docker/powerjob-worker-samples:/root \ + tjqq/powerjob-worker-samples:latest docker run -d \ --restart=always \ - --name powerjob-agent2 \ + --name powerjob-worker-samples2 \ -p 27778:27777 -p 5003:5005 -p 10003:10000 \ -e JVMOPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10000 -Dcom.sun.management.jmxremote.rmi.port=10000 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false" \ - -e PARAMS="--app powerjob-agent-test --server $serverAddress" \ - -v ~/docker/powerjob-agent2:/root \ - tjqq/powerjob-agent:latest + -e PARAMS="--powerjob.worker.server-address=$serverAddress" \ + -v ~/docker/powerjob-worker-samples2:/root \ + tjqq/powerjob-worker-samples:latest diff --git a/powerjob-common/src/main/java/tech/powerjob/common/enums/LogLevel.java b/powerjob-common/src/main/java/tech/powerjob/common/enums/LogLevel.java index 53071f3f..3640baec 100644 --- a/powerjob-common/src/main/java/tech/powerjob/common/enums/LogLevel.java +++ b/powerjob-common/src/main/java/tech/powerjob/common/enums/LogLevel.java @@ -18,7 +18,8 @@ public enum LogLevel { DEBUG(1), INFO(2), WARN(3), - ERROR(4); + ERROR(4), + OFF(99); private final int v; diff --git a/powerjob-common/src/main/java/tech/powerjob/common/model/LogConfig.java b/powerjob-common/src/main/java/tech/powerjob/common/model/LogConfig.java new file mode 100644 index 00000000..6f7c291c --- /dev/null +++ b/powerjob-common/src/main/java/tech/powerjob/common/model/LogConfig.java @@ -0,0 +1,47 @@ +package tech.powerjob.common.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +/** + * 任务日志配置 + * + * @author yhz + * @since 2022/9/16 + */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class LogConfig { + /** + * log type {@link LogType} + */ + private Integer type; + /** + * log level {@link tech.powerjob.common.enums.LogLevel} + */ + private Integer level; + + private String loggerName; + + @Getter + @AllArgsConstructor + public enum LogType { + ONLINE(1), + LOCAL(2); + private final Integer v; + + public LogType of(Integer type) { + for (LogType logType : values()) { + if (logType.v.equals(type)) { + return logType; + } + } + return ONLINE; + } + } +} diff --git a/powerjob-common/src/main/java/tech/powerjob/common/request/ServerScheduleJobReq.java b/powerjob-common/src/main/java/tech/powerjob/common/request/ServerScheduleJobReq.java index 92fef38e..364aba55 100644 --- a/powerjob-common/src/main/java/tech/powerjob/common/request/ServerScheduleJobReq.java +++ b/powerjob-common/src/main/java/tech/powerjob/common/request/ServerScheduleJobReq.java @@ -94,6 +94,10 @@ public class ServerScheduleJobReq implements PowerSerializable { */ private String alarmConfig; + /** + * 日志配置 + */ + private String logConfig; @Override public String path() { diff --git a/powerjob-common/src/main/java/tech/powerjob/common/request/http/SaveJobInfoRequest.java b/powerjob-common/src/main/java/tech/powerjob/common/request/http/SaveJobInfoRequest.java index e0541527..65fd892b 100644 --- a/powerjob-common/src/main/java/tech/powerjob/common/request/http/SaveJobInfoRequest.java +++ b/powerjob-common/src/main/java/tech/powerjob/common/request/http/SaveJobInfoRequest.java @@ -5,6 +5,7 @@ import tech.powerjob.common.enums.ExecuteType; import tech.powerjob.common.enums.ProcessorType; import tech.powerjob.common.enums.TimeExpressionType; import tech.powerjob.common.model.AlarmConfig; +import tech.powerjob.common.model.LogConfig; import tech.powerjob.common.model.LifeCycle; import tech.powerjob.common.utils.CommonUtils; import lombok.Data; @@ -139,6 +140,16 @@ public class SaveJobInfoRequest { */ private AlarmConfig alarmConfig; + /** + * 任务归类,开放给接入方自由定制 + */ + private String tag; + + /** + * 日志配置,包括日志级别、日志方式等配置信息 + */ + private LogConfig logConfig; + /** * Check non-null properties. diff --git a/powerjob-common/src/main/java/tech/powerjob/common/request/query/JobInfoQuery.java b/powerjob-common/src/main/java/tech/powerjob/common/request/query/JobInfoQuery.java index aa208900..d726b545 100644 --- a/powerjob-common/src/main/java/tech/powerjob/common/request/query/JobInfoQuery.java +++ b/powerjob-common/src/main/java/tech/powerjob/common/request/query/JobInfoQuery.java @@ -50,4 +50,6 @@ public class JobInfoQuery extends PowerQuery { private Date gmtModifiedGt; private Integer dispatchStrategyEq; + + private String tagEq; } diff --git a/powerjob-common/src/main/java/tech/powerjob/common/response/JobInfoDTO.java b/powerjob-common/src/main/java/tech/powerjob/common/response/JobInfoDTO.java index 0c04ffa5..34b63613 100644 --- a/powerjob-common/src/main/java/tech/powerjob/common/response/JobInfoDTO.java +++ b/powerjob-common/src/main/java/tech/powerjob/common/response/JobInfoDTO.java @@ -2,6 +2,7 @@ package tech.powerjob.common.response; import lombok.Data; import tech.powerjob.common.model.AlarmConfig; +import tech.powerjob.common.model.LogConfig; import java.util.Date; @@ -125,4 +126,15 @@ public class JobInfoDTO { private String lifecycle; private AlarmConfig alarmConfig; + + /** + * 任务归类,开放给接入方自由定制 + */ + private String tag; + + /** + * 日志配置,包括日志级别、日志方式等配置信息 + */ + private LogConfig logConfig; + } diff --git a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/ConfigProcessor.java b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/ConfigProcessor.java new file mode 100644 index 00000000..6d6e1e0e --- /dev/null +++ b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/ConfigProcessor.java @@ -0,0 +1,84 @@ +package tech.powerjob.official.processors.impl; + +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Maps; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; +import org.apache.commons.lang3.StringUtils; +import tech.powerjob.common.serialize.JsonUtils; +import tech.powerjob.official.processors.util.CommonUtils; +import tech.powerjob.worker.core.processor.ProcessResult; +import tech.powerjob.worker.core.processor.TaskContext; +import tech.powerjob.worker.core.processor.sdk.BroadcastProcessor; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.Serializable; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.Optional; + +/** + * 配置处理器 + * 超简易的配置中心,用于配置的下发,需要配合秒级 + 广播任务使用! + * 超低成本下的解决方案,强配置 or 高SLA 场景,请使用标准的配置管理中间件。 + * 外部调用方法 {@link ConfigProcessor#fetchConfig()} + * + * @author tjq + * @since 2022/9/17 + */ +@Slf4j +public class ConfigProcessor implements BroadcastProcessor { + + /** + * 获取配置 + * @return 控制台下发的配置 + */ + public static Map fetchConfig() { + if (config == null) { + return Maps.newHashMap(); + } + return Optional.ofNullable(config.getConfig()).orElse(Maps.newHashMap()); + } + + private static Config config; + + @Override + public ProcessResult process(TaskContext context) throws Exception { + + Config newCfg = JsonUtils.parseObject(CommonUtils.parseParams(context), Config.class); + context.getOmsLogger().info("[ConfigProcessor] receive and update config: {}", config); + + // 空场景不更新 + final Map realConfig = newCfg.config; + if (realConfig == null) { + return new ProcessResult(false, "CONFIG_IS_NULL"); + } + + config = newCfg; + + if (StringUtils.isNotEmpty(config.persistentFileName)) { + final File file = new File(config.persistentFileName); + + String content = JSONObject.toJSONString(realConfig); + FileUtils.copyToFile(new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8)), file); + } + + return new ProcessResult(true, "UPDATE_SUCCESS"); + } + + @Data + public static class Config implements Serializable { + + /** + * 原始配置 + */ + private Map config; + + /** + * 持久到本地的全路径名称 + */ + private String persistentFileName; + } +} diff --git a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/AbstractScriptProcessor.java b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/AbstractScriptProcessor.java index b344f703..935df2ca 100644 --- a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/AbstractScriptProcessor.java +++ b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/AbstractScriptProcessor.java @@ -13,7 +13,9 @@ import tech.powerjob.official.processors.util.CommonUtils; import java.io.*; import java.net.URL; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.util.Set; import java.util.concurrent.ForkJoinPool; @@ -30,6 +32,7 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor { private static final ForkJoinPool POOL = new ForkJoinPool(4 * Runtime.getRuntime().availableProcessors()); private static final Set DOWNLOAD_PROTOCOL = Sets.newHashSet("http", "https", "ftp"); protected static final String SH_SHELL = "/bin/sh"; + protected static final String CMD_SHELL = "cmd.exe"; private static final String WORKER_DIR = System.getProperty("user.home") + "/powerjob/worker/official_script_processor/"; @@ -55,13 +58,16 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor { } // 授权 - ProcessBuilder chmodPb = new ProcessBuilder("/bin/chmod", "755", scriptPath); - // 等待返回,这里不可能导致死锁(shell产生大量数据可能导致死锁) - chmodPb.start().waitFor(); - omsLogger.info("[SYSTEM] chmod 755 authorization complete, ready to start execution~"); - + if ( !SystemUtils.IS_OS_WINDOWS) { + ProcessBuilder chmodPb = new ProcessBuilder("/bin/chmod", "755", scriptPath); + // 等待返回,这里不可能导致死锁(shell产生大量数据可能导致死锁) + chmodPb.start().waitFor(); + omsLogger.info("[SYSTEM] chmod 755 authorization complete, ready to start execution~"); + } // 2. 执行目标脚本 - ProcessBuilder pb = new ProcessBuilder(getRunCommand(), scriptPath); + ProcessBuilder pb = StringUtils.equals(getRunCommand(), CMD_SHELL) ? + new ProcessBuilder(getRunCommand(), "/c", scriptPath) + : new ProcessBuilder(getRunCommand(), scriptPath); Process process = pb.start(); StringBuilder inputBuilder = new StringBuilder(); @@ -70,10 +76,11 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor { boolean success = true; String result; + final Charset charset = getCharset(); try (InputStream is = process.getInputStream(); InputStream es = process.getErrorStream()) { - POOL.execute(() -> copyStream(is, inputBuilder, omsLogger)); - POOL.execute(() -> copyStream(es, errorBuilder, omsLogger)); + POOL.execute(() -> copyStream(is, inputBuilder, omsLogger, charset)); + POOL.execute(() -> copyStream(es, errorBuilder, omsLogger, charset)); success = process.waitFor() == 0; @@ -106,17 +113,27 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor { } } - // 非下载链接,为 processInfo 生成可执行文件 - try (FileWriter fw = new FileWriter(script); BufferedWriter bw = new BufferedWriter(fw)) { - bw.write(processorInfo); - bw.flush(); + final Charset charset = getCharset(); + + if(charset != null) + { + try (Writer fstream = new OutputStreamWriter(Files.newOutputStream(script.toPath()), charset); BufferedWriter out = new BufferedWriter(fstream)) { + out.write(processorInfo); + out.flush(); + } + } + else { + try (FileWriter fw = new FileWriter(script); BufferedWriter bw = new BufferedWriter(fw)) { + bw.write(processorInfo); + bw.flush(); + } } return scriptPath; } - private static void copyStream(InputStream is, StringBuilder sb, OmsLogger omsLogger) { + private static void copyStream(InputStream is, StringBuilder sb, OmsLogger omsLogger, Charset charset) { String line; - try (BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) { + try (BufferedReader br = new BufferedReader(new InputStreamReader(is, charset))) { while ((line = br.readLine()) != null) { sb.append(line); // 同步到在线日志 @@ -142,4 +159,12 @@ public abstract class AbstractScriptProcessor extends CommonBasicProcessor { * @return 执行脚本的命令 */ protected abstract String getRunCommand(); + + /** + * 默认不指定 + * @return Charset + */ + protected Charset getCharset() { + return StandardCharsets.UTF_8; + } } diff --git a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/CMDProcessor.java b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/CMDProcessor.java new file mode 100644 index 00000000..22130c4f --- /dev/null +++ b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/CMDProcessor.java @@ -0,0 +1,27 @@ +package tech.powerjob.official.processors.impl.script; + +import java.nio.charset.Charset; + +/** + * python processor + * + * @author fddc + * @since 2021/5/14 + */ +public class CMDProcessor extends AbstractScriptProcessor { + + @Override + protected String getScriptName(Long instanceId) { + return String.format("cmd_%d.bat", instanceId); + } + + @Override + protected String getRunCommand() { + return "cmd.exe"; + } + + @Override + protected Charset getCharset() { + return Charset.defaultCharset(); + } +} diff --git a/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/PowerShellProcessor.java b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/PowerShellProcessor.java new file mode 100644 index 00000000..e0827e9d --- /dev/null +++ b/powerjob-official-processors/src/main/java/tech/powerjob/official/processors/impl/script/PowerShellProcessor.java @@ -0,0 +1,27 @@ +package tech.powerjob.official.processors.impl.script; + +import java.nio.charset.Charset; + +/** + * python processor + * + * @author fddc + * @since 2021/5/14 + */ +public class PowerShellProcessor extends AbstractScriptProcessor { + + @Override + protected String getScriptName(Long instanceId) { + return String.format("powershell_%d.ps1", instanceId); + } + + @Override + protected String getRunCommand() { + return "powershell.exe"; + } + + @Override + protected Charset getCharset() { + return Charset.defaultCharset(); + } +} diff --git a/powerjob-official-processors/src/test/java/tech/powerjob/official/processors/TestUtils.java b/powerjob-official-processors/src/test/java/tech/powerjob/official/processors/TestUtils.java index 54671ead..c88b923e 100644 --- a/powerjob-official-processors/src/test/java/tech/powerjob/official/processors/TestUtils.java +++ b/powerjob-official-processors/src/test/java/tech/powerjob/official/processors/TestUtils.java @@ -1,5 +1,6 @@ package tech.powerjob.official.processors; +import tech.powerjob.common.model.LogConfig; import tech.powerjob.worker.core.processor.TaskContext; import tech.powerjob.worker.core.processor.WorkflowContext; import tech.powerjob.worker.log.impl.OmsLocalLogger; @@ -24,7 +25,7 @@ public class TestUtils { taskContext.setJobParams(jobParams); taskContext.setTaskId("0.0"); taskContext.setTaskName("TEST_TASK"); - taskContext.setOmsLogger(new OmsLocalLogger()); + taskContext.setOmsLogger(new OmsLocalLogger(new LogConfig())); taskContext.setWorkflowContext(new WorkflowContext(null, null)); return taskContext; } diff --git a/powerjob-server/pom.xml b/powerjob-server/pom.xml index 832cb068..f9438212 100644 --- a/powerjob-server/pom.xml +++ b/powerjob-server/pom.xml @@ -27,7 +27,7 @@ 2.9.2 - 2.3.4.RELEASE + 2.7.4 4.1.1 8.0.28 diff --git a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/service/JobService.java b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/service/JobService.java index 62591f3b..b3fe7703 100644 --- a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/service/JobService.java +++ b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/service/JobService.java @@ -1,6 +1,7 @@ package tech.powerjob.server.core.service; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.data.jpa.domain.Specification; @@ -107,6 +108,10 @@ public class JobService { } jobInfoDO.setAlarmConfig(JSON.toJSONString(request.getAlarmConfig())); } + // 日志配置 + if (request.getLogConfig() != null) { + jobInfoDO.setLogConfig(JSONObject.toJSONString(request.getLogConfig())); + } JobInfoDO res = jobInfoRepository.saveAndFlush(jobInfoDO); return res.getId(); } diff --git a/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/remote/model/JobInfoDO.java b/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/remote/model/JobInfoDO.java index 7abdd9dc..3fba4f45 100644 --- a/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/remote/model/JobInfoDO.java +++ b/powerjob-server/powerjob-server-persistence/src/main/java/tech/powerjob/server/persistence/remote/model/JobInfoDO.java @@ -145,4 +145,13 @@ public class JobInfoDO { */ private String alarmConfig; + /** + * 任务归类,开放给接入方自由定制 + */ + private String tag; + + /** + * 日志配置,包括日志级别、日志方式等配置信息 + */ + private String logConfig; } diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/InstanceController.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/InstanceController.java index bf776539..0300b199 100644 --- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/InstanceController.java +++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/InstanceController.java @@ -54,8 +54,6 @@ public class InstanceController { @Resource private CacheService cacheService; @Resource - private AppInfoRepository appInfoRepository; - @Resource private InstanceInfoRepository instanceInfoRepository; @GetMapping("/stop") diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/JobInfoVO.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/JobInfoVO.java index 9bda80ff..6e7ebc0b 100644 --- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/JobInfoVO.java +++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/JobInfoVO.java @@ -1,10 +1,12 @@ package tech.powerjob.server.web.response; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import tech.powerjob.common.enums.ExecuteType; import tech.powerjob.common.enums.ProcessorType; import tech.powerjob.common.enums.TimeExpressionType; import tech.powerjob.common.model.AlarmConfig; +import tech.powerjob.common.model.LogConfig; import tech.powerjob.common.model.LifeCycle; import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.server.common.SJ; @@ -144,6 +146,16 @@ public class JobInfoVO { private AlarmConfig alarmConfig; + /** + * 任务归类,开放给接入方自由定制 + */ + private String tag; + + /** + * 日志配置,包括日志级别、日志方式等配置信息 + */ + private LogConfig logConfig; + public static JobInfoVO from(JobInfoDO jobInfoDO) { JobInfoVO jobInfoVO = new JobInfoVO(); BeanUtils.copyProperties(jobInfoDO, jobInfoVO); @@ -173,6 +185,10 @@ public class JobInfoVO { jobInfoVO.setLifeCycle(LifeCycle.parse(jobInfoDO.getLifecycle())); } + if (!StringUtils.isEmpty(jobInfoDO.getLogConfig())) { + jobInfoVO.setLogConfig(JSONObject.parseObject(jobInfoDO.getLogConfig(), LogConfig.class)); + } + return jobInfoVO; } } diff --git a/powerjob-server/powerjob-server-starter/src/main/resources/static/index.html b/powerjob-server/powerjob-server-starter/src/main/resources/static/index.html index ac4f12e8..8d933786 100644 --- a/powerjob-server/powerjob-server-starter/src/main/resources/static/index.html +++ b/powerjob-server/powerjob-server-starter/src/main/resources/static/index.html @@ -6,7 +6,7 @@ PowerJob - +