diff --git a/cmd/agent/webserver/middleware/logger.go b/cmd/agent/webserver/middleware/logger.go index 030fe81c81361656a526f47f52e47cf9e38c6821..e821a17c5a5d05e07d448265cee8ccf721900b6d 100644 --- a/cmd/agent/webserver/middleware/logger.go +++ b/cmd/agent/webserver/middleware/logger.go @@ -42,7 +42,7 @@ func Logger(_skipPaths []string) gin.HandlerFunc { latency = latency.Truncate(time.Second) } - global.ERManager.ErrorTransmit("gin", "debug", errors.Errorf("|%3d| %-13v | %-15s |%-7s %#v", + global.ERManager.ErrorTransmit("gin", "debug", errors.Errorf("|%3d|%-13v|%-15s|%-7s %#v", statusCode, latency, clientIP, diff --git a/cmd/server/graph/node.go b/cmd/server/graph/node.go index 432df993c8aaa8fe9ed1cb34049a20b625e6b07e..f216ca8bf15b013a3d92b1a704123135b15336cd 100755 --- a/cmd/server/graph/node.go +++ b/cmd/server/graph/node.go @@ -8,7 +8,10 @@ import ( type Nodes struct { Lock sync.Mutex + + // key: node.id Lookup map[string]*Node + LookupByType map[string][]*Node LookupByUUID map[string][]*Node Nodes []*Node diff --git a/cmd/server/service/webclient/webclientmanage.go b/cmd/server/service/webclient/webclientmanage.go index 7a4c11292f5c1e59b2013fc5364dd7166f313d48..91f7153dc142dc1dac013504d95c64407c3501bd 100644 --- a/cmd/server/service/webclient/webclientmanage.go +++ b/cmd/server/service/webclient/webclientmanage.go @@ -27,12 +27,12 @@ type WebClientsManagement struct { } // 更新前端client图数据缓存 -func (wcm *WebClientsManagement) UpdateClientTopoDataBuffer(_token string, _custom_topodata *graph.TopoDataBuffer) { - if wcm.Get(_token) == nil || wcm.Get(_token).TopoConfId != _custom_topodata.TopoConfId { - wcm.Add(_token, _custom_topodata) +func (wcm *WebClientsManagement) UpdateClientTopoDataBuffer(_id string, _custom_topodata *graph.TopoDataBuffer) { + if wcm.Get(_id) == nil || wcm.Get(_id).TopoConfId != _custom_topodata.TopoConfId { + wcm.Add(_id, _custom_topodata) } else { var wg sync.WaitGroup - for uuid, global_node_slice := range wcm.Get(_token).Nodes.LookupByUUID { + for uuid, global_node_slice := range wcm.Get(_id).Nodes.LookupByUUID { wg.Add(1) go func(_uuid string, _global_node_slice []*graph.Node) { defer wg.Done() @@ -69,12 +69,12 @@ func (wcm *WebClientsManagement) UpdateClientTopoDataBuffer(_token string, _cust } custom_edge := custom_edge_any.(*graph.Edge) - global_edge_id_slice, ok := wcm.Get(_token).Edges.Node_Edges_map.Load(global_node.ID) + global_edge_id_slice, ok := wcm.Get(_id).Edges.Node_Edges_map.Load(global_node.ID) if !ok { continue } for _, global_edge_id := range global_edge_id_slice.([]string) { - global_edge_any, ok := wcm.Get(_token).Edges.Lookup.Load(global_edge_id) + global_edge_any, ok := wcm.Get(_id).Edges.Lookup.Load(global_edge_id) if !ok { continue } @@ -103,7 +103,7 @@ func (wcm *WebClientsManagement) UpdateClientTopoDataBuffer(_token string, _cust // 将新图数据中的新增节点及边添加到缓存图数据中 for _, custom_node := range _custom_topodata.Nodes.LookupByUUID[_uuid] { if !custom_node_matched_state_map[custom_node.ID] { - wcm.Get(_token).Nodes.Add(custom_node) + wcm.Get(_id).Nodes.Add(custom_node) custom_edge_id_slice_any, ok := _custom_topodata.Edges.Node_Edges_map.Load(custom_node.ID) if !ok { continue @@ -114,30 +114,30 @@ func (wcm *WebClientsManagement) UpdateClientTopoDataBuffer(_token string, _cust continue } custom_edge := custom_edge_any.(*graph.Edge) - wcm.Get(_token).Edges.Add(custom_edge) + wcm.Get(_id).Edges.Add(custom_edge) } } } // 删减缓存图数据中过期的节点及边 for _, global_node := range _global_node_slice { if !global_node_matched_state_map[global_node.ID] { - err := wcm.Get(_token).Nodes.Remove(global_node) + err := wcm.Get(_id).Nodes.Remove(global_node) if err != nil { err = errors.Wrap(err, "->") global.ERManager.ErrorTransmit("webclient", "error", err, false, true) continue } - global_edge_id_slice_any, ok := wcm.Get(_token).Edges.Node_Edges_map.Load(global_node.ID) + global_edge_id_slice_any, ok := wcm.Get(_id).Edges.Node_Edges_map.Load(global_node.ID) if !ok { continue } for _, global_edge_id := range global_edge_id_slice_any.([]string) { - global_edge_any, ok := wcm.Get(_token).Edges.Lookup.Load(global_edge_id) + global_edge_any, ok := wcm.Get(_id).Edges.Lookup.Load(global_edge_id) if !ok { continue } global_edge := global_edge_any.(*graph.Edge) - err := wcm.Get(_token).Edges.Remove(global_edge.ID) + err := wcm.Get(_id).Edges.Remove(global_edge.ID) if err != nil { err = errors.Wrap(err, "->") global.ERManager.ErrorTransmit("webclient", "error", err, false, true) @@ -188,22 +188,30 @@ func (wcm *WebClientsManagement) isSamePstreeBranch(old_node, new_node *graph.No return (old_node.Metrics["Ppid"] == new_node.Metrics["Ppid"] || wcm.searchTargetPid(new_process_map, small_pid, big_pid)) } -func (wcm *WebClientsManagement) Add(_token string, _topodata *graph.TopoDataBuffer) { - wcm.webClients[_token] = _topodata +func (wcm *WebClientsManagement) Add(_id string, _topodata *graph.TopoDataBuffer) { + wcm.webClients[_id] = _topodata } -func (wcm *WebClientsManagement) Delete(_token string) { - delete(wcm.webClients, _token) +func (wcm *WebClientsManagement) Delete(_id string) { + delete(wcm.webClients, _id) } -func (wcm *WebClientsManagement) Get(_token string) *graph.TopoDataBuffer { - value, ok := wcm.webClients[_token] +func (wcm *WebClientsManagement) Get(_id string) *graph.TopoDataBuffer { + value, ok := wcm.webClients[_id] if !ok { return nil } return value } +func (wcm *WebClientsManagement) ReturnWebClients() map[string]graph.TopoDataBuffer { + temp_webclients := make(map[string]graph.TopoDataBuffer) + for k, v := range wcm.webClients { + temp_webclients[k] = *v + } + return temp_webclients +} + // TODO: func (wcm *WebClientsManagement) HeartbeatDetect() { defer global.ERManager.Wg.Done() diff --git a/cmd/server/webserver/engine.go b/cmd/server/webserver/engine.go index e88b6d405c8041b387571acc04ac13d610e64eb6..5b817bb2e96883dc448ccb6dcee6ada0a695071b 100644 --- a/cmd/server/webserver/engine.go +++ b/cmd/server/webserver/engine.go @@ -69,12 +69,10 @@ func InitWebServer() { defer global.ERManager.Wg.Done() <-global.ERManager.GoCancelCtx.Done() - global.ERManager.ErrorTransmit("webserver", "info", errors.New("shutting down web server..."), false, false) ctx, cancel := context.WithTimeout(global.RootContext, 1*time.Second) defer cancel() - if err := web.Shutdown(ctx); err != nil { global.ERManager.ErrorTransmit("webserver", "error", errors.Errorf("web server shutdown error: %s", err.Error()), false, false) } else { diff --git a/cmd/server/webserver/middleware/logger.go b/cmd/server/webserver/middleware/logger.go index 0950fdb37f0148248bcbbd9c327ed01dd5a5d64f..789a10c17b80bb2429392e6a9ae6848c3980670e 100644 --- a/cmd/server/webserver/middleware/logger.go +++ b/cmd/server/webserver/middleware/logger.go @@ -42,7 +42,7 @@ func Logger(_skipPaths []string) gin.HandlerFunc { latency = latency.Truncate(time.Second) } - global.ERManager.ErrorTransmit("gin", "debug", errors.Errorf("|%3d| %-13v | %-15s |%-7s %#v\n%s", + global.ERManager.ErrorTransmit("gin", "debug", errors.Errorf("|%3d|%-13v|%-15s|%-7s %#v\n%s", statusCode, latency, clientIP,