소스 검색

feat: enhance NodeRecordManager initialization and startup process

Jacky 1 개월 전
부모
커밋
991bac39fd
1개의 변경된 파일24개의 추가작업 그리고 6개의 파일을 삭제
  1. 24 6
      internal/analytic/node_record.go

+ 24 - 6
internal/analytic/node_record.go

@@ -64,15 +64,16 @@ func (m *NodeRecordManager) Restart() {
 // For backward compatibility
 var (
 	defaultManager *NodeRecordManager
-	setupOnce      sync.Once
 	restartMu      sync.Mutex
 )
 
 // InitDefaultManager initializes the default NodeRecordManager
 func InitDefaultManager() {
-	setupOnce.Do(func() {
-		defaultManager = NewNodeRecordManager(context.Background())
-	})
+	if defaultManager != nil {
+		defaultManager.Stop()
+	}
+	defaultManager = NewNodeRecordManager(context.Background())
+	defaultManager.Start()
 }
 
 // RestartRetrieveNodesStatus restarts the node status retrieval process
@@ -83,6 +84,7 @@ func RestartRetrieveNodesStatus() {
 
 	if defaultManager == nil {
 		InitDefaultManager()
+		return
 	}
 
 	defaultManager.Restart()
@@ -95,6 +97,22 @@ func StartRetrieveNodesStatus(ctx context.Context) *NodeRecordManager {
 	return manager
 }
 
+// StartDefaultManager starts the default node status retrieval manager
+// This should be called at system startup
+func StartDefaultManager() {
+	restartMu.Lock()
+	defer restartMu.Unlock()
+
+	if defaultManager != nil {
+		logger.Info("DefaultManager already running, restarting...")
+		defaultManager.Restart()
+		return
+	}
+
+	logger.Info("Starting default NodeRecordManager...")
+	InitDefaultManager()
+}
+
 func RetrieveNodesStatus(ctx context.Context) {
 	logger.Info("RetrieveNodesStatus start")
 	defer logger.Info("RetrieveNodesStatus exited")
@@ -130,8 +148,8 @@ func RetrieveNodesStatus(ctx context.Context) {
 					if err := nodeAnalyticRecord(e, ctx); err != nil {
 						logger.Error(err)
 						mutex.Lock()
-						if NodeMap[env.ID] != nil {
-							NodeMap[env.ID].Status = false
+						if NodeMap[e.ID] != nil {
+							NodeMap[e.ID].Status = false
 						}
 						mutex.Unlock()
 						select {