in ozhera-monitor/ozhera-monitor-service/src/main/java/org/apache/ozhera/monitor/service/impl/AppMonitorServiceImpl.java [129:339]
public void appPlatMove(Integer OProjectId, Integer OPlat, Integer NProjectId, Integer Nplat, Integer newIamId,
String NprojectName, Boolean rebuildRule) {
log.info("appPlatMove OProjectId:{},OPlat:{},NProjectId:{},Nplat:{},NprojectName:{}", OProjectId, OPlat,
NProjectId, Nplat, NprojectName);
if (OProjectId == null || OPlat == null || NProjectId == null || Nplat == null || StringUtils.isBlank(
NprojectName)) {
log.error("appPlatMove has invalid param! OProjectId:{},OPlat:{},NProjectId:{},Nplat:{},NprojectName:{}",
OProjectId, OPlat, NProjectId, Nplat, NprojectName);
return;
}
HeraAppBaseInfoModel baseInfo = new HeraAppBaseInfoModel();
baseInfo.setBindId(String.valueOf(OProjectId));
baseInfo.setPlatformType(OPlat);
List<HeraAppBaseInfoModel> query = heraBaseInfoService.query(baseInfo, null, null);
if (CollectionUtils.isEmpty(query)) {
log.info("appPlatMove nodata found!OProjectId:{},OPlat:{},NProjectId:{},Nplat:{},NprojectName:{}",
OProjectId, OPlat, NProjectId, Nplat, NprojectName);
return;
}
if (query.size() > 1) {
log.info(
"appPlatMove more than one data found!OProjectId:{},OPlat:{},NProjectId:{},Nplat:{},NprojectName:{}",
OProjectId, OPlat, NProjectId, Nplat, NprojectName);
return;
}
HeraAppBaseInfoModel heraAppBaseInfo = query.get(0);
String oldProjectName = heraAppBaseInfo.getAppName();
heraAppBaseInfo.setPlatformType(Nplat);
heraAppBaseInfo.setIamTreeId(newIamId);
heraAppBaseInfo.setBindId(String.valueOf(NProjectId));
heraAppBaseInfo.setAppName(NprojectName);
int update = heraBaseInfoService.insertOrUpdate(heraAppBaseInfo);
if (update < 1) {
log.error(
"appPlatMove update heraBaseInfo fail!OProjectId:{},OPlat:{},NProjectId:{},Nplat:{},NprojectName:{}",
OProjectId, OPlat, NProjectId, Nplat, NprojectName);
}
/**
* 关联的角色信息
*/
HeraAppRole heraAppRole = new HeraAppRole();
heraAppRole.setAppPlatform(OPlat);
heraAppRole.setAppId(String.valueOf(OProjectId));
List<HeraAppRole> appRoles = heraAppRoleDao.query(heraAppRole, null, null);
if (!CollectionUtils.isEmpty(appRoles)) {
appRoles.forEach(t -> {
t.setAppId(String.valueOf(NProjectId));
t.setAppPlatform(Nplat);
heraAppRoleDao.update(t);
});
}
/**
* 3、关注信息
* -参与列表
* -关注列表
*/
List<AppMonitor> appMonitors = appMonitorDao.getByProjectIdAndPlat(OProjectId, OPlat);
if (!CollectionUtils.isEmpty(appMonitors)) {
appMonitors.forEach(t -> {
t.setAppSource(Nplat);
t.setProjectId(NProjectId);
t.setIamTreeId(newIamId);
t.setProjectName(NprojectName);
appMonitorDao.update(t);
});
}
if (rebuildRule) {
AlarmStrategy strategy = new AlarmStrategy();
strategy.setAppId(OProjectId);
strategy.setAppName(oldProjectName);
PageData<List<AlarmStrategyInfo>> listPageData = strategyDao.searchByCondNoUser(strategy, 1, 1000, null,
null);
List<AlarmStrategyInfo> list = listPageData.getList();
if (!CollectionUtils.isEmpty(list)) {
list.forEach(t -> {
List<AppAlarmRule> rules = ruleDao.selectByStrategyId(t.getId());
for (AppAlarmRule rule : rules) {
/**
* 1、app的projectId、Name、iamId都更新好
* 2、rule的iamId
* 3、user采用rule的creater
* 4、ruleData补数据
*
* ruleData 标签数据来源:
* 1、strategy
* 2、rule的labels
*
* 使用到ruleData的数据:
* AlarmCallbackUrl
* ruleData.getAlarmDetailUrl()
*
* getEnvLabels:
* serverEnv(include、except)
* service(include、except)
* functionId(include、except)
* methodName:http、dubbo
* errorCode:http
* serviceName:dubbo
*
* Tesla
* rule.getTeslaGroup()
* rule.getTeslaUrls()
* rule.getExcludeTeslaUrls()
*
*
* ruleData.getExpr() 自定义表达式
* ruleData.getAlertMembers()
*
*
*
*/
Integer oldAlarmId = rule.getAlarmId();
Integer oldIamId = rule.getIamId();
AppMonitor app = new AppMonitor();
app.setProjectId(NProjectId);
app.setProjectName(NprojectName);
rule.setIamId(newIamId);
rule.setProjectId(NProjectId);
StringBuilder cname = new StringBuilder();
cname.append(newIamId);
cname.append("-").append(rule.getAlert());
cname.append("-").append(System.currentTimeMillis());
rule.setCname(cname.toString());
AlarmRuleData ruleData = new AlarmRuleData();
BeanUtils.copyProperties(rule, ruleData);
ruleData.setLabels(rule.getLabels());
ruleData.convertLabels();
ruleData.setIncludeEnvs(t.getIncludeEnvs());
ruleData.setExceptEnvs(t.getExceptEnvs());
ruleData.setIncludeZones(t.getIncludeZones());
ruleData.setExceptZones(t.getExceptZones());
ruleData.setIncludeContainerName(t.getIncludeContainerName());
ruleData.setExceptContainerName(t.getExceptContainerName());
ruleData.setAlertMembers(t.getAlertMembers());
if (!CollectionUtils.isEmpty(t.getIncludeFunctions())) {
ruleData.setIncludeFunctions(
t.getIncludeFunctions().stream().map(String::valueOf).collect(Collectors.toList()));
}
if (!CollectionUtils.isEmpty(t.getExceptFunctions())) {
ruleData.setExceptFunctions(
t.getExceptFunctions().stream().map(String::valueOf).collect(Collectors.toList()));
}
ruleData.setIncludeModules(t.getIncludeModules());
ruleData.setExceptModules(t.getExceptModules());
Result result1 = alarmService.addRule(app, rule, rule.getCreater(), ruleData);
if (!result1.isSuccess()) {
log.error("appPlatMove add new rule fail!rule{}", rule.toString());
return;
}
JsonElement data = (JsonElement) result1.getData();
Integer alarmId = data.getAsJsonObject().get("id").getAsInt();
rule.setAlarmId(alarmId);
if (rule.getRuleStatus().equals(RuleStatusType.pause.getCode())) {
Result result = alarmService.enabledRule(alarmId, RuleStatusType.pause.getCode(),
rule.getIamId(), rule.getCreater());
if (!result.isSuccess()) {
log.error("appPlatMove pause rule fail!rule{}", rule.toString());
}
}
Result result = alarmService.deleteRule(oldAlarmId, oldIamId, rule.getCreater());
if (!result.isSuccess()) {
log.error("appPlatMove del old rule fail!rule{}", rule.toString());
}
int i = ruleDao.updateByIdSelective(rule);
if (i < 1) {
log.error("appPlatMove update rule db fail! rule{}", rule.toString());
}
}
AlarmStrategy strategyUp = new AlarmStrategy();
strategyUp.setId(t.getId());
strategyUp.setAppId(NProjectId);
strategyUp.setAppName(NprojectName);
strategyUp.setIamId(newIamId);
boolean b = strategyDao.updateById(strategyUp);
if (!b) {
log.error("appPlatMove update strategy fail! oldP:{},new:{}", t.toString(),
strategyUp.toString());
}
});
}
}
}