diff --git a/others/images/user.png b/others/images/user.png index 4c962778..8de90911 100644 Binary files a/others/images/user.png and b/others/images/user.png differ diff --git a/powerjob-client/pom.xml b/powerjob-client/pom.xml index c17c1dee..2fa776a5 100644 --- a/powerjob-client/pom.xml +++ b/powerjob-client/pom.xml @@ -10,13 +10,13 @@ 4.0.0 powerjob-client - 3.3.2 + 3.3.3 jar 5.6.1 1.2.68 - 3.3.2 + 3.3.3 3.2.4 diff --git a/powerjob-client/src/main/java/com/github/kfcfans/powerjob/client/OhMyClient.java b/powerjob-client/src/main/java/com/github/kfcfans/powerjob/client/OhMyClient.java index 04efad72..d7c3bfb4 100644 --- a/powerjob-client/src/main/java/com/github/kfcfans/powerjob/client/OhMyClient.java +++ b/powerjob-client/src/main/java/com/github/kfcfans/powerjob/client/OhMyClient.java @@ -2,6 +2,7 @@ package com.github.kfcfans.powerjob.client; import com.alibaba.fastjson.JSONObject; import com.github.kfcfans.powerjob.common.InstanceStatus; +import com.github.kfcfans.powerjob.common.OmsConstant; import com.github.kfcfans.powerjob.common.OpenAPIConstant; import com.github.kfcfans.powerjob.common.PowerJobException; import com.github.kfcfans.powerjob.common.request.http.SaveJobInfoRequest; @@ -55,7 +56,7 @@ public class OhMyClient { */ public OhMyClient(List addressList, String appName, String password) { - CommonUtils.requireNonNull(addressList, "domain can't be null!"); + CommonUtils.requireNonNull(addressList, "addressList can't be null!"); CommonUtils.requireNonNull(appName, "appName can't be null"); allAddress = addressList; @@ -80,7 +81,7 @@ public class OhMyClient { if (StringUtils.isEmpty(currentAddress)) { throw new PowerJobException("no server available"); } - log.info("[OhMyClient] {}'s oms-client bootstrap successfully, using server: {}", appName, currentAddress); + log.info("[OhMyClient] {}'s OhMyClient bootstrap successfully, using server: {}", appName, currentAddress); } private static String assertApp(String appName, String password, String url) throws IOException { @@ -283,7 +284,7 @@ public class OhMyClient { */ public ResultDTO saveWorkflow(SaveWorkflowRequest request) throws PowerJobException { request.setAppId(appId); - MediaType jsonType = MediaType.parse("application/json; charset=utf-8"); + MediaType jsonType = MediaType.parse(OmsConstant.JSON_MEDIA_TYPE); // 中坑记录:用 FastJSON 序列化会导致 Server 接收时 pEWorkflowDAG 为 null,无语.jpg String json = JsonUtils.toJSONStringUnsafe(request); String post = postHA(OpenAPIConstant.SAVE_WORKFLOW, RequestBody.create(jsonType, json)); diff --git a/powerjob-common/pom.xml b/powerjob-common/pom.xml index 6c9b9ec8..b28c9717 100644 --- a/powerjob-common/pom.xml +++ b/powerjob-common/pom.xml @@ -10,7 +10,7 @@ 4.0.0 powerjob-common - 3.3.2 + 3.3.3 jar diff --git a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/OmsConstant.java b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/OmsConstant.java index ed1fd621..3cb99e5e 100644 --- a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/OmsConstant.java +++ b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/OmsConstant.java @@ -15,4 +15,6 @@ public class OmsConstant { public static final String COMMA = ","; public static final String LINE_SEPARATOR = "\r\n"; + + public static final String JSON_MEDIA_TYPE = "application/json; charset=utf-8"; } diff --git a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/HttpUtils.java b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/HttpUtils.java index 21664614..b4c4beeb 100644 --- a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/HttpUtils.java +++ b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/HttpUtils.java @@ -1,12 +1,9 @@ package com.github.kfcfans.powerjob.common.utils; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; +import com.github.kfcfans.powerjob.common.PowerJobException; +import okhttp3.*; import java.io.IOException; -import java.util.Objects; import java.util.concurrent.TimeUnit; /** @@ -32,12 +29,7 @@ public class HttpUtils { .get() .url(url) .build(); - try (Response response = client.newCall(request).execute()) { - if (response.code() == HTTP_SUCCESS_CODE) { - return Objects.requireNonNull(response.body()).string(); - } - } - return null; + return execute(request); } public static String post(String url, RequestBody requestBody) throws IOException { @@ -45,12 +37,22 @@ public class HttpUtils { .post(requestBody) .url(url) .build(); + return execute(request); + } + + private static String execute(Request request) throws IOException { try (Response response = client.newCall(request).execute()) { - if (response.code() == HTTP_SUCCESS_CODE) { - return Objects.requireNonNull(response.body()).string(); + int responseCode = response.code(); + if (responseCode == HTTP_SUCCESS_CODE) { + ResponseBody body = response.body(); + if (body == null) { + return null; + }else { + return body.string(); + } } + throw new PowerJobException(String.format("http request failed,code=%d", responseCode)); } - return null; } } diff --git a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/NetUtils.java b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/NetUtils.java index 8b8c4817..68a41df0 100644 --- a/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/NetUtils.java +++ b/powerjob-common/src/main/java/com/github/kfcfans/powerjob/common/utils/NetUtils.java @@ -22,6 +22,7 @@ import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.net.*; import java.util.*; +import java.util.concurrent.ThreadLocalRandom; import java.util.regex.Pattern; import static java.util.Collections.emptyList; @@ -34,6 +35,10 @@ import static java.util.Collections.emptyList; */ @Slf4j public class NetUtils { + + // returned port range is [30000, 39999] + private static final int RND_PORT_START = 30000; + private static final int RND_PORT_END = 65535; private static volatile String HOST_ADDRESS; private static final String LOCALHOST_VALUE = "127.0.0.1"; @@ -41,6 +46,10 @@ public class NetUtils { private static final Pattern IP_PATTERN = Pattern.compile("\\d{1,3}(\\.\\d{1,3}){3,5}$"); private static final String ANYHOST_VALUE = "0.0.0.0"; + public static int getRandomPort() { + return ThreadLocalRandom.current().nextInt(RND_PORT_START, RND_PORT_END); + } + /** * 获取本机 IP 地址 * @return 本机 IP 地址 diff --git a/powerjob-server/pom.xml b/powerjob-server/pom.xml index e6e148e4..480559c7 100644 --- a/powerjob-server/pom.xml +++ b/powerjob-server/pom.xml @@ -10,13 +10,13 @@ 4.0.0 powerjob-server - 3.3.2 + 3.3.3 jar 2.9.2 2.3.4.RELEASE - 3.3.2 + 3.3.3 8.0.19 19.7.0.0 diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/common/config/SwaggerConfig.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/common/config/SwaggerConfig.java index c574ca59..804e45ce 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/common/config/SwaggerConfig.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/common/config/SwaggerConfig.java @@ -28,7 +28,7 @@ public class SwaggerConfig { .description("Distributed scheduling and computing framework.") .license("Apache Licence 2") .termsOfServiceUrl("https://github.com/KFCFans/PowerJob") - .version("3.1.3") + .version("3.3.3") .build(); return new Docket(DocumentationType.SWAGGER_2) diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/common/utils/timewheel/HashedWheelTimer.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/common/utils/timewheel/HashedWheelTimer.java index 26036070..847966a1 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/common/utils/timewheel/HashedWheelTimer.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/common/utils/timewheel/HashedWheelTimer.java @@ -159,7 +159,7 @@ public class HashedWheelTimer implements Timer { @Override public boolean isDone() { - return startTime == FINISHED; + return status == FINISHED; } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/DingTalkAlarmService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/DingTalkAlarmService.java index aa01d08f..f1e4ee48 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/DingTalkAlarmService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/DingTalkAlarmService.java @@ -51,10 +51,14 @@ public class DingTalkAlarmService implements Alarmable { } Set userIds = Sets.newHashSet(); targetUserList.forEach(user -> { + String phone = user.getPhone(); + if (StringUtils.isEmpty(phone)) { + return; + } try { - String userId = mobile2UserIdCache.get(user.getPhone(), () -> { + String userId = mobile2UserIdCache.get(phone, () -> { try { - return dingTalkUtils.fetchUserIdByMobile(user.getPhone()); + return dingTalkUtils.fetchUserIdByMobile(phone); } catch (PowerJobException ignore) { return EMPTY_TAG; } catch (Exception ignore) { diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/MailAlarmService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/MailAlarmService.java index ab9a346a..516d1814 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/MailAlarmService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/MailAlarmService.java @@ -14,6 +14,7 @@ import org.springframework.util.StringUtils; import javax.annotation.Resource; import java.util.List; +import java.util.Objects; /** * 邮件通知服务 @@ -43,13 +44,13 @@ public class MailAlarmService implements Alarmable { SimpleMailMessage sm = new SimpleMailMessage(); try { sm.setFrom(from); - sm.setTo(targetUserList.stream().map(UserInfoDO::getEmail).toArray(String[]::new)); + sm.setTo(targetUserList.stream().map(UserInfoDO::getEmail).filter(Objects::nonNull).toArray(String[]::new)); sm.setSubject(alarm.fetchTitle()); sm.setText(alarm.fetchContent()); javaMailSender.send(sm); }catch (Exception e) { - log.error("[MailAlarmService] send mail failed, reason is {}", e.getMessage()); + log.warn("[MailAlarmService] send mail failed, reason is {}", e.getMessage()); } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/WebHookAlarmService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/WebHookAlarmService.java new file mode 100644 index 00000000..dc6662c7 --- /dev/null +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/alarm/impl/WebHookAlarmService.java @@ -0,0 +1,58 @@ +package com.github.kfcfans.powerjob.server.service.alarm.impl; + +import com.alibaba.fastjson.JSONObject; +import com.github.kfcfans.powerjob.common.OmsConstant; +import com.github.kfcfans.powerjob.common.utils.HttpUtils; +import com.github.kfcfans.powerjob.server.persistence.core.model.UserInfoDO; +import com.github.kfcfans.powerjob.server.service.alarm.Alarm; +import com.github.kfcfans.powerjob.server.service.alarm.Alarmable; +import lombok.extern.slf4j.Slf4j; +import okhttp3.MediaType; +import okhttp3.RequestBody; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.List; + +/** + * http 回调报警 + * + * @author tjq + * @since 11/14/20 + */ +@Slf4j +@Service +public class WebHookAlarmService implements Alarmable { + + private static final String HTTP_PROTOCOL_PREFIX = "http://"; + private static final String HTTPS_PROTOCOL_PREFIX = "https://"; + + @Override + public void onFailed(Alarm alarm, List targetUserList) { + if (CollectionUtils.isEmpty(targetUserList)) { + return; + } + targetUserList.forEach(user -> { + String webHook = user.getWebHook(); + if (StringUtils.isEmpty(webHook)) { + return; + } + + // 自动添加协议头 + if (!webHook.startsWith(HTTP_PROTOCOL_PREFIX) && !webHook.startsWith(HTTPS_PROTOCOL_PREFIX)) { + webHook = HTTP_PROTOCOL_PREFIX + webHook; + } + + MediaType jsonType = MediaType.parse(OmsConstant.JSON_MEDIA_TYPE); + RequestBody requestBody = RequestBody.create(jsonType, JSONObject.toJSONString(alarm)); + + try { + String response = HttpUtils.post(webHook, requestBody); + log.info("[WebHookAlarmService] invoke webhook[url={}] successfully, response is {}", webHook, response); + }catch (Exception e) { + log.warn("[WebHookAlarmService] invoke webhook[url={}] failed!", webHook, e); + } + }); + } +} diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ServerSelectService.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ServerSelectService.java index e82760b8..50401c72 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ServerSelectService.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/service/ha/ServerSelectService.java @@ -12,6 +12,7 @@ import com.github.kfcfans.powerjob.server.service.lock.LockService; import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -20,6 +21,7 @@ import java.util.Date; import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletionStage; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; /** @@ -37,17 +39,25 @@ public class ServerSelectService { @Resource private AppInfoRepository appInfoRepository; + @Value("${oms.accurate.select.server.percentage}") + private int accurateSelectServerPercentage; + private static final int RETRY_TIMES = 10; private static final long PING_TIMEOUT_MS = 1000; private static final String SERVER_ELECT_LOCK = "server_elect_%d"; - /** - * 获取某个应用对应的Server - * - * @param appId 应用ID - * @return 当前可用的Server - */ - public String getServer(Long appId) { + + public String getServer(Long appId, String currentServer) { + if (!accurate()) { + // 如果是本机,就不需要查数据库那么复杂的操作了,直接返回成功 + if (OhMyServer.getActorSystemAddress().equals(currentServer)) { + return currentServer; + } + } + return getServer0(appId); + } + + private String getServer0(Long appId) { Set downServerCache = Sets.newHashSet(); @@ -95,7 +105,7 @@ public class ServerSelectService { lockService.unlock(lockName); } } - throw new RuntimeException("server elect failed for app " + appId); + throw new PowerJobException("server elect failed for app " + appId); } /** @@ -113,6 +123,10 @@ public class ServerSelectService { return false; } + if (OhMyServer.getActorSystemAddress().equals(serverAddress)) { + return true; + } + Ping ping = new Ping(); ping.setCurrentTime(System.currentTimeMillis()); @@ -128,4 +142,8 @@ public class ServerSelectService { downServerCache.add(serverAddress); return false; } + + private boolean accurate() { + return ThreadLocalRandom.current().nextInt(100) < accurateSelectServerPercentage; + } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/AppInfoController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/AppInfoController.java index 5c448653..95fdaf0c 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/AppInfoController.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/AppInfoController.java @@ -1,5 +1,6 @@ package com.github.kfcfans.powerjob.server.web.controller; +import com.github.kfcfans.powerjob.common.PowerJobException; import com.github.kfcfans.powerjob.common.response.ResultDTO; import com.github.kfcfans.powerjob.server.persistence.core.model.AppInfoDO; import com.github.kfcfans.powerjob.server.persistence.core.repository.AppInfoRepository; @@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -50,6 +52,11 @@ public class AppInfoController { appInfoDO.setGmtCreate(new Date()); }else { appInfoDO = appInfoRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("can't find appInfo by id:" + id)); + + // 对比密码 + if (!Objects.equals(req.getOldPassword(), appInfoDO.getPassword())) { + throw new PowerJobException("The password is incorrect."); + } } BeanUtils.copyProperties(req, appInfoDO); appInfoDO.setGmtModified(new Date()); diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java index 300b55db..26121d31 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/InstanceController.java @@ -17,6 +17,7 @@ import com.github.kfcfans.powerjob.server.service.instance.InstanceService; import com.github.kfcfans.powerjob.server.web.request.QueryInstanceRequest; import com.github.kfcfans.powerjob.server.web.response.InstanceDetailVO; import com.github.kfcfans.powerjob.server.web.response.InstanceInfoVO; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.domain.Example; @@ -40,6 +41,7 @@ import java.util.stream.Collectors; * @author tjq * @since 2020/4/9 */ +@Slf4j @RestController @RequestMapping("/instance") public class InstanceController { @@ -89,6 +91,7 @@ public class InstanceController { response.sendRedirect(url); return ResultDTO.success(StringPage.simple("redirecting...")); }catch (Exception e) { + log.warn("[Instance-{}] redirect request to url[{}] failed, please ensure all server has the same http port!", instanceId, url, e); return ResultDTO.failed(e); } } diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ServerController.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ServerController.java index 1de5f06e..8cb2e457 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ServerController.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/controller/ServerController.java @@ -2,26 +2,20 @@ package com.github.kfcfans.powerjob.server.web.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; -import com.github.kfcfans.powerjob.common.PowerJobException; import com.github.kfcfans.powerjob.common.response.ResultDTO; import com.github.kfcfans.powerjob.common.utils.CommonUtils; import com.github.kfcfans.powerjob.common.utils.NetUtils; import com.github.kfcfans.powerjob.server.akka.OhMyServer; import com.github.kfcfans.powerjob.server.persistence.core.model.AppInfoDO; -import com.github.kfcfans.powerjob.server.persistence.core.model.JobInfoDO; import com.github.kfcfans.powerjob.server.persistence.core.repository.AppInfoRepository; -import com.github.kfcfans.powerjob.server.persistence.core.repository.JobInfoRepository; -import com.github.kfcfans.powerjob.server.service.ha.ClusterStatusHolder; import com.github.kfcfans.powerjob.server.service.ha.ServerSelectService; import com.github.kfcfans.powerjob.server.service.ha.WorkerManagerService; -import com.taobao.api.internal.cluster.ClusterManager; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.List; import java.util.Optional; import java.util.TimeZone; @@ -40,8 +34,6 @@ public class ServerController { private ServerSelectService serverSelectService; @Resource private AppInfoRepository appInfoRepository; - @Resource - private JobInfoRepository jobInfoRepository; @GetMapping("/assert") public ResultDTO assertAppName(String appName) { @@ -52,13 +44,7 @@ public class ServerController { @GetMapping("/acquire") public ResultDTO acquireServer(Long appId, String currentServer) { - - // 如果是本机,就不需要查数据库那么复杂的操作了,直接返回成功 - if (OhMyServer.getActorSystemAddress().equals(currentServer)) { - return ResultDTO.success(currentServer); - } - String server = serverSelectService.getServer(appId); - return ResultDTO.success(server); + return ResultDTO.success(serverSelectService.getServer(appId, currentServer)); } @GetMapping("/hello") diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/ModifyAppInfoRequest.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/ModifyAppInfoRequest.java index bd007626..dc4e229e 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/ModifyAppInfoRequest.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/ModifyAppInfoRequest.java @@ -15,6 +15,7 @@ import org.apache.commons.lang3.StringUtils; public class ModifyAppInfoRequest { private Long id; + private String oldPassword; private String appName; private String password; diff --git a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/ModifyUserInfoRequest.java b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/ModifyUserInfoRequest.java index e07b00f1..4f47cb3b 100644 --- a/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/ModifyUserInfoRequest.java +++ b/powerjob-server/src/main/java/com/github/kfcfans/powerjob/server/web/request/ModifyUserInfoRequest.java @@ -15,6 +15,7 @@ public class ModifyUserInfoRequest { private String username; private String password; + private String webHook; // 手机号 private String phone; diff --git a/powerjob-server/src/main/resources/application-daily.properties b/powerjob-server/src/main/resources/application-daily.properties index 9b1e2b7a..18bb67ef 100644 --- a/powerjob-server/src/main/resources/application-daily.properties +++ b/powerjob-server/src/main/resources/application-daily.properties @@ -32,4 +32,7 @@ oms.container.retention.local=1 oms.container.retention.remote=-1 ####### 缓存配置 ####### -oms.instance.metadata.cache.size=1024 \ No newline at end of file +oms.instance.metadata.cache.size=1024 + +####### 精确获取 server 的百分比,0~100,100代表每次 worker 获取 server 都会进行完整的探活流程,不存在脑裂问题,但有性能开销 ####### +oms.accurate.select.server.percentage = 50 \ No newline at end of file diff --git a/powerjob-server/src/main/resources/application-pre.properties b/powerjob-server/src/main/resources/application-pre.properties index 04060a2b..496d84ab 100644 --- a/powerjob-server/src/main/resources/application-pre.properties +++ b/powerjob-server/src/main/resources/application-pre.properties @@ -32,4 +32,7 @@ oms.container.retention.local=3 oms.container.retention.remote=-1 ####### 缓存配置 ####### -oms.instance.metadata.cache.size=1024 \ No newline at end of file +oms.instance.metadata.cache.size=1024 + +####### 精确获取 server 的百分比,0~100,100代表每次 worker 获取 server 都会进行完整的探活流程,不存在脑裂问题,但有性能开销 ####### +oms.accurate.select.server.percentage = 50 \ No newline at end of file diff --git a/powerjob-server/src/main/resources/application-product.properties b/powerjob-server/src/main/resources/application-product.properties index 768aad92..15ee98e4 100644 --- a/powerjob-server/src/main/resources/application-product.properties +++ b/powerjob-server/src/main/resources/application-product.properties @@ -32,4 +32,7 @@ oms.container.retention.local=7 oms.container.retention.remote=-1 ####### 缓存配置 ####### -oms.instance.metadata.cache.size=2048 \ No newline at end of file +oms.instance.metadata.cache.size=2048 + +####### 精确获取 server 的百分比,0~100,100代表每次 worker 获取 server 都会进行完整的探活流程,不存在脑裂问题,但有性能开销 ####### +oms.accurate.select.server.percentage = 50 \ No newline at end of file diff --git a/powerjob-server/src/main/resources/static/js/6.js b/powerjob-server/src/main/resources/static/js/6.js index 754e0557..a74cde36 100644 --- a/powerjob-server/src/main/resources/static/js/6.js +++ b/powerjob-server/src/main/resources/static/js/6.js @@ -8,7 +8,7 @@ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.for-each */ \"./node_modules/core-js/modules/es.array.for-each.js\");\n/* harmony import */ var core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_1__);\n\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"Welcome\",\n data: function data() {\n return {\n // 应用注册表单是否可见\n appRegisterFormVisible: false,\n // 用户注册表单是否可见\n userRegisterFormVisible: false,\n // 应用注册表单对象\n appRegisterForm: {\n appName: \"\",\n password: undefined\n },\n // 用户注册表单对象\n userRegisterForm: {\n username: \"\",\n phone: \"\",\n email: \"\"\n },\n // 控制台登陆对象\n appLoginForm: {\n appName: undefined,\n password: undefined\n },\n // 是否保持登录状态\n stayLogged: true\n };\n },\n methods: {\n // 请求应用下拉框数据\n queryAppNames: function queryAppNames(queryString, cb) {\n var array = [];\n var that = this;\n var url = \"/appInfo/list?condition=\" + queryString;\n this.axios.get(url).then(function (result) {\n result.forEach(function (appInfo) {\n array.push({\n \"value\": appInfo.appName\n });\n cb(array);\n });\n }, function (error) {\n return that.$message.error(error);\n });\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n cb(array);\n }, 3000);\n },\n // 注册应用\n registerApp: function registerApp() {\n var _this = this;\n\n var that = this;\n this.axios.post(\"/appInfo/save\", this.appRegisterForm).then(function () {\n that.$message.success(_this.$t('message.success'));\n that.appRegisterFormVisible = false;\n }, that.appRegisterFormVisible = false);\n },\n // 注册用户(仅用于报警通知)\n registerUser: function registerUser() {\n var _this2 = this;\n\n var that = this;\n this.axios.post(\"/user/save\", this.userRegisterForm).then(function () {\n that.$message.success(_this2.$t('message.success'));\n that.userRegisterFormVisible = false;\n }, that.userRegisterFormVisible = false);\n },\n // 登陆控制台\n login: function login() {\n var _this3 = this;\n\n var that = this;\n this.axios.post(\"/appInfo/assert\", this.appLoginForm).then(function (res) {\n // 勾选了保持登录状态,就开启自动登录,直接本地存用户名密码(内部系统浏览器明文存问题不大)\n if (_this3.stayLogged) {\n window.localStorage.setItem('oms_auto_login', JSON.stringify(_this3.appLoginForm));\n }\n\n var appInfo = {\n id: res,\n appName: that.appLoginForm.appName\n }; // 将 appId 存储到 VueStore\n\n _this3.$store.commit(\"initAppInfo\", appInfo); // 跳转到主界面\n\n\n _this3.$router.push(\"/oms/home\");\n }, function (error) {\n window.localStorage.removeItem('oms_auto_login');\n that.$message.error(error);\n });\n },\n // 自动登录\n autoLogin: function autoLogin() {\n var autoLoginString = window.localStorage.getItem(\"oms_auto_login\");\n\n if (autoLoginString === undefined || autoLoginString === null) {\n return;\n }\n\n this.appLoginForm = JSON.parse(autoLoginString);\n this.login();\n }\n },\n mounted: function mounted() {\n // 加载默认语言配置文件\n var localLang = window.localStorage.getItem('oms_lang');\n console.log(\"language from localStorage is %o\", localLang);\n\n if (localLang != null) {\n this.$i18n.locale = localLang;\n } else {\n var lang = navigator.language;\n console.log(\"language from system is %o\", lang);\n\n switch (lang) {\n case \"zh-HK\":\n case \"zh-TW\":\n case \"zh-SG\":\n case \"zh-CN\":\n this.$i18n.locale = \"cn\";\n break;\n\n default:\n this.$i18n.locale = \"en\";\n }\n } // 自动登录\n\n\n this.autoLogin();\n }\n});\n\n//# sourceURL=webpack:///./src/components/Welcome.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.for-each */ \"./node_modules/core-js/modules/es.array.for-each.js\");\n/* harmony import */ var core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n/* harmony import */ var core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_1__);\n\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"Welcome\",\n data: function data() {\n return {\n // 应用注册表单是否可见\n appRegisterFormVisible: false,\n // 用户注册表单是否可见\n userRegisterFormVisible: false,\n // 应用注册表单对象\n appRegisterForm: {\n appName: \"\",\n password: undefined\n },\n // 用户注册表单对象\n userRegisterForm: {\n username: \"\",\n phone: \"\",\n email: \"\",\n webHook: \"\"\n },\n // 控制台登陆对象\n appLoginForm: {\n appName: undefined,\n password: undefined\n },\n // 是否保持登录状态\n stayLogged: true\n };\n },\n methods: {\n // 请求应用下拉框数据\n queryAppNames: function queryAppNames(queryString, cb) {\n var array = [];\n var that = this;\n var url = \"/appInfo/list?condition=\" + queryString;\n this.axios.get(url).then(function (result) {\n result.forEach(function (appInfo) {\n array.push({\n \"value\": appInfo.appName\n });\n cb(array);\n });\n }, function (error) {\n return that.$message.error(error);\n });\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n cb(array);\n }, 3000);\n },\n // 注册应用\n registerApp: function registerApp() {\n var _this = this;\n\n var that = this;\n this.axios.post(\"/appInfo/save\", this.appRegisterForm).then(function () {\n that.$message.success(_this.$t('message.success'));\n that.appRegisterFormVisible = false;\n }, that.appRegisterFormVisible = false);\n },\n // 注册用户(仅用于报警通知)\n registerUser: function registerUser() {\n var _this2 = this;\n\n var that = this;\n this.axios.post(\"/user/save\", this.userRegisterForm).then(function () {\n that.$message.success(_this2.$t('message.success'));\n that.userRegisterFormVisible = false;\n }, that.userRegisterFormVisible = false);\n },\n // 登陆控制台\n login: function login() {\n var _this3 = this;\n\n var that = this;\n this.axios.post(\"/appInfo/assert\", this.appLoginForm).then(function (res) {\n // 勾选了保持登录状态,就开启自动登录,直接本地存用户名密码(内部系统浏览器明文存问题不大)\n if (_this3.stayLogged) {\n window.localStorage.setItem('oms_auto_login', JSON.stringify(_this3.appLoginForm));\n }\n\n var appInfo = {\n id: res,\n appName: that.appLoginForm.appName\n }; // 将 appId 存储到 VueStore\n\n _this3.$store.commit(\"initAppInfo\", appInfo); // 跳转到主界面\n\n\n _this3.$router.push(\"/oms/home\");\n }, function (error) {\n window.localStorage.removeItem('oms_auto_login');\n that.$message.error(error);\n });\n },\n // 自动登录\n autoLogin: function autoLogin() {\n var autoLoginString = window.localStorage.getItem(\"oms_auto_login\");\n\n if (autoLoginString === undefined || autoLoginString === null) {\n return;\n }\n\n this.appLoginForm = JSON.parse(autoLoginString);\n this.login();\n }\n },\n mounted: function mounted() {\n // 加载默认语言配置文件\n var localLang = window.localStorage.getItem('oms_lang');\n console.log(\"language from localStorage is %o\", localLang);\n\n if (localLang != null) {\n this.$i18n.locale = localLang;\n } else {\n var lang = navigator.language;\n console.log(\"language from system is %o\", lang);\n\n switch (lang) {\n case \"zh-HK\":\n case \"zh-TW\":\n case \"zh-SG\":\n case \"zh-CN\":\n this.$i18n.locale = \"cn\";\n break;\n\n default:\n this.$i18n.locale = \"en\";\n }\n } // 自动登录\n\n\n this.autoLogin();\n }\n});\n\n//# sourceURL=webpack:///./src/components/Welcome.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), @@ -20,7 +20,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var core /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"container\" } }, [\n _c(\n \"div\",\n { attrs: { id: \"head\" } },\n [\n _c(\n \"el-row\",\n { staticClass: \"row-bg\", attrs: { type: \"flex\", justify: \"end\" } },\n [\n _c(\n \"el-col\",\n { attrs: { span: \"2\" } },\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\", plain: \"\" },\n on: {\n click: function($event) {\n _vm.appRegisterFormVisible = true\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.appRegister\")))]\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: \"2\" } },\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"success\", plain: \"\" },\n on: {\n click: function($event) {\n _vm.userRegisterFormVisible = true\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.userRegister\")))]\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: \"2\" } },\n [\n _c(\n \"el-dropdown\",\n { on: { command: this.common.switchLanguage } },\n [\n _c(\"span\", { staticClass: \"el-dropdown-link\" }, [\n _c(\"p\", { staticStyle: { color: \"#ffffff\" } }, [\n _vm._v(\"Language\"),\n _c(\"i\", {\n staticClass: \"el-icon-arrow-down el-icon--right\"\n })\n ])\n ]),\n _c(\n \"el-dropdown-menu\",\n { attrs: { slot: \"dropdown\" }, slot: \"dropdown\" },\n [\n _c(\"el-dropdown-item\", { attrs: { command: \"en\" } }, [\n _vm._v(\"English\")\n ]),\n _c(\"el-dropdown-item\", { attrs: { command: \"cn\" } }, [\n _vm._v(\"简体中文\")\n ])\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"div\",\n { attrs: { id: \"welcome\" } },\n [\n _c(\"h1\", { attrs: { align: \"center\" } }, [\n _vm._v(_vm._s(_vm.$t(\"message.welcomeTitle\")))\n ]),\n _c(\n \"el-form\",\n {\n ref: \"ruleForm\",\n staticClass: \"loginWrap\",\n attrs: { model: _vm.appLoginForm, \"label-width\": \"0px\" }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { \"label-width\": \"\" } },\n [\n _c(\"el-autocomplete\", {\n staticClass: \"loginWrap\",\n attrs: {\n \"trigger-on-focus\": false,\n \"fetch-suggestions\": _vm.queryAppNames,\n placeholder: _vm.$t(\"message.appName\")\n },\n model: {\n value: _vm.appLoginForm.appName,\n callback: function($$v) {\n _vm.$set(_vm.appLoginForm, \"appName\", $$v)\n },\n expression: \"appLoginForm.appName\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { \"label-width\": \"\" } },\n [\n _c(\"el-input\", {\n attrs: {\n placeholder: _vm.$t(\"message.password\"),\n type: \"password\",\n \"show-password\": \"true\"\n },\n model: {\n value: _vm.appLoginForm.password,\n callback: function($$v) {\n _vm.$set(_vm.appLoginForm, \"password\", $$v)\n },\n expression: \"appLoginForm.password\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n {\n staticClass: \"loginWrap\",\n attrs: { type: \"primary\" },\n on: { click: _vm.login }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.login\")))]\n )\n ],\n 1\n ),\n _c(\n \"el-checkbox\",\n {\n staticStyle: { color: \"#f0f3f4\" },\n model: {\n value: _vm.stayLogged,\n callback: function($$v) {\n _vm.stayLogged = $$v\n },\n expression: \"stayLogged\"\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.stayLogged\")))]\n )\n ],\n 1\n ),\n _c(\n \"el-dialog\",\n {\n attrs: {\n title: _vm.$t(\"message.appRegister\"),\n visible: _vm.appRegisterFormVisible,\n width: \"35%\"\n },\n on: {\n \"update:visible\": function($event) {\n _vm.appRegisterFormVisible = $event\n }\n }\n },\n [\n _c(\n \"el-form\",\n {\n staticStyle: { margin: \"0 5px\" },\n attrs: { model: _vm.appRegisterForm }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.appName\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appRegisterForm.appName,\n callback: function($$v) {\n _vm.$set(_vm.appRegisterForm, \"appName\", $$v)\n },\n expression: \"appRegisterForm.appName\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.appPassword\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appRegisterForm.password,\n callback: function($$v) {\n _vm.$set(_vm.appRegisterForm, \"password\", $$v)\n },\n expression: \"appRegisterForm.password\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\" },\n on: { click: _vm.registerApp }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.register\")))]\n ),\n _c(\n \"el-button\",\n {\n on: {\n click: function($event) {\n _vm.appRegisterFormVisible = false\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.cancel\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-dialog\",\n {\n attrs: {\n title: _vm.$t(\"message.userRegister\"),\n visible: _vm.userRegisterFormVisible,\n width: \"35%\"\n },\n on: {\n \"update:visible\": function($event) {\n _vm.userRegisterFormVisible = $event\n }\n }\n },\n [\n _c(\n \"el-form\",\n {\n staticStyle: { margin: \"0 5px\" },\n attrs: { model: _vm.userRegisterForm }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.name\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.userRegisterForm.username,\n callback: function($$v) {\n _vm.$set(_vm.userRegisterForm, \"username\", $$v)\n },\n expression: \"userRegisterForm.username\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.phone\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.userRegisterForm.phone,\n callback: function($$v) {\n _vm.$set(_vm.userRegisterForm, \"phone\", $$v)\n },\n expression: \"userRegisterForm.phone\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.email\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.userRegisterForm.email,\n callback: function($$v) {\n _vm.$set(_vm.userRegisterForm, \"email\", $$v)\n },\n expression: \"userRegisterForm.email\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\" },\n on: { click: _vm.registerUser }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.register\")))]\n ),\n _c(\n \"el-button\",\n {\n on: {\n click: function($event) {\n _vm.userRegisterFormVisible = false\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.cancel\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/Welcome.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f7b44cbc-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"container\" } }, [\n _c(\n \"div\",\n { attrs: { id: \"head\" } },\n [\n _c(\n \"el-row\",\n { staticClass: \"row-bg\", attrs: { type: \"flex\", justify: \"end\" } },\n [\n _c(\n \"el-col\",\n { attrs: { span: \"2\" } },\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\", plain: \"\" },\n on: {\n click: function($event) {\n _vm.appRegisterFormVisible = true\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.appRegister\")))]\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: \"2\" } },\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"success\", plain: \"\" },\n on: {\n click: function($event) {\n _vm.userRegisterFormVisible = true\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.userRegister\")))]\n )\n ],\n 1\n ),\n _c(\n \"el-col\",\n { attrs: { span: \"2\" } },\n [\n _c(\n \"el-dropdown\",\n { on: { command: this.common.switchLanguage } },\n [\n _c(\"span\", { staticClass: \"el-dropdown-link\" }, [\n _c(\"p\", { staticStyle: { color: \"#ffffff\" } }, [\n _vm._v(\"Language\"),\n _c(\"i\", {\n staticClass: \"el-icon-arrow-down el-icon--right\"\n })\n ])\n ]),\n _c(\n \"el-dropdown-menu\",\n { attrs: { slot: \"dropdown\" }, slot: \"dropdown\" },\n [\n _c(\"el-dropdown-item\", { attrs: { command: \"en\" } }, [\n _vm._v(\"English\")\n ]),\n _c(\"el-dropdown-item\", { attrs: { command: \"cn\" } }, [\n _vm._v(\"简体中文\")\n ])\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"div\",\n { attrs: { id: \"welcome\" } },\n [\n _c(\"h1\", { attrs: { align: \"center\" } }, [\n _vm._v(_vm._s(_vm.$t(\"message.welcomeTitle\")))\n ]),\n _c(\n \"el-form\",\n {\n ref: \"ruleForm\",\n staticClass: \"loginWrap\",\n attrs: { model: _vm.appLoginForm, \"label-width\": \"0px\" }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { \"label-width\": \"\" } },\n [\n _c(\"el-autocomplete\", {\n staticClass: \"loginWrap\",\n attrs: {\n \"trigger-on-focus\": false,\n \"fetch-suggestions\": _vm.queryAppNames,\n placeholder: _vm.$t(\"message.appName\")\n },\n model: {\n value: _vm.appLoginForm.appName,\n callback: function($$v) {\n _vm.$set(_vm.appLoginForm, \"appName\", $$v)\n },\n expression: \"appLoginForm.appName\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { \"label-width\": \"\" } },\n [\n _c(\"el-input\", {\n attrs: {\n placeholder: _vm.$t(\"message.password\"),\n type: \"password\",\n \"show-password\": \"true\"\n },\n model: {\n value: _vm.appLoginForm.password,\n callback: function($$v) {\n _vm.$set(_vm.appLoginForm, \"password\", $$v)\n },\n expression: \"appLoginForm.password\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n {\n staticClass: \"loginWrap\",\n attrs: { type: \"primary\" },\n on: { click: _vm.login }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.login\")))]\n )\n ],\n 1\n ),\n _c(\n \"el-checkbox\",\n {\n staticStyle: { color: \"#f0f3f4\" },\n model: {\n value: _vm.stayLogged,\n callback: function($$v) {\n _vm.stayLogged = $$v\n },\n expression: \"stayLogged\"\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.stayLogged\")))]\n )\n ],\n 1\n ),\n _c(\n \"el-dialog\",\n {\n attrs: {\n title: _vm.$t(\"message.appRegister\"),\n visible: _vm.appRegisterFormVisible,\n width: \"35%\"\n },\n on: {\n \"update:visible\": function($event) {\n _vm.appRegisterFormVisible = $event\n }\n }\n },\n [\n _c(\n \"el-form\",\n {\n staticStyle: { margin: \"0 5px\" },\n attrs: { model: _vm.appRegisterForm }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.appName\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appRegisterForm.appName,\n callback: function($$v) {\n _vm.$set(_vm.appRegisterForm, \"appName\", $$v)\n },\n expression: \"appRegisterForm.appName\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.appPassword\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appRegisterForm.password,\n callback: function($$v) {\n _vm.$set(_vm.appRegisterForm, \"password\", $$v)\n },\n expression: \"appRegisterForm.password\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\" },\n on: { click: _vm.registerApp }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.register\")))]\n ),\n _c(\n \"el-button\",\n {\n on: {\n click: function($event) {\n _vm.appRegisterFormVisible = false\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.cancel\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-dialog\",\n {\n attrs: {\n title: _vm.$t(\"message.userRegister\"),\n visible: _vm.userRegisterFormVisible,\n width: \"35%\"\n },\n on: {\n \"update:visible\": function($event) {\n _vm.userRegisterFormVisible = $event\n }\n }\n },\n [\n _c(\n \"el-form\",\n {\n staticStyle: { margin: \"0 5px\" },\n attrs: { model: _vm.userRegisterForm }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.name\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.userRegisterForm.username,\n callback: function($$v) {\n _vm.$set(_vm.userRegisterForm, \"username\", $$v)\n },\n expression: \"userRegisterForm.username\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.phone\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.userRegisterForm.phone,\n callback: function($$v) {\n _vm.$set(_vm.userRegisterForm, \"phone\", $$v)\n },\n expression: \"userRegisterForm.phone\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.email\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.userRegisterForm.email,\n callback: function($$v) {\n _vm.$set(_vm.userRegisterForm, \"email\", $$v)\n },\n expression: \"userRegisterForm.email\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.webhook\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.userRegisterForm.webHook,\n callback: function($$v) {\n _vm.$set(_vm.userRegisterForm, \"webHook\", $$v)\n },\n expression: \"userRegisterForm.webHook\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\" },\n on: { click: _vm.registerUser }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.register\")))]\n ),\n _c(\n \"el-button\",\n {\n on: {\n click: function($event) {\n _vm.userRegisterFormVisible = false\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.cancel\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/Welcome.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f7b44cbc-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), diff --git a/powerjob-server/src/main/resources/static/js/app.js b/powerjob-server/src/main/resources/static/js/app.js index 68baa8ee..c3e68caa 100644 --- a/powerjob-server/src/main/resources/static/js/app.js +++ b/powerjob-server/src/main/resources/static/js/app.js @@ -256,7 +256,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _bar /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"Navbar\",\n data: function data() {\n return {\n changeAppInfoDialogVisible: false,\n appInfo: {\n id: this.$store.state.appInfo.id,\n appName: this.$store.state.appInfo.appName,\n password: undefined,\n password2: undefined\n }\n };\n },\n methods: {\n // 退出当前应用\n onClickCloseConsole: function onClickCloseConsole() {\n window.localStorage.removeItem('oms_auto_login');\n this.$router.push(\"/\");\n },\n // 处理系统设置的指令时间\n handleSettings: function handleSettings(cmd) {\n switch (cmd) {\n case \"logout\":\n this.onClickCloseConsole();\n break;\n\n case \"changeAppInfo\":\n this.changeAppInfoDialogVisible = true;\n break;\n }\n },\n // 更新应用信息\n saveNewAppInfo: function saveNewAppInfo() {\n var _this = this;\n\n if (this.appInfo.password === this.appInfo.password2) {\n var that = this;\n this.axios.post(\"/appInfo/save\", this.appInfo).then(function () {\n that.$message.success(_this.$t('message.success'));\n that.$router.push(\"/\");\n }, function (e) {\n return that.$message.error(e);\n });\n } else {\n this.$message.error(\"the password doesn't match\");\n }\n }\n }\n});\n\n//# sourceURL=webpack:///./src/components/bar/Navbar.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: \"Navbar\",\n data: function data() {\n return {\n changeAppInfoDialogVisible: false,\n appInfo: {\n id: this.$store.state.appInfo.id,\n appName: this.$store.state.appInfo.appName,\n oldPassword: undefined,\n password: undefined,\n password2: undefined\n }\n };\n },\n methods: {\n // 退出当前应用\n onClickCloseConsole: function onClickCloseConsole() {\n window.localStorage.removeItem('oms_auto_login');\n this.$router.push(\"/\");\n },\n // 处理系统设置的指令时间\n handleSettings: function handleSettings(cmd) {\n switch (cmd) {\n case \"logout\":\n this.onClickCloseConsole();\n break;\n\n case \"changeAppInfo\":\n this.changeAppInfoDialogVisible = true;\n break;\n }\n },\n // 更新应用信息\n saveNewAppInfo: function saveNewAppInfo() {\n var _this = this;\n\n if (this.appInfo.password === this.appInfo.password2) {\n var that = this;\n this.axios.post(\"/appInfo/save\", this.appInfo).then(function () {\n that.$message.success(_this.$t('message.success'));\n that.$router.push(\"/\");\n }, function (e) {\n return that.$message.error(e);\n });\n } else {\n this.$message.error(\"the password doesn't match\");\n }\n }\n }\n});\n\n//# sourceURL=webpack:///./src/components/bar/Navbar.vue?./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), @@ -304,7 +304,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"navbar\" } }, [\n _vm._m(0),\n _c(\n \"div\",\n { attrs: { id: \"right_content\" } },\n [\n _c(\n \"el-dropdown\",\n { on: { command: this.common.switchLanguage } },\n [\n _c(\"span\", { staticClass: \"el-dropdown-link\" }, [\n _c(\"p\", { staticStyle: { color: \"#ffffff\" } }, [\n _vm._v(\"Language\"),\n _c(\"i\", { staticClass: \"el-icon-arrow-down el-icon--right\" })\n ])\n ]),\n _c(\n \"el-dropdown-menu\",\n { attrs: { slot: \"dropdown\" }, slot: \"dropdown\" },\n [\n _c(\"el-dropdown-item\", { attrs: { command: \"en\" } }, [\n _vm._v(\"English\")\n ]),\n _c(\"el-dropdown-item\", { attrs: { command: \"cn\" } }, [\n _vm._v(\"简体中文\")\n ])\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-dropdown\",\n { on: { command: _vm.handleSettings } },\n [\n _c(\"span\", { staticClass: \"el-dropdown-link\" }, [\n _c(\"p\", { staticStyle: { color: \"#ffffff\" } }, [\n _vm._v(\"Settings\"),\n _c(\"i\", { staticClass: \"el-icon-arrow-down el-icon--right\" })\n ])\n ]),\n _c(\n \"el-dropdown-menu\",\n { attrs: { slot: \"dropdown\" }, slot: \"dropdown\" },\n [\n _c(\n \"el-dropdown-item\",\n { attrs: { command: \"changeAppInfo\" } },\n [_vm._v(_vm._s(_vm.$t(\"message.changeAppInfo\")))]\n ),\n _c(\"el-dropdown-item\", { attrs: { command: \"logout\" } }, [\n _vm._v(_vm._s(_vm.$t(\"message.logout\")))\n ])\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-dialog\",\n {\n attrs: { visible: _vm.changeAppInfoDialogVisible, width: \"35%\" },\n on: {\n \"update:visible\": function($event) {\n _vm.changeAppInfoDialogVisible = $event\n }\n }\n },\n [\n _c(\n \"el-form\",\n {\n staticStyle: { margin: \"0 5px\" },\n attrs: { model: _vm.appInfo }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.appName\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appInfo.appName,\n callback: function($$v) {\n _vm.$set(_vm.appInfo, \"appName\", $$v)\n },\n expression: \"appInfo.appName\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.newPassword\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appInfo.password,\n callback: function($$v) {\n _vm.$set(_vm.appInfo, \"password\", $$v)\n },\n expression: \"appInfo.password\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.newPassword2\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appInfo.password2,\n callback: function($$v) {\n _vm.$set(_vm.appInfo, \"password2\", $$v)\n },\n expression: \"appInfo.password2\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\" },\n on: { click: _vm.saveNewAppInfo }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.save\")))]\n ),\n _c(\n \"el-button\",\n {\n on: {\n click: function($event) {\n _vm.changeAppInfoDialogVisible = false\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.cancel\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"logo_content\" } }, [\n _c(\n \"a\",\n { attrs: { href: \"http://www.powerjob.tech/\", target: \"_blank\" } },\n [\n _c(\"img\", {\n attrs: {\n src: __webpack_require__(/*! ../../assets/powerjob-console-logo.png */ \"./src/assets/powerjob-console-logo.png\"),\n alt: \"logo\"\n }\n })\n ]\n )\n ])\n }\n]\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/bar/Navbar.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f7b44cbc-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"navbar\" } }, [\n _vm._m(0),\n _c(\n \"div\",\n { attrs: { id: \"right_content\" } },\n [\n _c(\n \"el-dropdown\",\n { on: { command: this.common.switchLanguage } },\n [\n _c(\"span\", { staticClass: \"el-dropdown-link\" }, [\n _c(\"p\", { staticStyle: { color: \"#ffffff\" } }, [\n _vm._v(\"Language\"),\n _c(\"i\", { staticClass: \"el-icon-arrow-down el-icon--right\" })\n ])\n ]),\n _c(\n \"el-dropdown-menu\",\n { attrs: { slot: \"dropdown\" }, slot: \"dropdown\" },\n [\n _c(\"el-dropdown-item\", { attrs: { command: \"en\" } }, [\n _vm._v(\"English\")\n ]),\n _c(\"el-dropdown-item\", { attrs: { command: \"cn\" } }, [\n _vm._v(\"简体中文\")\n ])\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-dropdown\",\n { on: { command: _vm.handleSettings } },\n [\n _c(\"span\", { staticClass: \"el-dropdown-link\" }, [\n _c(\"p\", { staticStyle: { color: \"#ffffff\" } }, [\n _vm._v(\"Settings\"),\n _c(\"i\", { staticClass: \"el-icon-arrow-down el-icon--right\" })\n ])\n ]),\n _c(\n \"el-dropdown-menu\",\n { attrs: { slot: \"dropdown\" }, slot: \"dropdown\" },\n [\n _c(\n \"el-dropdown-item\",\n { attrs: { command: \"changeAppInfo\" } },\n [_vm._v(_vm._s(_vm.$t(\"message.changeAppInfo\")))]\n ),\n _c(\"el-dropdown-item\", { attrs: { command: \"logout\" } }, [\n _vm._v(_vm._s(_vm.$t(\"message.logout\")))\n ])\n ],\n 1\n )\n ],\n 1\n ),\n _c(\n \"el-dialog\",\n {\n attrs: { visible: _vm.changeAppInfoDialogVisible, width: \"35%\" },\n on: {\n \"update:visible\": function($event) {\n _vm.changeAppInfoDialogVisible = $event\n }\n }\n },\n [\n _c(\n \"el-form\",\n {\n staticStyle: { margin: \"0 5px\" },\n attrs: { model: _vm.appInfo }\n },\n [\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.appName\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appInfo.appName,\n callback: function($$v) {\n _vm.$set(_vm.appInfo, \"appName\", $$v)\n },\n expression: \"appInfo.appName\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.oldPassword\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appInfo.oldPassword,\n callback: function($$v) {\n _vm.$set(_vm.appInfo, \"oldPassword\", $$v)\n },\n expression: \"appInfo.oldPassword\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.newPassword\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appInfo.password,\n callback: function($$v) {\n _vm.$set(_vm.appInfo, \"password\", $$v)\n },\n expression: \"appInfo.password\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n { attrs: { label: _vm.$t(\"message.newPassword2\") } },\n [\n _c(\"el-input\", {\n model: {\n value: _vm.appInfo.password2,\n callback: function($$v) {\n _vm.$set(_vm.appInfo, \"password2\", $$v)\n },\n expression: \"appInfo.password2\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-form-item\",\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"primary\" },\n on: { click: _vm.saveNewAppInfo }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.save\")))]\n ),\n _c(\n \"el-button\",\n {\n on: {\n click: function($event) {\n _vm.changeAppInfoDialogVisible = false\n }\n }\n },\n [_vm._v(_vm._s(_vm.$t(\"message.cancel\")))]\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ],\n 1\n )\n ])\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"logo_content\" } }, [\n _c(\n \"a\",\n { attrs: { href: \"http://www.powerjob.tech/\", target: \"_blank\" } },\n [\n _c(\"img\", {\n attrs: {\n src: __webpack_require__(/*! ../../assets/powerjob-console-logo.png */ \"./src/assets/powerjob-console-logo.png\"),\n alt: \"logo\"\n }\n })\n ]\n )\n ])\n }\n]\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack:///./src/components/bar/Navbar.vue?./node_modules/cache-loader/dist/cjs.js?%7B%22cacheDirectory%22:%22node_modules/.cache/vue-loader%22,%22cacheIdentifier%22:%22f7b44cbc-vue-loader-template%22%7D!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options"); /***/ }), @@ -676,7 +676,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue_ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/objectSpread2 */ \"./node_modules/@babel/runtime/helpers/esm/objectSpread2.js\");\n/* harmony import */ var element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-ui/lib/locale/lang/zh-CN */ \"./node_modules/element-ui/lib/locale/lang/zh-CN.js\");\n/* harmony import */ var element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nvar cn = Object(_Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n message: {\n // common\n 'save': '保存',\n 'cancel': '取消',\n 'refresh': '刷新',\n 'query': '查询',\n 'reset': '重置',\n 'keyword': '关键字',\n 'run': '运行',\n 'edit': '编辑',\n 'delete': '删除',\n 'success': '成功',\n 'failed': '失败',\n 'detail': '详情',\n 'download': '下载',\n 'stop': '停止',\n 'back': '返回',\n 'all': '全部',\n 'more': '| 更多',\n // 欢迎界面\n 'appRegister': '执行应用注册',\n 'userRegister': '报警用户录入',\n 'appNameInputPLH': '请输入应用名称',\n 'appName': '应用名称',\n 'appPassword': '密码',\n 'register': '注册',\n 'name': '姓名',\n 'phone': '手机号',\n 'email': '邮箱地址',\n 'welcomeTitle': '欢迎使用 PowerJob!',\n 'login': '登陆',\n 'logout': '退出',\n 'changeAppInfo': '修改应用信息',\n 'newPassword': '新密码',\n 'newPassword2': '确认密码',\n 'stayLogged': '保持登录状态',\n // 左侧tab栏\n 'tabHome': '系统首页',\n 'tabJobManage': '任务管理',\n 'tabJobInstance': '任务实例',\n 'tabWorkflowManage': '工作流管理',\n 'tabWfInstance': '工作流实例',\n 'tabContainerOps': '容器',\n 'tabTemplate': '模版生成',\n 'tabContainerManager': '容器运维',\n // 系统首页\n 'omsServerTime': '调度服务器时间',\n 'omsServerTimezone': '调度服务器时区',\n 'localBrowserTime': '本地时间',\n 'localBrowserTimezone': '本地时区',\n 'githubURL': '项目地址',\n 'docURL': '文档地址',\n 'totalJobNum': '任务总数',\n 'runningInstanceNum': '当前运行实例数',\n 'recentFailedInstanceNum': '近期失败任务数',\n 'workerNum': '集群机器数',\n 'workerAddress': '机器地址',\n 'cpuLoad': 'CPU 占用',\n 'memoryLoad': '内存占用',\n 'diskLoad': '磁盘占用',\n // 任务管理\n 'jobId': '任务ID',\n 'instanceId': '任务实例ID',\n 'jobName': '任务名称',\n 'scheduleInfo': '定时信息',\n 'executeType': '执行类型',\n 'processorType': '处理器类型',\n 'status': '状态',\n 'operation': '操作',\n 'newJob': '新建任务',\n 'jobDescription': '任务描述',\n 'jobParams': '任务参数',\n 'timeExpressionType': '时间表达式类型',\n 'timeExpressionPlaceHolder': 'CRON填写CRON表达式,秒级任务填写整数,API无需填写',\n 'executeConfig': '执行配置',\n 'javaProcessorInfoPLH': '全限定类名,eg:com.github.kfcfans.DemoProcessor',\n 'containerProcessorInfoPLH': '容器ID#全限定类名,eg:1#com.github.kfcfans.DemoProcessor',\n 'shellProcessorInfoPLH': 'SHELL脚本文件内容',\n 'pythonProcessorInfoPLH': 'Python脚本文件内容',\n 'runtimeConfig': '运行时配置',\n 'maxInstanceNum': '最大实例数',\n 'threadConcurrency': '单机线程并发度',\n 'timeout': '运行时间限制(毫秒)',\n 'retryConfig': '重试配置',\n 'taskRetryTimes': 'Instance重试次数',\n 'subTaskRetryTimes': \"Task重试次数\",\n 'workerConfig': '机器配置',\n 'minCPU': '最低CPU核心数',\n 'minMemory': '最低内存(GB)',\n 'minDisk': '最低磁盘空间(GB)',\n 'clusterConfig': '集群配置',\n 'designatedWorkerAddress': '执行机器地址',\n 'designatedWorkerAddressPLH': '执行机器地址(可选,不指定代表全部;多值英文逗号分割)',\n 'maxWorkerNum': '最大执行机器数量',\n 'maxWorkerNumPLH': '最大执行机器数量(0代表不限)',\n 'alarmConfig': '报警配置',\n 'alarmSelectorPLH': '选择报警通知人员',\n 'standalone': '单机执行',\n 'broadcast': '广播执行',\n 'map': 'Map执行',\n 'mapReduce': 'MapReduce执行',\n 'fixRate': '固定频率(毫秒)',\n 'fixDelay': '固定延迟(毫秒)',\n 'workflow': '工作流',\n 'onlineCronTool': '在线生成工具',\n 'javaContainer': 'Java(容器)',\n 'runHistory': '运行记录',\n 'reRun': '重跑',\n // 任务实例管理\n 'wfInstanceId': '工作流实例ID',\n 'normalInstance': '普通任务实例',\n 'wfInstance': '工作流任务实例',\n 'triggerTime': '触发时间',\n 'finishedTime': '结束时间',\n 'log': '日志',\n 'runningTimes': '运行次数',\n 'taskTrackerAddress': 'TaskTracker 地址',\n 'startTime': '开始时间',\n 'expectedTriggerTime': '预计执行时间',\n 'result': '任务结果',\n 'subTaskInfo': 'Task 信息',\n 'secondlyJobHistory': '最近 10 条秒级任务历史记录(秒级任务专用)',\n 'subInstanceId': '子任务实例ID',\n 'instanceParams': '任务实例参数',\n // 工作流管理\n 'wfId': '工作流ID',\n 'wfName': '工作流名称',\n 'newWorkflow': '新建工作流',\n 'wfDescription': '工作流描述',\n 'importJob': '导入任务',\n 'deleteJob': '删除任务',\n 'newStartPoint': '新增起点',\n 'newEndPoint': '新增终点',\n 'deleteEdge': '删除边',\n 'importJobTitle': \"请选择需要导入工作流的任务\",\n 'wfTimeExpressionPLH': 'CRON填写CRON表达式,API无需填写',\n 'import': '导入',\n 'ntfClickNeedDeleteNode': '请点击需要删除的节点',\n 'ntfClickStartPoint': '请点击起始节点',\n 'ntfClickTargetPoint': '请点击目标节点',\n 'ntfClickDeleteEdge': '请点击需要删除的边',\n 'ntfAddStartPointFirst': '请先添加起点!',\n 'ntfInvalidEdge': '非法操作(起点终点相同)!',\n // 工作流实例\n 'wfTips': 'tips:点击节点可查看任务实例详情',\n 'ntfClickWaitingNode': '等待上游任务中...未生成任务实例,无法查看详情!',\n 'wfInitParams': '启动参数',\n // 容器\n 'newContainer': '新增容器',\n 'containerType': '容器类型',\n 'containerGitURL': 'Git仓库地址',\n 'branchName': '分支名称',\n 'username': '用户名',\n 'password': '密码',\n 'containerId': '容器ID',\n 'containerName': '容器名称',\n 'containerVersion': '容器版本',\n 'deployTime': '部署时间',\n 'deploy': '部署',\n 'deployedWorkerList': '机器列表',\n 'uploadTips': '拖拽或点击文件后会自动上传',\n // 任务实例状态\n 'waitingDispatch': '等待派发',\n 'waitingWorkerReceive': '等待Worker接收',\n 'running': '运行中',\n 'stopped': '手动停止',\n 'canceled': '手动取消',\n 'wfWaiting': '等待调度',\n 'waitingUpstream': '等待上游节点'\n }\n}, element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1___default.a);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (cn);\n\n//# sourceURL=webpack:///./src/i18n/langs/cn.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/objectSpread2 */ \"./node_modules/@babel/runtime/helpers/esm/objectSpread2.js\");\n/* harmony import */ var element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-ui/lib/locale/lang/zh-CN */ \"./node_modules/element-ui/lib/locale/lang/zh-CN.js\");\n/* harmony import */ var element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nvar cn = Object(_Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n message: {\n // common\n 'save': '保存',\n 'cancel': '取消',\n 'refresh': '刷新',\n 'query': '查询',\n 'reset': '重置',\n 'keyword': '关键字',\n 'run': '运行',\n 'edit': '编辑',\n 'delete': '删除',\n 'success': '成功',\n 'failed': '失败',\n 'detail': '详情',\n 'download': '下载',\n 'stop': '停止',\n 'back': '返回',\n 'all': '全部',\n 'more': '| 更多',\n // 欢迎界面\n 'appRegister': '执行应用注册',\n 'userRegister': '报警用户录入',\n 'appNameInputPLH': '请输入应用名称',\n 'appName': '应用名称',\n 'appPassword': '密码',\n 'register': '注册',\n 'name': '姓名',\n 'phone': '手机号',\n 'email': '邮箱地址',\n 'webhook': 'WebHook',\n 'welcomeTitle': '欢迎使用 PowerJob!',\n 'login': '登陆',\n 'logout': '退出',\n 'changeAppInfo': '修改应用信息',\n 'newPassword': '新密码',\n 'newPassword2': '确认密码',\n 'stayLogged': '保持登录状态',\n // 左侧tab栏\n 'tabHome': '系统首页',\n 'tabJobManage': '任务管理',\n 'tabJobInstance': '任务实例',\n 'tabWorkflowManage': '工作流管理',\n 'tabWfInstance': '工作流实例',\n 'tabContainerOps': '容器',\n 'tabTemplate': '模版生成',\n 'tabContainerManager': '容器运维',\n // 系统首页\n 'omsServerTime': '调度服务器时间',\n 'omsServerTimezone': '调度服务器时区',\n 'localBrowserTime': '本地时间',\n 'localBrowserTimezone': '本地时区',\n 'githubURL': '项目地址',\n 'docURL': '文档地址',\n 'totalJobNum': '任务总数',\n 'runningInstanceNum': '当前运行实例数',\n 'recentFailedInstanceNum': '近期失败任务数',\n 'workerNum': '集群机器数',\n 'workerAddress': '机器地址',\n 'cpuLoad': 'CPU 占用',\n 'memoryLoad': '内存占用',\n 'diskLoad': '磁盘占用',\n // 任务管理\n 'jobId': '任务ID',\n 'instanceId': '任务实例ID',\n 'jobName': '任务名称',\n 'scheduleInfo': '定时信息',\n 'executeType': '执行类型',\n 'processorType': '处理器类型',\n 'status': '状态',\n 'operation': '操作',\n 'newJob': '新建任务',\n 'jobDescription': '任务描述',\n 'jobParams': '任务参数',\n 'timeExpressionType': '时间表达式类型',\n 'timeExpressionPlaceHolder': 'CRON填写CRON表达式,秒级任务填写整数,API无需填写',\n 'executeConfig': '执行配置',\n 'javaProcessorInfoPLH': '全限定类名,eg:com.github.kfcfans.DemoProcessor',\n 'containerProcessorInfoPLH': '容器ID#全限定类名,eg:1#com.github.kfcfans.DemoProcessor',\n 'shellProcessorInfoPLH': 'SHELL脚本文件内容',\n 'pythonProcessorInfoPLH': 'Python脚本文件内容',\n 'runtimeConfig': '运行时配置',\n 'maxInstanceNum': '最大实例数',\n 'threadConcurrency': '单机线程并发度',\n 'timeout': '运行时间限制(毫秒)',\n 'retryConfig': '重试配置',\n 'taskRetryTimes': 'Instance重试次数',\n 'subTaskRetryTimes': \"Task重试次数\",\n 'workerConfig': '机器配置',\n 'minCPU': '最低CPU核心数',\n 'minMemory': '最低内存(GB)',\n 'minDisk': '最低磁盘空间(GB)',\n 'clusterConfig': '集群配置',\n 'designatedWorkerAddress': '执行机器地址',\n 'designatedWorkerAddressPLH': '执行机器地址(可选,不指定代表全部;多值英文逗号分割)',\n 'maxWorkerNum': '最大执行机器数量',\n 'maxWorkerNumPLH': '最大执行机器数量(0代表不限)',\n 'alarmConfig': '报警配置',\n 'alarmSelectorPLH': '选择报警通知人员',\n 'standalone': '单机执行',\n 'broadcast': '广播执行',\n 'map': 'Map执行',\n 'mapReduce': 'MapReduce执行',\n 'fixRate': '固定频率(毫秒)',\n 'fixDelay': '固定延迟(毫秒)',\n 'workflow': '工作流',\n 'onlineCronTool': '在线生成工具',\n 'javaContainer': 'Java(容器)',\n 'runHistory': '运行记录',\n 'reRun': '重跑',\n // 任务实例管理\n 'wfInstanceId': '工作流实例ID',\n 'normalInstance': '普通任务实例',\n 'wfInstance': '工作流任务实例',\n 'triggerTime': '触发时间',\n 'finishedTime': '结束时间',\n 'log': '日志',\n 'runningTimes': '运行次数',\n 'taskTrackerAddress': 'TaskTracker 地址',\n 'startTime': '开始时间',\n 'expectedTriggerTime': '预计执行时间',\n 'result': '任务结果',\n 'subTaskInfo': 'Task 信息',\n 'secondlyJobHistory': '最近 10 条秒级任务历史记录(秒级任务专用)',\n 'subInstanceId': '子任务实例ID',\n 'instanceParams': '任务实例参数',\n // 工作流管理\n 'wfId': '工作流ID',\n 'wfName': '工作流名称',\n 'newWorkflow': '新建工作流',\n 'wfDescription': '工作流描述',\n 'importJob': '导入任务',\n 'deleteJob': '删除任务',\n 'newStartPoint': '新增起点',\n 'newEndPoint': '新增终点',\n 'deleteEdge': '删除边',\n 'importJobTitle': \"请选择需要导入工作流的任务\",\n 'wfTimeExpressionPLH': 'CRON填写CRON表达式,API无需填写',\n 'import': '导入',\n 'ntfClickNeedDeleteNode': '请点击需要删除的节点',\n 'ntfClickStartPoint': '请点击起始节点',\n 'ntfClickTargetPoint': '请点击目标节点',\n 'ntfClickDeleteEdge': '请点击需要删除的边',\n 'ntfAddStartPointFirst': '请先添加起点!',\n 'ntfInvalidEdge': '非法操作(起点终点相同)!',\n // 工作流实例\n 'wfTips': 'tips:点击节点可查看任务实例详情',\n 'ntfClickWaitingNode': '等待上游任务中...未生成任务实例,无法查看详情!',\n 'wfInitParams': '启动参数',\n // 容器\n 'newContainer': '新增容器',\n 'containerType': '容器类型',\n 'containerGitURL': 'Git仓库地址',\n 'branchName': '分支名称',\n 'username': '用户名',\n 'oldPassword': '旧密码',\n 'password': '密码',\n 'containerId': '容器ID',\n 'containerName': '容器名称',\n 'containerVersion': '容器版本',\n 'deployTime': '部署时间',\n 'deploy': '部署',\n 'deployedWorkerList': '机器列表',\n 'uploadTips': '拖拽或点击文件后会自动上传',\n // 任务实例状态\n 'waitingDispatch': '等待派发',\n 'waitingWorkerReceive': '等待Worker接收',\n 'running': '运行中',\n 'stopped': '手动停止',\n 'canceled': '手动取消',\n 'wfWaiting': '等待调度',\n 'waitingUpstream': '等待上游节点'\n }\n}, element_ui_lib_locale_lang_zh_CN__WEBPACK_IMPORTED_MODULE_1___default.a);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (cn);\n\n//# sourceURL=webpack:///./src/i18n/langs/cn.js?"); /***/ }), @@ -688,7 +688,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Use /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/objectSpread2 */ \"./node_modules/@babel/runtime/helpers/esm/objectSpread2.js\");\n/* harmony import */ var element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-ui/lib/locale/lang/en */ \"./node_modules/element-ui/lib/locale/lang/en.js\");\n/* harmony import */ var element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nvar en = Object(_Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n message: {\n 'save': 'save',\n 'cancel': 'cancel',\n 'refresh': 'refresh',\n 'query': 'query',\n 'reset': 'reset',\n 'keyword': 'keyword',\n 'run': 'run',\n 'edit': 'edit',\n 'delete': 'delete',\n 'success': 'success',\n 'failed': 'failed',\n 'detail': 'detail',\n 'download': 'download',\n 'stop': 'stop',\n 'back': 'back',\n 'all': 'ALL',\n 'more': '| more',\n // 欢迎界面\n 'appRegister': 'App Registration',\n 'userRegister': 'User Registration',\n 'appNameInputPLH': 'Enter The AppName',\n 'appName': 'AppName',\n 'appPassword': 'AppPassword',\n 'register': 'register',\n 'name': 'name',\n 'phone': 'phone',\n 'email': 'email',\n 'welcomeTitle': 'Welcome to use PowerJob!',\n 'login': 'Login',\n 'logout': 'Logout',\n 'changeAppInfo': 'Change AppInfo',\n 'newPassword': 'New Password',\n 'newPassword2': 'Check New Password',\n 'stayLogged': 'Keep me logged in',\n 'tabHome': 'Home',\n 'tabJobManage': 'JobManage',\n 'tabJobInstance': 'JobInstance',\n 'tabWorkflowManage': 'WorkflowManage',\n 'tabWfInstance': 'WorkflowInstance',\n 'tabContainerOps': 'ContainerOps',\n 'tabTemplate': 'TemplateGenerator',\n 'tabContainerManager': 'ContainerManager',\n 'omsServerTime': 'Server Time',\n 'omsServerTimezone': 'Server Timezone',\n 'localBrowserTime': 'Local Time',\n 'localBrowserTimezone': 'Local Timezone',\n 'githubURL': 'GitHub Repo',\n 'docURL': 'Document Address',\n 'totalJobNum': 'total job Num',\n 'runningInstanceNum': 'running instance num',\n 'recentFailedInstanceNum': 'recent failed instance Num',\n 'workerNum': 'worker cluster size',\n 'workerAddress': 'worker address',\n 'cpuLoad': 'CPU Load',\n 'memoryLoad': 'Memory Load',\n 'diskLoad': 'Disk Load',\n // JobManage\n 'jobId': 'JobID',\n 'instanceId': 'InstanceID',\n 'jobName': 'JobName',\n 'scheduleInfo': 'ScheduleInfo',\n 'executeType': 'ExecuteType',\n 'processorType': 'ProcessorType',\n 'status': 'status',\n 'operation': 'operation',\n 'newJob': 'New Job',\n 'jobDescription': 'JobDescription',\n 'jobParams': 'JobParams',\n 'timeExpressionType': 'TimeExpressionType',\n 'timeExpressionPlaceHolder': 'cron expression or number(millions) for fix_rate/fix_delay job',\n 'executeConfig': 'ExecuteConfig',\n 'javaProcessorInfoPLH': 'classname, eg: com.github.kfcfans.DemoProcessor',\n 'containerProcessorInfoPLH': 'containerID#classname, eg: 1#com.github.kfcfans.DemoProcessor',\n 'shellProcessorInfoPLH': 'shell script',\n 'pythonProcessorInfoPLH': 'python script',\n 'runtimeConfig': 'RuntimeConfig',\n 'maxInstanceNum': 'MaxInstanceNum',\n 'threadConcurrency': 'ThreadConcurrency',\n 'timeout': 'TimeLimit (ms)',\n 'retryConfig': 'RetryConfig',\n 'taskRetryTimes': 'InstanceRetryTimes',\n 'subTaskRetryTimes': \"TaskRetryTimes\",\n 'workerConfig': 'WorkerConfig',\n 'minCPU': 'MinAvailableCPUCores',\n 'minMemory': 'MinMemory(GB)',\n 'minDisk': 'MinDisk(GB)',\n 'clusterConfig': 'ClusterConfig',\n 'designatedWorkerAddress': 'DesignatedWorkerAddress',\n 'designatedWorkerAddressPLH': 'empty for all worker or IP:Port,IP:Port ...',\n 'maxWorkerNum': 'MaxWorkerNum',\n 'maxWorkerNumPLH': '0 means no limit',\n 'alarmConfig': 'AlarmConfig',\n 'alarmSelectorPLH': 'select alarm recipient ',\n 'standalone': 'Standalone',\n 'broadcast': 'Broadcast',\n 'map': 'MAP',\n 'mapReduce': 'MapReduce',\n 'fixRate': 'Fix Rate (ms)',\n 'fixDelay': 'Fix Delay (ms)',\n 'workflow': 'workflow',\n 'onlineCronTool': 'online cron tool',\n 'javaContainer': 'Java(Container)',\n 'runHistory': 'history',\n 'reRun': 'retry',\n // JobInstance\n 'wfInstanceId': 'WorkflowInstanceId',\n 'normalInstance': 'normal instance',\n 'wfInstance': 'workflow instance',\n 'triggerTime': 'trigger time',\n 'finishedTime': 'finished time',\n 'log': 'log',\n 'runningTimes': 'running times',\n 'taskTrackerAddress': 'taskTracker address',\n 'startTime': 'start time',\n 'expectedTriggerTime': 'expected trigger time',\n 'result': 'result',\n 'subTaskInfo': 'task info',\n 'secondlyJobHistory': 'secondlyJobHistory',\n 'subInstanceId': 'subInstanceId',\n 'instanceParams': 'instanceParams',\n // workflowManage\n 'wfId': 'WorkflowID',\n 'wfName': 'WorkflowName',\n 'newWorkflow': 'new workflow',\n 'wfDescription': 'description',\n 'importJob': 'import job',\n 'deleteJob': 'delete job',\n 'newStartPoint': 'new starting point',\n 'newEndPoint': 'new ending point',\n 'deleteEdge': 'delete edge',\n 'importJobTitle': \"select jobs\",\n 'wfTimeExpressionPLH': 'cron expression for CRON or empty for API',\n 'import': 'import',\n 'ntfClickNeedDeleteNode': 'Please click on the node you want to delete.',\n 'ntfClickStartPoint': 'Please click on the start node',\n 'ntfClickTargetPoint': 'Please click on the end node',\n 'ntfClickDeleteEdge': 'Please click on the edge you want to remove.',\n 'ntfAddStartPointFirst': 'Please add the starting point first!',\n 'ntfInvalidEdge': 'Illegal operation (same origin and destination)!',\n // workflowInstance\n 'wfTips': 'tips:Click on a node to view details of the job instance',\n 'ntfClickWaitingNode': 'Waiting for the upstream instances... No instances have been generated, and details cannot be viewed!',\n 'wfInitParams': 'initParams',\n // 容器\n 'newContainer': 'new container',\n 'containerType': 'type',\n 'containerGitURL': 'Git URL',\n 'branchName': 'branch',\n 'username': 'username',\n 'password': 'password',\n 'containerId': 'ID',\n 'containerName': 'name',\n 'containerVersion': 'version',\n 'deployTime': 'deployed time',\n 'deploy': 'deploy',\n 'deployedWorkerList': 'worker list',\n 'uploadTips': 'Drag and drop or click on the file to upload it automatically',\n // 任务实例状态\n 'waitingDispatch': 'waiting dispatch',\n 'waitingWorkerReceive': 'waiting receive',\n 'running': 'running',\n 'stopped': 'stopped',\n 'canceled': 'canceled',\n 'wfWaiting': 'waiting',\n 'waitingUpstream': 'waiting upstream'\n }\n}, element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1___default.a);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (en);\n\n//# sourceURL=webpack:///./src/i18n/langs/en.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/esm/objectSpread2 */ \"./node_modules/@babel/runtime/helpers/esm/objectSpread2.js\");\n/* harmony import */ var element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! element-ui/lib/locale/lang/en */ \"./node_modules/element-ui/lib/locale/lang/en.js\");\n/* harmony import */ var element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1__);\n\n\n\nvar en = Object(_Users_salieri_Desktop_code_PowerJob_Console_node_modules_babel_runtime_helpers_esm_objectSpread2__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n message: {\n 'save': 'save',\n 'cancel': 'cancel',\n 'refresh': 'refresh',\n 'query': 'query',\n 'reset': 'reset',\n 'keyword': 'keyword',\n 'run': 'run',\n 'edit': 'edit',\n 'delete': 'delete',\n 'success': 'success',\n 'failed': 'failed',\n 'detail': 'detail',\n 'download': 'download',\n 'stop': 'stop',\n 'back': 'back',\n 'all': 'ALL',\n 'more': '| more',\n // 欢迎界面\n 'appRegister': 'App Registration',\n 'userRegister': 'User Registration',\n 'appNameInputPLH': 'Enter The AppName',\n 'appName': 'AppName',\n 'appPassword': 'AppPassword',\n 'register': 'register',\n 'name': 'name',\n 'phone': 'phone',\n 'email': 'email',\n 'webhook': 'webhook',\n 'welcomeTitle': 'Welcome to use PowerJob!',\n 'login': 'Login',\n 'logout': 'Logout',\n 'changeAppInfo': 'Change AppInfo',\n 'newPassword': 'New Password',\n 'newPassword2': 'Check New Password',\n 'stayLogged': 'Keep me logged in',\n 'tabHome': 'Home',\n 'tabJobManage': 'JobManage',\n 'tabJobInstance': 'JobInstance',\n 'tabWorkflowManage': 'WorkflowManage',\n 'tabWfInstance': 'WorkflowInstance',\n 'tabContainerOps': 'ContainerOps',\n 'tabTemplate': 'TemplateGenerator',\n 'tabContainerManager': 'ContainerManager',\n 'omsServerTime': 'Server Time',\n 'omsServerTimezone': 'Server Timezone',\n 'localBrowserTime': 'Local Time',\n 'localBrowserTimezone': 'Local Timezone',\n 'githubURL': 'GitHub Repo',\n 'docURL': 'Document Address',\n 'totalJobNum': 'total job Num',\n 'runningInstanceNum': 'running instance num',\n 'recentFailedInstanceNum': 'recent failed instance Num',\n 'workerNum': 'worker cluster size',\n 'workerAddress': 'worker address',\n 'cpuLoad': 'CPU Load',\n 'memoryLoad': 'Memory Load',\n 'diskLoad': 'Disk Load',\n // JobManage\n 'jobId': 'JobID',\n 'instanceId': 'InstanceID',\n 'jobName': 'JobName',\n 'scheduleInfo': 'ScheduleInfo',\n 'executeType': 'ExecuteType',\n 'processorType': 'ProcessorType',\n 'status': 'status',\n 'operation': 'operation',\n 'newJob': 'New Job',\n 'jobDescription': 'JobDescription',\n 'jobParams': 'JobParams',\n 'timeExpressionType': 'TimeExpressionType',\n 'timeExpressionPlaceHolder': 'cron expression or number(millions) for fix_rate/fix_delay job',\n 'executeConfig': 'ExecuteConfig',\n 'javaProcessorInfoPLH': 'classname, eg: com.github.kfcfans.DemoProcessor',\n 'containerProcessorInfoPLH': 'containerID#classname, eg: 1#com.github.kfcfans.DemoProcessor',\n 'shellProcessorInfoPLH': 'shell script',\n 'pythonProcessorInfoPLH': 'python script',\n 'runtimeConfig': 'RuntimeConfig',\n 'maxInstanceNum': 'MaxInstanceNum',\n 'threadConcurrency': 'ThreadConcurrency',\n 'timeout': 'TimeLimit (ms)',\n 'retryConfig': 'RetryConfig',\n 'taskRetryTimes': 'InstanceRetryTimes',\n 'subTaskRetryTimes': \"TaskRetryTimes\",\n 'workerConfig': 'WorkerConfig',\n 'minCPU': 'MinAvailableCPUCores',\n 'minMemory': 'MinMemory(GB)',\n 'minDisk': 'MinDisk(GB)',\n 'clusterConfig': 'ClusterConfig',\n 'designatedWorkerAddress': 'DesignatedWorkerAddress',\n 'designatedWorkerAddressPLH': 'empty for all worker or IP:Port,IP:Port ...',\n 'maxWorkerNum': 'MaxWorkerNum',\n 'maxWorkerNumPLH': '0 means no limit',\n 'alarmConfig': 'AlarmConfig',\n 'alarmSelectorPLH': 'select alarm recipient ',\n 'standalone': 'Standalone',\n 'broadcast': 'Broadcast',\n 'map': 'MAP',\n 'mapReduce': 'MapReduce',\n 'fixRate': 'Fix Rate (ms)',\n 'fixDelay': 'Fix Delay (ms)',\n 'workflow': 'workflow',\n 'onlineCronTool': 'online cron tool',\n 'javaContainer': 'Java(Container)',\n 'runHistory': 'history',\n 'reRun': 'retry',\n // JobInstance\n 'wfInstanceId': 'WorkflowInstanceId',\n 'normalInstance': 'normal instance',\n 'wfInstance': 'workflow instance',\n 'triggerTime': 'trigger time',\n 'finishedTime': 'finished time',\n 'log': 'log',\n 'runningTimes': 'running times',\n 'taskTrackerAddress': 'taskTracker address',\n 'startTime': 'start time',\n 'expectedTriggerTime': 'expected trigger time',\n 'result': 'result',\n 'subTaskInfo': 'task info',\n 'secondlyJobHistory': 'secondlyJobHistory',\n 'subInstanceId': 'subInstanceId',\n 'instanceParams': 'instanceParams',\n // workflowManage\n 'wfId': 'WorkflowID',\n 'wfName': 'WorkflowName',\n 'newWorkflow': 'new workflow',\n 'wfDescription': 'description',\n 'importJob': 'import job',\n 'deleteJob': 'delete job',\n 'newStartPoint': 'new starting point',\n 'newEndPoint': 'new ending point',\n 'deleteEdge': 'delete edge',\n 'importJobTitle': \"select jobs\",\n 'wfTimeExpressionPLH': 'cron expression for CRON or empty for API',\n 'import': 'import',\n 'ntfClickNeedDeleteNode': 'Please click on the node you want to delete.',\n 'ntfClickStartPoint': 'Please click on the start node',\n 'ntfClickTargetPoint': 'Please click on the end node',\n 'ntfClickDeleteEdge': 'Please click on the edge you want to remove.',\n 'ntfAddStartPointFirst': 'Please add the starting point first!',\n 'ntfInvalidEdge': 'Illegal operation (same origin and destination)!',\n // workflowInstance\n 'wfTips': 'tips:Click on a node to view details of the job instance',\n 'ntfClickWaitingNode': 'Waiting for the upstream instances... No instances have been generated, and details cannot be viewed!',\n 'wfInitParams': 'initParams',\n // 容器\n 'newContainer': 'new container',\n 'containerType': 'type',\n 'containerGitURL': 'Git URL',\n 'branchName': 'branch',\n 'username': 'username',\n 'oldPassword': 'old password',\n 'password': 'password',\n 'containerId': 'ID',\n 'containerName': 'name',\n 'containerVersion': 'version',\n 'deployTime': 'deployed time',\n 'deploy': 'deploy',\n 'deployedWorkerList': 'worker list',\n 'uploadTips': 'Drag and drop or click on the file to upload it automatically',\n // 任务实例状态\n 'waitingDispatch': 'waiting dispatch',\n 'waitingWorkerReceive': 'waiting receive',\n 'running': 'running',\n 'stopped': 'stopped',\n 'canceled': 'canceled',\n 'wfWaiting': 'waiting',\n 'waitingUpstream': 'waiting upstream'\n }\n}, element_ui_lib_locale_lang_en__WEBPACK_IMPORTED_MODULE_1___default.a);\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (en);\n\n//# sourceURL=webpack:///./src/i18n/langs/en.js?"); /***/ }), diff --git a/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/UtilsTest.java b/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/UtilsTest.java index c6ebe28b..c8b52f20 100644 --- a/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/UtilsTest.java +++ b/powerjob-server/src/test/java/com/github/kfcfans/powerjob/server/test/UtilsTest.java @@ -1,6 +1,5 @@ package com.github.kfcfans.powerjob.server.test; -import com.github.kfcfans.powerjob.server.OhMyApplication; import com.github.kfcfans.powerjob.server.common.utils.CronExpression; import com.github.kfcfans.powerjob.server.common.utils.timewheel.HashedWheelTimer; import com.github.kfcfans.powerjob.server.common.utils.timewheel.TimerFuture; @@ -11,9 +10,11 @@ import org.junit.Test; import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.TimeZone; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * 工具类测试 @@ -92,4 +93,11 @@ public class UtilsTest { System.out.println(StringUtils.containsWhitespace(goodAppName)); System.out.println(StringUtils.containsWhitespace(appName)); } + + @Test + public void filterTest() { + List test = Lists.newArrayList("A", "B", null, "C", null); + List list = test.stream().filter(Objects::nonNull).collect(Collectors.toList()); + System.out.println(list); + } } diff --git a/powerjob-worker-agent/pom.xml b/powerjob-worker-agent/pom.xml index e406c41a..b63a6860 100644 --- a/powerjob-worker-agent/pom.xml +++ b/powerjob-worker-agent/pom.xml @@ -10,12 +10,12 @@ 4.0.0 powerjob-worker-agent - 3.3.2 + 3.3.3 jar - 3.3.2 + 3.3.3 1.2.3 4.3.2 diff --git a/powerjob-worker-samples/pom.xml b/powerjob-worker-samples/pom.xml index bda8400c..2744ab12 100644 --- a/powerjob-worker-samples/pom.xml +++ b/powerjob-worker-samples/pom.xml @@ -10,11 +10,11 @@ 4.0.0 powerjob-worker-samples - 3.3.2 + 3.3.3 2.2.6.RELEASE - 3.3.2 + 3.3.3 1.2.68 diff --git a/powerjob-worker-spring-boot-starter/pom.xml b/powerjob-worker-spring-boot-starter/pom.xml index 882caa38..a9dadcd3 100644 --- a/powerjob-worker-spring-boot-starter/pom.xml +++ b/powerjob-worker-spring-boot-starter/pom.xml @@ -10,11 +10,11 @@ 4.0.0 powerjob-worker-spring-boot-starter - 3.3.2 + 3.3.3 jar - 3.3.2 + 3.3.3 2.2.6.RELEASE diff --git a/powerjob-worker-spring-boot-starter/src/main/java/com/github/kfcfans/powerjob/worker/autoconfigure/PowerJobAutoConfiguration.java b/powerjob-worker-spring-boot-starter/src/main/java/com/github/kfcfans/powerjob/worker/autoconfigure/PowerJobAutoConfiguration.java index 31615b54..f562d391 100644 --- a/powerjob-worker-spring-boot-starter/src/main/java/com/github/kfcfans/powerjob/worker/autoconfigure/PowerJobAutoConfiguration.java +++ b/powerjob-worker-spring-boot-starter/src/main/java/com/github/kfcfans/powerjob/worker/autoconfigure/PowerJobAutoConfiguration.java @@ -1,6 +1,7 @@ package com.github.kfcfans.powerjob.worker.autoconfigure; import com.github.kfcfans.powerjob.common.utils.CommonUtils; +import com.github.kfcfans.powerjob.common.utils.NetUtils; import com.github.kfcfans.powerjob.worker.OhMyWorker; import com.github.kfcfans.powerjob.worker.common.OhMyConfig; import org.springframework.boot.autoconfigure.condition.AnyNestedCondition; @@ -37,8 +38,14 @@ public class PowerJobAutoConfiguration { // 1. 创建配置文件 OhMyConfig config = new OhMyConfig(); - // 可以不显式设置,默认值 27777 - config.setPort(worker.getAkkaPort()); + + // 端口配置,支持随机端口 + int port = worker.getAkkaPort(); + if (port <= 0) { + port = NetUtils.getRandomPort(); + } + config.setPort(port); + // appName,需要提前在控制台注册,否则启动报错 config.setAppName(worker.getAppName()); config.setServerAddress(serverAddress); diff --git a/powerjob-worker-spring-boot-starter/src/main/resources/META-INF/spring-configuration-metadata.json b/powerjob-worker-spring-boot-starter/src/main/resources/META-INF/spring-configuration-metadata.json index 5fe74cec..a67473e2 100644 --- a/powerjob-worker-spring-boot-starter/src/main/resources/META-INF/spring-configuration-metadata.json +++ b/powerjob-worker-spring-boot-starter/src/main/resources/META-INF/spring-configuration-metadata.json @@ -50,60 +50,6 @@ "type": "com.github.kfcfans.powerjob.worker.common.constants.StoreStrategy", "description": "本地持久化方式,默认使用磁盘", "sourceType": "com.github.kfcfans.powerjob.worker.autoconfigure.PowerJobProperties$Worker" - }, - { - "name": "powerjob.akka-port", - "type": "java.lang.Integer", - "sourceType": "com.github.kfcfans.powerjob.worker.autoconfigure.PowerJobProperties", - "deprecated": true, - "deprecation": { - "replacement": "powerjob.worker.akka-port" - } - }, - { - "name": "powerjob.app-name", - "type": "java.lang.String", - "sourceType": "com.github.kfcfans.powerjob.worker.autoconfigure.PowerJobProperties", - "deprecated": true, - "deprecation": { - "replacement": "powerjob.worker.app-name" - } - }, - { - "name": "powerjob.enable-test-mode", - "type": "java.lang.Boolean", - "sourceType": "com.github.kfcfans.powerjob.worker.autoconfigure.PowerJobProperties", - "deprecated": true, - "deprecation": { - "replacement": "powerjob.worker.enable-test-mode" - } - }, - { - "name": "powerjob.max-result-length", - "type": "java.lang.Integer", - "sourceType": "com.github.kfcfans.powerjob.worker.autoconfigure.PowerJobProperties", - "deprecated": true, - "deprecation": { - "replacement": "powerjob.worker.max-result-length" - } - }, - { - "name": "powerjob.server-address", - "type": "java.lang.String", - "sourceType": "com.github.kfcfans.powerjob.worker.autoconfigure.PowerJobProperties", - "deprecated": true, - "deprecation": { - "replacement": "powerjob.worker.server-address" - } - }, - { - "name": "powerjob.store-strategy", - "type": "com.github.kfcfans.powerjob.worker.common.constants.StoreStrategy", - "sourceType": "com.github.kfcfans.powerjob.worker.autoconfigure.PowerJobProperties", - "deprecated": true, - "deprecation": { - "replacement": "powerjob.worker.store-strategy" - } } ], "hints": [] diff --git a/powerjob-worker/pom.xml b/powerjob-worker/pom.xml index 76c678c6..9996b9fc 100644 --- a/powerjob-worker/pom.xml +++ b/powerjob-worker/pom.xml @@ -10,12 +10,12 @@ 4.0.0 powerjob-worker - 3.3.2 + 3.3.3 jar 5.2.4.RELEASE - 3.3.2 + 3.3.3 1.4.200 3.4.2 5.6.1 diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/OhMyWorker.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/OhMyWorker.java index 1cde2378..7fe1fe1f 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/OhMyWorker.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/OhMyWorker.java @@ -20,7 +20,7 @@ import com.github.kfcfans.powerjob.worker.background.OmsLogHandler; import com.github.kfcfans.powerjob.worker.background.ServerDiscoveryService; import com.github.kfcfans.powerjob.worker.background.WorkerHealthReporter; import com.github.kfcfans.powerjob.worker.common.OhMyConfig; -import com.github.kfcfans.powerjob.worker.common.OmsBannerPrinter; +import com.github.kfcfans.powerjob.worker.common.PowerBannerPrinter; import com.github.kfcfans.powerjob.worker.common.utils.SpringUtils; import com.github.kfcfans.powerjob.worker.persistence.TaskPersistenceService; import com.google.common.base.Stopwatch; @@ -80,7 +80,7 @@ public class OhMyWorker implements ApplicationContextAware, InitializingBean, Di Stopwatch stopwatch = Stopwatch.createStarted(); log.info("[OhMyWorker] start to initialize OhMyWorker..."); try { - OmsBannerPrinter.print(); + PowerBannerPrinter.print(); // 校验 appName if (!config.isEnableTestMode()) { appId = assertAppName(); diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/background/WorkerHealthReporter.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/background/WorkerHealthReporter.java index 9caafca1..5b69d34e 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/background/WorkerHealthReporter.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/background/WorkerHealthReporter.java @@ -5,7 +5,7 @@ import com.github.kfcfans.powerjob.common.RemoteConstant; import com.github.kfcfans.powerjob.common.model.SystemMetrics; import com.github.kfcfans.powerjob.common.request.WorkerHeartbeat; import com.github.kfcfans.powerjob.worker.OhMyWorker; -import com.github.kfcfans.powerjob.worker.common.OmsWorkerVersion; +import com.github.kfcfans.powerjob.worker.common.PowerJobWorkerVersion; import com.github.kfcfans.powerjob.worker.common.utils.AkkaUtils; import com.github.kfcfans.powerjob.worker.common.utils.SystemInfoUtils; import com.github.kfcfans.powerjob.worker.container.OmsContainerFactory; @@ -40,7 +40,7 @@ public class WorkerHealthReporter implements Runnable { heartbeat.setAppName(OhMyWorker.getConfig().getAppName()); heartbeat.setAppId(OhMyWorker.getAppId()); heartbeat.setHeartbeatTime(System.currentTimeMillis()); - heartbeat.setVersion(OmsWorkerVersion.getVersion()); + heartbeat.setVersion(PowerJobWorkerVersion.getVersion()); // 获取当前加载的容器列表 heartbeat.setContainerInfos(OmsContainerFactory.getDeployedContainerInfos()); diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/OhMyConfig.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/OhMyConfig.java index f3a45cc3..16c83f25 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/OhMyConfig.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/OhMyConfig.java @@ -4,9 +4,9 @@ import com.github.kfcfans.powerjob.common.RemoteConstant; import com.github.kfcfans.powerjob.worker.common.constants.StoreStrategy; import com.github.kfcfans.powerjob.worker.core.processor.ProcessResult; import com.google.common.collect.Lists; -import lombok.Data; +import lombok.Getter; +import lombok.Setter; -import java.util.Collections; import java.util.List; /** @@ -15,7 +15,8 @@ import java.util.List; * @author tjq * @since 2020/3/16 */ -@Data +@Getter +@Setter public class OhMyConfig { /** * 应用名称 diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/OmsBannerPrinter.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/PowerBannerPrinter.java similarity index 95% rename from powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/OmsBannerPrinter.java rename to powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/PowerBannerPrinter.java index 227d5bec..eea991d7 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/OmsBannerPrinter.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/PowerBannerPrinter.java @@ -9,7 +9,7 @@ import lombok.extern.slf4j.Slf4j; * @since 2020/5/11 */ @Slf4j -public final class OmsBannerPrinter { +public final class PowerBannerPrinter { private static final String BANNER = "" + "\n" + @@ -30,7 +30,7 @@ public final class OmsBannerPrinter { public static void print() { log.info(BANNER); - String version = OmsWorkerVersion.getVersion(); + String version = PowerJobWorkerVersion.getVersion(); version = (version != null) ? " (v" + version + ")" : ""; log.info(":: PowerJob Worker :: {}", version); } diff --git a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/OmsWorkerVersion.java b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/PowerJobWorkerVersion.java similarity index 83% rename from powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/OmsWorkerVersion.java rename to powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/PowerJobWorkerVersion.java index c1fc0eb4..1436114a 100644 --- a/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/OmsWorkerVersion.java +++ b/powerjob-worker/src/main/java/com/github/kfcfans/powerjob/worker/common/PowerJobWorkerVersion.java @@ -17,7 +17,7 @@ import java.util.jar.JarFile; * @author tjq * @since 2020/5/11 */ -public final class OmsWorkerVersion { +public final class PowerJobWorkerVersion { private static String CACHE = null; @@ -29,17 +29,17 @@ public final class OmsWorkerVersion { */ public static String getVersion() { if (StringUtils.isEmpty(CACHE)) { - CACHE = determineSpringBootVersion(); + CACHE = determinePowerJobVersion(); } return CACHE; } - private static String determineSpringBootVersion() { - String implementationVersion = OmsWorkerVersion.class.getPackage().getImplementationVersion(); + private static String determinePowerJobVersion() { + String implementationVersion = PowerJobWorkerVersion.class.getPackage().getImplementationVersion(); if (implementationVersion != null) { return implementationVersion; } - CodeSource codeSource = OmsWorkerVersion.class.getProtectionDomain().getCodeSource(); + CodeSource codeSource = PowerJobWorkerVersion.class.getProtectionDomain().getCodeSource(); if (codeSource == null) { return null; }