From aa62f0f2fc7295b09431fe01bd62b399469a1330 Mon Sep 17 00:00:00 2001 From: Wangjunqi123 Date: Wed, 30 Oct 2024 14:58:31 +0800 Subject: [PATCH] server: improve the implementation of resource release --- server/db/dbmanager.go | 3 +++ server/db/graphmanager/neo4j.go | 4 ++- server/db/influxmanager/influx.go | 5 ++-- server/db/redismanager/redis.go | 4 ++- server/errormanager/meta.go | 13 +++++---- server/global/close.go | 28 +++++++++++++++++++ server/global/{globalConst.go => global.go} | 30 +++++++++++++++------ server/handler/publicTopoHandler.go | 2 ++ server/main.go | 4 --- server/signal/signalMonitor.go | 26 ++---------------- 10 files changed, 74 insertions(+), 45 deletions(-) create mode 100644 server/global/close.go rename server/global/{globalConst.go => global.go} (72%) diff --git a/server/db/dbmanager.go b/server/db/dbmanager.go index 5e8ec5c..e71844f 100644 --- a/server/db/dbmanager.go +++ b/server/db/dbmanager.go @@ -11,6 +11,7 @@ import ( "gitee.com/openeuler/PilotGo-plugin-topology/server/db/mysqlmanager" "gitee.com/openeuler/PilotGo-plugin-topology/server/db/redismanager" "gitee.com/openeuler/PilotGo-plugin-topology/server/errormanager" + "gitee.com/openeuler/PilotGo-plugin-topology/server/global" "gitee.com/openeuler/PilotGo-plugin-topology/server/pluginclient" "gitee.com/openeuler/PilotGo/sdk/logger" ) @@ -33,6 +34,8 @@ func InitDB() { // 初始化图数据库 func initGraphDB() { + global.Global_graph_database = conf.Global_Config.Topo.GraphDB + switch conf.Global_Config.Topo.GraphDB { case "neo4j": graphmanager.Global_Neo4j = graphmanager.Neo4jInit(conf.Global_Config.Neo4j.Addr, conf.Global_Config.Neo4j.Username, conf.Global_Config.Neo4j.Password, conf.Global_Config.Neo4j.DB) diff --git a/server/db/graphmanager/neo4j.go b/server/db/graphmanager/neo4j.go index 64f3e5f..a1b91b5 100644 --- a/server/db/graphmanager/neo4j.go +++ b/server/db/graphmanager/neo4j.go @@ -7,6 +7,7 @@ import ( "time" "gitee.com/openeuler/PilotGo-plugin-topology/server/errormanager" + "gitee.com/openeuler/PilotGo-plugin-topology/server/global" "gitee.com/openeuler/PilotGo-plugin-topology/server/graph" "gitee.com/openeuler/PilotGo-plugin-topology/server/pluginclient" "github.com/neo4j/neo4j-go-driver/v4/neo4j" @@ -41,7 +42,8 @@ func Neo4jInit(url, user, pass, db string) *Neo4jClient { errormanager.ErrorTransmit(pluginclient.Global_Context, err, true) } - n.Driver = driver + global.Global_neo4j_driver = driver + n.Driver = global.Global_neo4j_driver return n } diff --git a/server/db/influxmanager/influx.go b/server/db/influxmanager/influx.go index a024f57..f1dcf24 100644 --- a/server/db/influxmanager/influx.go +++ b/server/db/influxmanager/influx.go @@ -6,6 +6,7 @@ import ( "time" "gitee.com/openeuler/PilotGo-plugin-topology/server/conf" + "gitee.com/openeuler/PilotGo-plugin-topology/server/global" influx "github.com/influxdata/influxdb-client-go/v2" "github.com/pkg/errors" ) @@ -29,8 +30,8 @@ func InfluxdbInit(conf *conf.InfluxConf) *InfluxClient { Bucket: conf.Bucket, } - i.Client = influx.NewClient(i.ServerURL, i.Token) - + global.Global_influx_client = influx.NewClient(i.ServerURL, i.Token) + i.Client = global.Global_influx_client return i } diff --git a/server/db/redismanager/redis.go b/server/db/redismanager/redis.go index e8f62c0..4e56214 100644 --- a/server/db/redismanager/redis.go +++ b/server/db/redismanager/redis.go @@ -53,7 +53,9 @@ func RedisInit(url, pass string, db int, dialTimeout time.Duration) *RedisClient DB: r.DB, } } - r.Client = *redis.NewClient(cfg) + + global.Global_redis_client = redis.NewClient(cfg) + r.Client = *global.Global_redis_client // 使用超时上下文,验证redis timeoutCtx, cancelFunc := context.WithTimeout(context.Background(), dialTimeout) diff --git a/server/errormanager/meta.go b/server/errormanager/meta.go index 11196a5..79b0233 100644 --- a/server/errormanager/meta.go +++ b/server/errormanager/meta.go @@ -4,6 +4,7 @@ import ( "context" "os" + "gitee.com/openeuler/PilotGo-plugin-topology/server/global" "gitee.com/openeuler/PilotGo/sdk/logger" ) @@ -19,24 +20,26 @@ type Topoerror struct { @exit_after_print: 打印完错误链信息后是否结束主程序 */ -func ErrorTransmit(ctx context.Context, err error, exit_after_print bool) { +func ErrorTransmit(_ctx context.Context, _err error, _exit_after_print bool) { if Global_ErrorManager == nil { logger.Error("globalerrormanager is nil") + global.Close() os.Exit(1) } - if exit_after_print { - cctx, cancelF := context.WithCancel(ctx) + if _exit_after_print { + cctx, cancelF := context.WithCancel(_ctx) Global_ErrorManager.ErrCh <- &Topoerror{ - Err: err, + Err: _err, Cancel: cancelF, } <-cctx.Done() close(Global_ErrorManager.ErrCh) + global.Close() os.Exit(1) } Global_ErrorManager.ErrCh <- &Topoerror{ - Err: err, + Err: _err, } } diff --git a/server/global/close.go b/server/global/close.go new file mode 100644 index 0000000..f5f4cc4 --- /dev/null +++ b/server/global/close.go @@ -0,0 +1,28 @@ +package global + +import ( + "fmt" + + "gitee.com/openeuler/PilotGo/sdk/logger" +) + +func Close() { + switch Global_graph_database { + case "neo4j": + if Global_neo4j_driver != nil { + Global_neo4j_driver.Close() + fmt.Println() + logger.Info("close the connection to neo4j\n") + } + } + + if Global_redis_client != nil { + Global_redis_client.Close() + logger.Info("close the connection to redis\n") + } + + if Global_influx_client != nil { + Global_influx_client.Close() + logger.Info("close the connection to influx\n") + } +} diff --git a/server/global/globalConst.go b/server/global/global.go similarity index 72% rename from server/global/globalConst.go rename to server/global/global.go index 28e640a..3a746d4 100755 --- a/server/global/globalConst.go +++ b/server/global/global.go @@ -1,11 +1,25 @@ package global +import ( + "github.com/go-redis/redis/v8" + "github.com/neo4j/neo4j-go-driver/v4/neo4j" + influx "github.com/influxdata/influxdb-client-go/v2" +) + var ( NODE_TYPES []string EDGE_TYPES []string DEFAULT_TAGS []string ) +var ( + Global_graph_database string + + Global_neo4j_driver neo4j.Driver + Global_redis_client *redis.Client + Global_influx_client influx.Client +) + const ( NODE_HOST = "host" NODE_PROCESS = "process" @@ -39,14 +53,14 @@ const ( // 事件类型 const ( - EVENT_TYPE_0 = "kernel" - EVENT_TYPE_1 = "user_level" - EVENT_TYPE_2 = "mail" - EVENT_TYPE_3 = "system_daemons" - EVENT_TYPE_4 = "security_authorizaion" - EVENT_TYPE_5 = "by_log_service" - EVENT_TYPE_7 = "network_news" - EVENT_TYPE_9 = "clock_daemon" + EVENT_TYPE_0 = "kernel" + EVENT_TYPE_1 = "user_level" + EVENT_TYPE_2 = "mail" + EVENT_TYPE_3 = "system_daemons" + EVENT_TYPE_4 = "security_authorizaion" + EVENT_TYPE_5 = "by_log_service" + EVENT_TYPE_7 = "network_news" + EVENT_TYPE_9 = "clock_daemon" EVENT_TYPE_11 = "ftp_daemon" EVENT_TYPE_12 = "ntp_daemon" EVENT_TYPE_13 = "log_audit" diff --git a/server/handler/publicTopoHandler.go b/server/handler/publicTopoHandler.go index 8df46c3..5a2dd67 100644 --- a/server/handler/publicTopoHandler.go +++ b/server/handler/publicTopoHandler.go @@ -87,6 +87,7 @@ func SingleHostTreeHandle(ctx *gin.Context) { // "tree": nodes, // }, // }) + // signal.Close() // os.Exit(1) response.Success(ctx, map[string]interface{}{ @@ -133,6 +134,7 @@ func MultiHostHandle(ctx *gin.Context) { // "combos": combos, // }, // }) + // signal.Close() // os.Exit(1) response.Success(ctx, map[string]interface{}{ diff --git a/server/main.go b/server/main.go index 0c406b9..529c123 100755 --- a/server/main.go +++ b/server/main.go @@ -1,8 +1,6 @@ package main import ( - "fmt" - "gitee.com/openeuler/PilotGo-plugin-topology/server/agentmanager" "gitee.com/openeuler/PilotGo-plugin-topology/server/conf" "gitee.com/openeuler/PilotGo-plugin-topology/server/db" @@ -22,8 +20,6 @@ func main() { // ServerAddress: "http://localhost:4040", // }) - fmt.Println("hello topology") - /* init config main.go中第一个执行的初始化模块,省略Global_Config全局指针变量调用的非空检测 diff --git a/server/signal/signalMonitor.go b/server/signal/signalMonitor.go index 762be39..fa18558 100644 --- a/server/signal/signalMonitor.go +++ b/server/signal/signalMonitor.go @@ -1,15 +1,11 @@ package signal import ( - "fmt" "os" "os/signal" "syscall" - "gitee.com/openeuler/PilotGo-plugin-topology/server/conf" - "gitee.com/openeuler/PilotGo-plugin-topology/server/db/graphmanager" - "gitee.com/openeuler/PilotGo-plugin-topology/server/db/influxmanager" - "gitee.com/openeuler/PilotGo-plugin-topology/server/db/redismanager" + "gitee.com/openeuler/PilotGo-plugin-topology/server/global" "gitee.com/openeuler/PilotGo/sdk/logger" ) @@ -20,25 +16,7 @@ func SignalMonitoring() { for s := range ch { switch s { case syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT: - switch conf.Global_Config.Topo.GraphDB { - case "neo4j": - if graphmanager.Global_Neo4j != nil { - graphmanager.Global_Neo4j.Driver.Close() - fmt.Println() - logger.Info("close the connection to neo4j\n") - } - } - - if redismanager.Global_Redis != nil { - redismanager.Global_Redis.Client.Close() - logger.Info("close the connection to redis\n") - } - - if influxmanager.Global_Influx != nil { - influxmanager.Global_Influx.Client.Close() - logger.Info("close the connection to influx\n") - } - + global.Close() os.Exit(1) default: logger.Warn("unknown signal-> %s\n", s.String()) -- Gitee