GroupNode findOrCreateSystemNode(MonitorEngine engine) { ManagedNode infNode = nodeService.findByPath(ManagedNode.INFRASTRUCTURE_PATH); // 兼容手工创建时,引擎资源节点存在对应管理节点的情况 // 创建 引擎系统 群组,其中存放监控服务器,监控引擎,相关redis/mysql/nginx等自带应用 GroupNode engineSystemGroupNode; try { engineSystemGroupNode = (GroupNode) nodeService.findByPath(engine.getSystemPath()); } catch (IllegalArgumentException e) { // Not found exception engineSystemGroupNode = new GroupNode(); engineSystemGroupNode.cascadeCreating(); engineSystemGroupNode.setPath(engine.getSystemPath()); if (engine.isDefault()) { engineSystemGroupNode.setLabel("缺省监控系统"); } else { engineSystemGroupNode.setLabel(engine.getLabel() + "系统"); } engineSystemGroupNode.setIcon("monitor_system"); engineSystemGroupNode.setComment("Auto created system group node for " + engine.getLabel()); try { nodeService.create(infNode, engineSystemGroupNode); } catch (NodeException ex) { throw new ApplicationContextException("Can't auto create engine group node", ex); } } return engineSystemGroupNode; }
@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); } }
void createEngineNode(MonitorEngine engine, GroupNode engineSystemGroupNode) { // 在引擎系统中,添加引擎自身这个节点 String enginePath = engine.getSystemPath() + "/engine"; ResourceNode engineNode; try { nodeService.findByPath(enginePath); } catch (Exception e) { engineNode = new ResourceNode(); // 说明该节点是在创建引擎后被级联自动创建的 engineNode.cascadeCreating(); engineNode.setResource(engine); engineNode.setPath(enginePath); engineNode.setLabel(engine.getLabel()); engineNode.setIcon("monitor_engine"); engineNode.setState(State.Running); engineNode.setComment("Auto created engine node for " + engine.getLabel()); try { nodeService.create(engineSystemGroupNode, engineNode); } catch (NodeException ex) { throw new ApplicationContextException("Can't auto create engine node", ex); } } }