diff --git a/server/handler/handler.go b/server/handler/handler.go index d13f4ac35786dd9d647b868348571820c90ec388..d8295d51846893728e3e0c762c0b2c8bd43efbe6 100644 --- a/server/handler/handler.go +++ b/server/handler/handler.go @@ -53,18 +53,17 @@ func SingleHostTreeHandle(ctx *gin.Context) { agentmanager.Topo.UpdateMachineList() uuid := ctx.Param("uuid") - nodes, collect_errlist, process_errlist := service.SingleHostTreeService(uuid) - - if len(collect_errlist) != 0 || len(process_errlist) != 0 { - for i, cerr := range collect_errlist { - collect_errlist[i] = errors.Wrap(cerr, "**warn**4") // err top - agentmanager.Topo.ErrCh <- collect_errlist[i] - } + nodes, err := service.SingleHostTreeService(uuid) + if err != nil { + err = errors.Wrap(err, " **warn**2") // err top + agentmanager.Topo.ErrCh <- err - for i, perr := range process_errlist { - process_errlist[i] = errors.Wrap(perr, "**warn**10") // err top - agentmanager.Topo.ErrCh <- process_errlist[i] - } + ctx.JSON(http.StatusBadRequest, gin.H{ + "code": -1, + "error": err.Error(), + "data": nil, + }) + return } if nodes == nil { @@ -90,19 +89,18 @@ func SingleHostTreeHandle(ctx *gin.Context) { func MultiHostHandle(ctx *gin.Context) { agentmanager.Topo.UpdateMachineList() - - nodes, edges, collect_errlist, process_errlist := service.MultiHostService() - if len(collect_errlist) != 0 || len(process_errlist) != 0 { - for i, cerr := range collect_errlist { - collect_errlist[i] = errors.Wrap(cerr, "**warn**4") // err top - agentmanager.Topo.ErrCh <- collect_errlist[i] - } + nodes, edges, err := service.MultiHostService() + if err != nil { + err = errors.Wrap(err, " **warn**2") // err top + agentmanager.Topo.ErrCh <- err - for i, perr := range process_errlist { - process_errlist[i] = errors.Wrap(perr, "**warn**10") // err top - agentmanager.Topo.ErrCh <- process_errlist[i] - } + ctx.JSON(http.StatusBadRequest, gin.H{ + "code": -1, + "error": err.Error(), + "data": nil, + }) + return } if len(nodes) == 0 || len(edges) == 0 { diff --git a/server/service/singlehosttree.go b/server/service/singlehosttree.go index b7a4914820d1a47947aa478fcf13ef700e094870..3d808592cc927099b61796bef158a85155515322 100755 --- a/server/service/singlehosttree.go +++ b/server/service/singlehosttree.go @@ -1,37 +1,60 @@ package service import ( + "fmt" + "os" + + "gitee.com/openeuler/PilotGo-plugin-topology-server/agentmanager" + "gitee.com/openeuler/PilotGo-plugin-topology-server/dao" "gitee.com/openeuler/PilotGo-plugin-topology-server/meta" - "gitee.com/openeuler/PilotGo-plugin-topology-server/processor" "github.com/pkg/errors" ) -func SingleHostTreeService(uuid string) (*TreeTopoNode, []error, []error) { - dataprocesser := processor.CreateDataProcesser() - nodes, _, collect_errlist, process_errlist := dataprocesser.Process_data() - if len(collect_errlist) != 0 || len(process_errlist) != 0 { - for i, cerr := range collect_errlist { - collect_errlist[i] = errors.Wrap(cerr, "**3") - } - - for i, perr := range process_errlist { - process_errlist[i] = errors.Wrap(perr, "**7") - } - } - +func SingleHostTreeService(uuid string) (*TreeTopoNode, error) { + var latest string + var cqlOUT string var treerootnode *TreeTopoNode single_nodes := make([]*meta.Node, 0) - single_nodes_map := make(map[string]*meta.Node) + single_nodes_map := make(map[int64]*meta.Node) treenodes_process := make([]*TreeTopoNode, 0) treenodes_net := make([]*TreeTopoNode, 0) nodes_type_map := make(map[string][]*meta.Node) - for _, node := range nodes.Nodes { - if node.UUID == uuid { - if _, ok := single_nodes_map[node.ID]; !ok { - single_nodes_map[node.ID] = node - single_nodes = append(single_nodes, node) - } + driver, err := dao.Neo4j.Create_driver() + if err != nil { + err := errors.Errorf("create neo4j driver failed: %s **fatal**2", err.Error()) // err top + agentmanager.Topo.ErrCh <- err + agentmanager.Topo.Errmu.Lock() + agentmanager.Topo.ErrCond.Wait() + agentmanager.Topo.Errmu.Unlock() + close(agentmanager.Topo.ErrCh) + os.Exit(1) + } + defer dao.Neo4j.Close_driver(driver) + + cqlOUT = "match (n:host) return collect(distinct n.unixtime) as times" + times, err := dao.Neo4j.General_query(cqlOUT, "times", driver) + if err != nil { + err = errors.Wrap(err, " **2") + return nil, err + } + + if len(times) < 2 { + latest = times[0] + } else { + latest = times[len(times)-2] + } + + cqlOUT = fmt.Sprintf("match (nodes:`%s`) where nodes.unixtime='%s' return nodes", uuid, latest) + single_nodes, err = dao.Neo4j.Node_query(cqlOUT, "nodes", driver) + if err != nil { + err = errors.Wrap(err, " **2") + return nil, err + } + + for _, node := range single_nodes { + if _, ok := single_nodes_map[node.DBID]; !ok { + single_nodes_map[node.DBID] = node } } @@ -66,5 +89,5 @@ func SingleHostTreeService(uuid string) (*TreeTopoNode, []error, []error) { } } - return treerootnode, collect_errlist, process_errlist + return treerootnode, nil }