diff --git a/internal/controllers/env_controller.go b/internal/controllers/env_controller.go index 7c192f5..a804c1a 100644 --- a/internal/controllers/env_controller.go +++ b/internal/controllers/env_controller.go @@ -77,6 +77,10 @@ func (ec *EnvController) CreateEnvVar(c *gin.Context) { relation.DataRelation.SaveTags(envVar.ID, constant.RelationTypeEnvTag, req.Tags) envVar.Tags = req.Tags } + + // Broadcast tasks to all agents because global envs changed + services.GetAgentWSManager().BroadcastTasksToAll() + utils.Success(c, vo.ToEnvVO(envVar)) } @@ -210,6 +214,9 @@ func (ec *EnvController) UpdateEnvVar(c *gin.Context) { relation.DataRelation.SaveTags(envVar.ID, constant.RelationTypeEnvTag, req.Tags) envVar.Tags = req.Tags + // Broadcast tasks to all agents because global envs changed + services.GetAgentWSManager().BroadcastTasksToAll() + utils.Success(c, vo.ToEnvVO(envVar)) } @@ -250,6 +257,9 @@ func (ec *EnvController) DeleteEnvVar(c *gin.Context) { return } + // Broadcast tasks to all agents because global envs changed + services.GetAgentWSManager().BroadcastTasksToAll() + utils.SuccessMsg(c, "删除成功") } diff --git a/internal/services/agent_ws_service.go b/internal/services/agent_ws_service.go index 4a58db1..eb3e744 100644 --- a/internal/services/agent_ws_service.go +++ b/internal/services/agent_ws_service.go @@ -230,6 +230,20 @@ func (m *AgentWSManager) BroadcastTasks(agentID string) { }) } +// BroadcastTasksToAll 广播任务更新给所有在线 Agent +func (m *AgentWSManager) BroadcastTasksToAll() { + m.mu.RLock() + var agentIDs []string + for agentID := range m.connections { + agentIDs = append(agentIDs, agentID) + } + m.mu.RUnlock() + + for _, agentID := range agentIDs { + m.BroadcastTasks(agentID) + } +} + // RegisterRemoteWaiter 注册远程任务结果等待者 func (m *AgentWSManager) RegisterRemoteWaiter(logID string) chan *models.AgentTaskResult { m.mu.Lock() diff --git a/internal/services/env_service.go b/internal/services/env_service.go index 0991bac..637beac 100644 --- a/internal/services/env_service.go +++ b/internal/services/env_service.go @@ -140,7 +140,7 @@ func (es *EnvService) UpdateEnvVar(id string, name, value, remark, envType strin func (es *EnvService) GetAssociatedTasks(id string) []models.Task { var associatedTasks []models.Task var taskIDs []string - database.DB.Model(&models.DataRelation{}).Where("type = ? AND relate_id = ?", "task_env", id).Pluck("data_id", &taskIDs) + database.DB.Model(&models.DataRelation{}).Where("type = ? AND relate_id = ?", constant.RelationTypeTaskEnv, id).Pluck("data_id", &taskIDs) if len(taskIDs) > 0 { database.DB.Where("id IN ?", taskIDs).Find(&associatedTasks) } @@ -157,7 +157,7 @@ func (es *EnvService) DeleteEnvVar(id string, force bool) (bool, []models.Task) if force { err := database.DB.Transaction(func(tx *gorm.DB) error { // Delete the relations mapping this env to any tasks - if err := tx.Where("type = ? AND relate_id = ?", "task_env", id).Delete(&models.DataRelation{}).Error; err != nil { + if err := tx.Where("type = ? AND relate_id = ?", constant.RelationTypeTaskEnv, id).Delete(&models.DataRelation{}).Error; err != nil { return err } // Delete the env var