diff --git a/server/db/dbmanager.go b/server/db/dbmanager.go index 5e8ec5c72acb83236fa4c397a4f075e2c9e5a08c..e71844f3ee52fc345d0cc2be266f3fe8729dca73 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 64f3e5ff3e5af241191538065910087458d75f1b..a1b91b5df6217f6fe35140afdce98099dc110e5b 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 a024f573ac4f76d4401ecb9b6cdc147b1543b20c..f1dcf24c5479c5e8c5e53bb6b3d6eba636a086dd 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 e8f62c0e7b262050084a3362feb3df586c935774..4e56214936eda9640e313d99960f6e2436a92b23 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 11196a5877ca01b6d47b648a0a6ef6782a0acf7c..79b0233c21a1d3aa86660a2b64b1bc0cfb87be67 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 0000000000000000000000000000000000000000..f5f4cc4d2fe06f96305817ab6321d6c50dc94155 --- /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 28e640a0dde9743ef83125dc178775f8f00eaf98..3a746d446ed6a7e4e4c53603e241894cf4db2e01 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 8df46c314fcde379341f16a66941db3d7c8358e3..5a2dd6787d9da5ae9d9e805f6ee6fa3e6cc0d816 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 0c406b9a7895accafa86fde6660f3ab96a3cc0b9..529c12374016bebe101c5cd7c7dd5aa2e42c4a53 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 762be398cb7a0901c9c6b0b804b406b46e15f777..fa18558d6f7385e71902f045088ffe5ca7b6a45c 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())