feat: support test mode

This commit is contained in:
tjq 2024-12-08 14:10:15 +08:00
parent a6de80220a
commit a7ca6ed81c
8 changed files with 82 additions and 44 deletions

View File

@ -11,7 +11,7 @@ services:
deploy:
resources:
limits:
memory: 768M
memory: 1024M
restart: always
container_name: powerjob-mysql
image: powerjob/powerjob-mysql:test_env
@ -43,7 +43,7 @@ services:
deploy:
resources:
limits:
memory: 896M
memory: 1024M
container_name: powerjob-server
image: powerjob/powerjob-server:test_env
restart: always
@ -52,7 +52,7 @@ services:
# - powerjob-mongodb
environment:
PARAMS: "--spring.profiles.active=daily --spring.datasource.core.jdbc-url=jdbc:mysql://powerjob-mysql:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai --oms.storage.dfs.mysql_series.url=jdbc:mysql://powerjob-mysql:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
JVMOPTIONS: "-server -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=7 -XX:GCLogFileSize=100M -Xloggc:/root/powerjob/server/gc.log"
JVMOPTIONS: "-server -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=7 -XX:GCLogFileSize=100M -Xloggc:/root/powerjob/server/gc.log -Dpowerjob.server.test.mode=true"
ports:
- "7700:7700"
- "10086:10086"
@ -67,7 +67,7 @@ services:
deploy:
resources:
limits:
memory: 384M
memory: 512M
container_name: powerjob-worker-agent
image: powerjob/powerjob-worker-agent:test_env
restart: always
@ -89,7 +89,7 @@ services:
deploy:
resources:
limits:
memory: 384M
memory: 512M
container_name: powerjob-worker-agent2
image: powerjob/powerjob-worker-agent:test_env
restart: always

View File

@ -40,22 +40,23 @@ public class NewSystemInitializer implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
SystemInitializerContext context = new SystemInitializerContext();
initSystemAdmin(context);
initDefaultNamespace(context);
initTestEnvironment(context);
clusterInit(SystemInitializeService.GOAL_INIT_LOCK, Void -> {
initSystemAdmin();
initDefaultNamespace();
initTestEnvironment();
});
}
private void initSystemAdmin(SystemInitializerContext context) {
clusterInit(SystemInitializeService.GOAL_INIT_ADMIN, Void -> systemInitializeService.initAdmin(context));
private void initSystemAdmin() {
clusterInit(SystemInitializeService.GOAL_INIT_ADMIN, Void -> systemInitializeService.initAdmin());
}
private void initDefaultNamespace(SystemInitializerContext context) {
clusterInit(SystemInitializeService.GOAL_INIT_NAMESPACE, Void -> systemInitializeService.initNamespace(context));
private void initDefaultNamespace() {
clusterInit(SystemInitializeService.GOAL_INIT_NAMESPACE, Void -> systemInitializeService.initNamespace());
}
private void initTestEnvironment(SystemInitializerContext context) {
clusterInit(SystemInitializeService.GOAL_INIT_TEST_ENV, Void -> systemInitializeService.initTestEnvironment(context));
private void initTestEnvironment() {
clusterInit(SystemInitializeService.GOAL_INIT_TEST_ENV, Void -> systemInitializeService.initTestEnvironment());
}
private void clusterInit(String name, Consumer<Void> initFunc) {

View File

@ -8,6 +8,7 @@ package tech.powerjob.server.initializer;
*/
public interface SystemInitializeService {
String GOAL_INIT_LOCK = "goal_init_system";
String GOAL_INIT_ADMIN = "goal_init_admin";
String GOAL_INIT_NAMESPACE = "goal_init_namespace";
String GOAL_INIT_TEST_ENV = "goal_init_test_env";
@ -16,15 +17,15 @@ public interface SystemInitializeService {
/**
* 初始化超级管理员
*/
void initAdmin(SystemInitializerContext context);
void initAdmin();
/**
* 初始化 namespace
*/
void initNamespace(SystemInitializerContext context);
void initNamespace();
/**
* 初始化测试环境
*/
void initTestEnvironment(SystemInitializerContext context);
void initTestEnvironment();
}

View File

@ -5,6 +5,7 @@ import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import tech.powerjob.common.PowerJobDKey;
@ -32,6 +33,7 @@ import javax.annotation.Resource;
import javax.transaction.Transactional;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
/**
@ -65,14 +67,13 @@ public class SystemInitializeServiceImpl implements SystemInitializeService {
@Override
@Transactional(rollbackOn = Exception.class)
public void initAdmin(SystemInitializerContext context) {
public void initAdmin() {
String username = SYSTEM_ADMIN_NAME;
String password = StringUtils.isEmpty(defaultAdminPassword) ? RandomStringUtils.randomAlphabetic(8) : defaultAdminPassword;
// 创建用户
PowerJobUser powerJobUser = createUser(username, password, true);
context.setAdminUserId(powerJobUser.getId());
// 授予全局管理员权限
powerJobPermissionService.grantRole(RoleScope.GLOBAL, AuthConstants.GLOBAL_ADMIN_TARGET_ID, powerJobUser.getId(), Role.ADMIN, null);
@ -86,20 +87,26 @@ public class SystemInitializeServiceImpl implements SystemInitializeService {
@Override
@Transactional(rollbackOn = Exception.class)
public void initNamespace(SystemInitializerContext context) {
public void initNamespace() {
Optional<NamespaceDO> namespaceDOOptional = namespaceWebService.findByCode(SYSTEM_DEFAULT_NAMESPACE);
if (namespaceDOOptional.isPresent()) {
log.info("[SystemInitializeService] namespace[{}] already exist", SYSTEM_DEFAULT_NAMESPACE);
return;
}
ModifyNamespaceRequest saveNamespaceReq = new ModifyNamespaceRequest();
saveNamespaceReq.setName(SYSTEM_DEFAULT_NAMESPACE);
saveNamespaceReq.setCode(SYSTEM_DEFAULT_NAMESPACE);
log.info("[SystemInitializeService] create default namespace by request: {}", saveNamespaceReq);
NamespaceDO savedNamespaceDO = namespaceWebService.save(saveNamespaceReq);
context.setDefaultNamespaceId(savedNamespaceDO.getId());
log.info("[SystemInitializeService] create default namespace successfully: {}", savedNamespaceDO);
}
@Override
@Transactional(rollbackOn = Exception.class)
public void initTestEnvironment(SystemInitializerContext context) {
public void initTestEnvironment() {
String testMode = System.getProperty(PowerJobDKey.SERVER_TEST_MODE);
if (!Boolean.TRUE.toString().equalsIgnoreCase(testMode)) {
return;
@ -119,12 +126,15 @@ public class SystemInitializeServiceImpl implements SystemInitializeService {
String testAppName = System.getProperty(PowerJobDKey.SERVER_TEST_APP_USERNAME, "powerjob-worker-samples");
String testAppPassword = System.getProperty(PowerJobDKey.SERVER_TEST_APP_PASSWORD, "powerjob123");
AppInfoDO testApp = createApp(testAppName, testAppPassword, context.getDefaultNamespaceId(), testUserIds);
AppInfoDO testApp = createApp(testAppName, testAppPassword, SYSTEM_DEFAULT_NAMESPACE, testUserIds);
log.info("[SystemInitializeService] [TestEnv] test app: {}", testApp);
}
private PowerJobUser createUser(String username, String password, boolean allowedChangePwd) {
// STEP1: 创建 PWJB 用户
Optional<PwjbUserInfoDO> pwjbUserOpt = pwjbUserWebService.findByUsername(username);
PwjbUserInfoDO savedPwjbUser = pwjbUserOpt.orElseGet(() -> {
ModifyUserInfoRequest createUser = new ModifyUserInfoRequest();
createUser.setUsername(username);
createUser.setNick(username);
@ -137,14 +147,17 @@ public class SystemInitializeServiceImpl implements SystemInitializeService {
}
log.info("[SystemInitializeService] [username:{}] create PWJB user by request: {}", username, createUser);
PwjbUserInfoDO savedPwjbUser = pwjbUserWebService.save(createUser);
log.info("[SystemInitializeService] [username:{}] create PWJB user successfully: {}", username, savedPwjbUser);
PwjbUserInfoDO nPwjbUser = pwjbUserWebService.save(createUser);
log.info("[SystemInitializeService] [username:{}] create PWJB user successfully: {}", username, nPwjbUser);
return nPwjbUser;
});
log.info("[SystemInitializeService] [username:{}] => PwjbUser: {}", username, savedPwjbUser);
// STEP2: 创建 USER 对象
Map<String, Object> params = Maps.newHashMap();
params.put(AuthConstants.PARAM_KEY_USERNAME, username);
params.put(AuthConstants.PARAM_KEY_PASSWORD, password);
// STEP2: 创建 USER 对象
LoginRequest loginRequest = new LoginRequest()
.setLoginType(AuthConstants.ACCOUNT_TYPE_POWER_JOB)
.setOriginParams(JsonUtils.toJSONString(params));
@ -154,14 +167,22 @@ public class SystemInitializeServiceImpl implements SystemInitializeService {
return powerJobUser;
}
private AppInfoDO createApp(String appName, String password, Long namespaceId, List<Long> developers) {
private AppInfoDO createApp(String appName, String password, String namespaceCode, List<Long> developers) {
ModifyAppInfoRequest modifyAppInfoRequest = new ModifyAppInfoRequest();
// 应用已存在则转为更新模式
Optional<AppInfoDO> oldAppOpt = appWebService.findByAppName(appName);
oldAppOpt.ifPresent(appInfoDO -> {
BeanUtils.copyProperties(appInfoDO, modifyAppInfoRequest);
modifyAppInfoRequest.setId(appInfoDO.getId());
});
modifyAppInfoRequest.setAppName(appName);
modifyAppInfoRequest.setTitle(appName);
modifyAppInfoRequest.setPassword(password);
modifyAppInfoRequest.setNamespaceId(namespaceId);
modifyAppInfoRequest.setNamespaceCode(namespaceCode);
modifyAppInfoRequest.setTags("test_app");

View File

@ -5,6 +5,8 @@ import tech.powerjob.server.persistence.remote.model.AppInfoDO;
import tech.powerjob.server.web.request.ModifyAppInfoRequest;
import tech.powerjob.server.web.request.QueryAppInfoRequest;
import java.util.Optional;
/**
* AppWebService
*
@ -17,5 +19,7 @@ public interface AppWebService {
void delete(Long id);
Optional<AppInfoDO> findByAppName(String appName);
Page<AppInfoDO> list(QueryAppInfoRequest queryAppInfoRequest);
}

View File

@ -4,6 +4,8 @@ import tech.powerjob.server.persistence.remote.model.PwjbUserInfoDO;
import tech.powerjob.server.web.request.ChangePasswordRequest;
import tech.powerjob.server.web.request.ModifyUserInfoRequest;
import java.util.Optional;
/**
* PwjbUserWebService
*
@ -14,5 +16,7 @@ public interface PwjbUserWebService {
PwjbUserInfoDO save(ModifyUserInfoRequest request);
Optional<PwjbUserInfoDO> findByUsername(String username);
void changePassword(ChangePasswordRequest changePasswordRequest);
}

View File

@ -30,10 +30,7 @@ import tech.powerjob.server.web.service.AppWebService;
import tech.powerjob.server.web.service.NamespaceWebService;
import javax.persistence.criteria.Predicate;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
* AppWebService
@ -114,6 +111,11 @@ public class AppWebServiceImpl implements AppWebService {
log.warn("[AppInfoController] delete app[id={}] successfully!", appId);
}
@Override
public Optional<AppInfoDO> findByAppName(String appName) {
return appInfoRepository.findByAppName(appName);
}
@Override
public Page<AppInfoDO> list(QueryAppInfoRequest queryAppInfoRequest) {
Pageable pageable = PageRequest.of(queryAppInfoRequest.getIndex(), queryAppInfoRequest.getPageSize());

View File

@ -71,6 +71,11 @@ public class PwjbUserWebServiceImplImpl implements PwjbUserWebService {
return pwjbUserInfoRepository.save(pwjbUserInfoDO);
}
@Override
public Optional<PwjbUserInfoDO> findByUsername(String username) {
return pwjbUserInfoRepository.findByUsername(username);
}
@Override
public void changePassword(ChangePasswordRequest changePasswordRequest) {
if (!StringUtils.equals(changePasswordRequest.getNewPassword(), changePasswordRequest.getNewPassword2())) {