package tech.powerjob.common.request.http; import tech.powerjob.common.enums.DispatchStrategy; 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.JobAdvancedRuntimeConfig; import tech.powerjob.common.model.LogConfig; import tech.powerjob.common.model.LifeCycle; import tech.powerjob.common.utils.CommonUtils; import lombok.Data; import tech.powerjob.common.response.JobInfoDTO; import java.util.List; /** * Save or modify {@link JobInfoDTO} * * @author tjq * @since 2020/3/30 */ @Data public class SaveJobInfoRequest { /** * id of the job. set null to create or non-null to update the job. */ private Long id; /* ************************** Base info of related job. ************************** */ /** * Name of the job. */ private String jobName; /** * Description of the job. */ private String jobDescription; /** * Related id of the application. There is not need to set this property * in PowerJob-client, as it would be set automatically. */ private Long appId; /** * Params that these jobs carry with when they are created. */ private String jobParams; /* ************************** Timing param. ************************** */ /** * Time expression type. */ private TimeExpressionType timeExpressionType; /** * Time expression. */ private String timeExpression; /* ************************** Execution type. ************************** */ /** * Execution type, {@code standalone}, {@code broadcast} or {@code Map/MapReduce} */ private ExecuteType executeType; /** * Processor type, {@code Java}, {@code Python} or {@code Shell}. */ private ProcessorType processorType; /** * Processor info. */ private String processorInfo; /* ************************** Running instance setting. ************************** */ /** * Maximum instance setting num. {@code 0} means there is no restriction. */ private Integer maxInstanceNum = 0; /** * Concurrency setting. Number of threads that run simultaneously. */ private Integer concurrency = 5; /** * Max instance running time setting. {@code 0L} means there is no restriction. */ private Long instanceTimeLimit = 0L; /* ************************** Retrial setting. ************************** */ /** * Instance retry number setting. */ private Integer instanceRetryNum = 0; /** * Task retry number setting. */ private Integer taskRetryNum = 0; /* ************************** Busy Machine setting. ************************** */ /** * Minimum CPU required. {@code 0} means there is no restriction. */ private double minCpuCores = 0; /** * Minimum memory required, in GB. */ private double minMemorySpace = 0; /** * Minimum disk space, in GB. {@code 0} means there is no restriction. */ private double minDiskSpace = 0; private boolean enable = true; /* ************************** PowerJob-worker cluster property ************************** */ /** * Designated PowerJob-worker nodes. Blank value indicates that there is * no limit. Non-blank value means to run the corresponding machine(s) only. * example: 192.168.1.1:27777,192.168.1.2:27777 */ private String designatedWorkers; /** * Max count of PowerJob-worker nodes. */ private Integer maxWorkerCount = 0; /** * The id list of the users that need to be notified. */ private List notifyUserIds; private String extra; private DispatchStrategy dispatchStrategy; /** * 某种派发策略背后的具体配置,值取决于 dispatchStrategy */ private String dispatchStrategyConfig; private LifeCycle lifeCycle; /** * alarm config */ private AlarmConfig alarmConfig; /** * 任务归类,开放给接入方自由定制 */ private String tag; /** * 日志配置,包括日志级别、日志方式等配置信息 */ private LogConfig logConfig; /** * 高级运行时配置 */ private JobAdvancedRuntimeConfig advancedRuntimeConfig; /** * Check non-null properties. */ public void valid() { CommonUtils.requireNonNull(jobName, "jobName can't be empty"); CommonUtils.requireNonNull(appId, "appId can't be empty"); CommonUtils.requireNonNull(processorInfo, "processorInfo can't be empty"); CommonUtils.requireNonNull(executeType, "executeType can't be empty"); CommonUtils.requireNonNull(processorType, "processorType can't be empty"); CommonUtils.requireNonNull(timeExpressionType, "timeExpressionType can't be empty"); } public DispatchStrategy getDispatchStrategy() { if (dispatchStrategy == null) { return DispatchStrategy.HEALTH_FIRST; } return dispatchStrategy; } }