fix(agent): broadcast task updates to agents on global env changes and use constant for task_env

This commit is contained in:
duorameng
2026-06-08 20:18:11 +08:00
parent 56587cacda
commit 073916b97a
3 changed files with 26 additions and 2 deletions
+10
View File
@@ -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, "删除成功")
}
+14
View File
@@ -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()
+2 -2
View File
@@ -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