@Override public MonitorEngine register(MonitorEngine engine) throws ResourceException { // 先执行自动批准动作 performApproval(engine); // 如果是从监控服务器下载下来的引擎,关联了相应的engine id,则直接更新 if (StringUtils.isNotBlank(engine.getEngineId())) { MonitorEngine legacy = findByEngineId(engine.getEngineId()); // id/name/label 保留数据库中的值 engine.setId(legacy.getId()); engine.setName(legacy.getName()); engine.setLabel(legacy.getLabel()); // properties 合并 if (legacy.getProperties() != null) { if (engine.getProperties() == null) { engine.setProperties(legacy.getProperties()); } else { engine.getProperties().putAll(legacy.getProperties()); } } return update(legacy, engine); } else if (isDefault(engine)) { // 还有一种常见情况,就是缺省引擎(与监控服务器安装在同一个地址),而后没有配置engineId MonitorEngine defaultEngine = getRepository().findDefaultEngine(); engine.setEngineId(defaultEngine.getEngineId()); return update(defaultEngine, engine); } else { // 否则创建一个新的实例 return create(engine); } }
// 当引擎被批准时,其路径也应该随着用户设定的新路径发生了变化,修改之 // Topo节点也会自动随之而修改 void autoUpdateNodesForEngine(String legacyPath, String path) { if (StringUtils.isNotBlank(path) && !StringUtils.equals(legacyPath, path)) { try { nodeService.updateNodesPath(legacyPath, path); } catch (NodeException e) { logger.warn(e.getMessage(), e); } } }