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;
 }
 // 当引擎被批准时,其路径也应该随着用户设定的新路径发生了变化,修改之
 // 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);
     }
   }
 }
 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);
     }
   }
 }