diff --git a/agent/handler/httphandler.go b/agent/handler/httphandler.go index 85c183bc96fa3f92ab356d1e96b85a7b6a4154f0..9d744373d7d4363f9c6a40f26968d22b5b6db2e0 100755 --- a/agent/handler/httphandler.go +++ b/agent/handler/httphandler.go @@ -15,6 +15,9 @@ import ( ) func RawMetricDataHandle(ctx *gin.Context) { + // ttcode + fmt.Printf(">>>req.header: %+v\n", ctx.Request.Header) + // 验证topo server请求来源 if ctx.RemoteIP() != strings.Split(conf.Config().Topo.Server_addr, ":")[0] { err := errors.Errorf("unknow client request from %s: %s", ctx.RemoteIP(), ctx.Request.URL) diff --git a/server/db/redismanager/redis.go b/server/db/redismanager/redis.go index be4f6c1fe143077d4f17cdc464e8ad396763a795..e214cacfae52c9e5960d6f78c4d3e15308ee4f12 100644 --- a/server/db/redismanager/redis.go +++ b/server/db/redismanager/redis.go @@ -220,11 +220,11 @@ func (r *RedisClient) UpdateTopoRunningAgentList(uuids []string, updateonce bool }) if len(abort_reason) != 0 { - logger.Debug("========agent status========") + logger.Warn("========agent status========") for _, r := range abort_reason { - logger.Debug(r) + logger.Warn(r) } - logger.Debug("============================") + logger.Warn("============================") } if updateonce { diff --git a/server/handler/customTopoHandler.go b/server/handler/customTopoHandler.go index 7c57b8707f763eecad21a93ef3f7cb747e4f1f04..4a4f1d628869505c2a578d4eeff6b7b705596438 100755 --- a/server/handler/customTopoHandler.go +++ b/server/handler/customTopoHandler.go @@ -178,12 +178,12 @@ func RunCustomTopoHandle(ctx *gin.Context) { select { case <-ctx.Request.Context().Done(): return - case res := <-doneChan: - if len(res.Combos) != 0 && len(res.Edges.Edges) != 0 && len(res.Nodes.Nodes) != 0 { + case data := <-doneChan: + if len(data.Combos) != 0 && len(data.Edges.Edges) != 0 && len(data.Nodes.Nodes) != 0 { response.Success(ctx, map[string]interface{}{ - "nodes": res.Nodes.Nodes, - "edges": res.Edges.Edges, - "combos": res.Combos, + "nodes": data.Nodes.Nodes, + "edges": data.Edges.Edges, + "combos": data.Combos, }, "") } } diff --git a/server/handler/router.go b/server/handler/router.go index 2e4b076a6e055d2f56457db5aed373a7a07f227e..fdfe0413b122af6a975cfc8ea166c3afaa4f71b7 100644 --- a/server/handler/router.go +++ b/server/handler/router.go @@ -63,9 +63,7 @@ func InitWebServer() { defer resourcemanage.ERManager.Wg.Done() <-resourcemanage.ERManager.GoCancelCtx.Done() - logger.Info("shutting down web server...") - ctx, cancel := context.WithTimeout(global.RootContext, 1*time.Second) defer cancel() diff --git a/server/resourcemanage/resourcemanage.go b/server/resourcemanage/resourcemanage.go index c885c0e1849a11a8f8fe8680edd1d540f62bf1ca..76cf4a68d4ae273819d44cdb80643307f0c769dd 100644 --- a/server/resourcemanage/resourcemanage.go +++ b/server/resourcemanage/resourcemanage.go @@ -126,7 +126,6 @@ func (erm *ErrorReleaseManagement) ResourceRelease() { erm.Wg.Wait() close(erm.errEndChan) - close(erm.ErrChan) time.Sleep(100 * time.Millisecond) diff --git a/server/service/topoDataBuffer.go b/server/service/topoDataBuffer.go index 054bca6e075fa39c44df5e8ceb97babde3e6f086..e3d395080257b65890f38ee1c639b22524f92a8d 100644 --- a/server/service/topoDataBuffer.go +++ b/server/service/topoDataBuffer.go @@ -10,42 +10,6 @@ import ( "github.com/pkg/errors" ) -// 在parent_pid的子进程树中搜索target_pid -func searchTargetPid(process_map map[int32][]int32, parent_pid, target_pid int32) bool { - find_target := false - for _, sub_pid := range process_map[parent_pid] { - if sub_pid == target_pid { - find_target = true - break - } - find_target = searchTargetPid(process_map, sub_pid, target_pid) - if find_target { - return true - } - } - return find_target -} - -// 判断两个process node是否属于同一个应用 -func IsSamePstreeBranch(old_node, new_node *graph.Node, new_process_slice []*graph.Process) bool { - var small_pid, big_pid int32 - old_node_pid, _ := strconv.Atoi(old_node.Metrics["Pid"]) - new_node_pid, _ := strconv.Atoi(new_node.Metrics["Pid"]) - if old_node_pid > new_node_pid { - small_pid = int32(new_node_pid) - big_pid = int32(old_node_pid) - } else { - small_pid = int32(old_node_pid) - big_pid = int32(new_node_pid) - } - - new_process_map := make(map[int32][]int32) - for _, process := range new_process_slice { - new_process_map[int32(process.Pid)] = process.Cpid - } - return (old_node.Metrics["Ppid"] == new_node.Metrics["Ppid"] || searchTargetPid(new_process_map, small_pid, big_pid)) -} - // 更新全局图数据缓存 func UpdateGlobalTopoDataBuffer(custom_topodata *graph.TopoDataBuffer) { if graph.Global_TopoDataBuffer == nil || graph.Global_TopoDataBuffer.TopoConfId != custom_topodata.TopoConfId { @@ -70,7 +34,7 @@ func UpdateGlobalTopoDataBuffer(custom_topodata *graph.TopoDataBuffer) { for _, global_node := range _global_node_slice { for _, custom_node := range custom_topodata.Nodes.LookupByUUID[_uuid] { if global_node.Name == custom_node.Name { - if global_node.Metrics["Pid"] == custom_node.Metrics["Pid"] || IsSamePstreeBranch(global_node, custom_node, agentmanager.Global_AgentManager.GetAgent_T(_uuid).Processes_2) { + if global_node.Metrics["Pid"] == custom_node.Metrics["Pid"] || isSamePstreeBranch(global_node, custom_node, agentmanager.Global_AgentManager.GetAgent_T(_uuid).Processes_2) { // 更新节点数据 global_node.LayoutAttr = custom_node.LayoutAttr global_node.Metrics = custom_node.Metrics @@ -171,3 +135,39 @@ func UpdateGlobalTopoDataBuffer(custom_topodata *graph.TopoDataBuffer) { wg.Wait() } } + +// 在parent_pid的子进程树中搜索target_pid +func searchTargetPid(process_map map[int32][]int32, parent_pid, target_pid int32) bool { + find_target := false + for _, sub_pid := range process_map[parent_pid] { + if sub_pid == target_pid { + find_target = true + break + } + find_target = searchTargetPid(process_map, sub_pid, target_pid) + if find_target { + return true + } + } + return find_target +} + +// 判断两个process node是否属于同一个应用 +func isSamePstreeBranch(old_node, new_node *graph.Node, new_process_slice []*graph.Process) bool { + var small_pid, big_pid int32 + old_node_pid, _ := strconv.Atoi(old_node.Metrics["Pid"]) + new_node_pid, _ := strconv.Atoi(new_node.Metrics["Pid"]) + if old_node_pid > new_node_pid { + small_pid = int32(new_node_pid) + big_pid = int32(old_node_pid) + } else { + small_pid = int32(old_node_pid) + big_pid = int32(new_node_pid) + } + + new_process_map := make(map[int32][]int32) + for _, process := range new_process_slice { + new_process_map[int32(process.Pid)] = process.Cpid + } + return (old_node.Metrics["Ppid"] == new_node.Metrics["Ppid"] || searchTargetPid(new_process_map, small_pid, big_pid)) +}