From 87e9e94f3d5b42685c2ecac612b1edf0c520706c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=90=E9=BE=99?= Date: Wed, 12 Jul 2023 17:49:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=BC=82=E5=B8=B8=E4=B8=BB?= =?UTF-8?q?=E6=9C=BA=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/service/host_manage.go | 69 +++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 15 deletions(-) diff --git a/src/service/host_manage.go b/src/service/host_manage.go index 3db8b8c..c9b6acc 100644 --- a/src/service/host_manage.go +++ b/src/service/host_manage.go @@ -14,6 +14,7 @@ import ( "gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/resp" "os/exec" "strings" + "sync" "time" ) @@ -453,23 +454,61 @@ func (h *HostManageSvc) ListStateHostManage(req request.StateHostManageReq) (err return } - fmt.Println("开始:") - for _, v := range hostManageList { - //修改状态 - connStatus := StatusDetection(v.Ip) - hostManageListConn := entity.HostManageList{ - ConnStatus: connStatus, - } + // 使用协程批量执行 ping 命令 + var wg sync.WaitGroup + wg.Add(len(hostManageList)) + successHost := make([]int, 0) + fail := make([]int, 0) + for i := 0; i < len(hostManageList); i++ { + go func() { + //修改状态 + connStatus := StatusDetection(hostManageList[i].Ip) + if connStatus == 1 { + fail = append(fail, hostManageList[i].Id) + } else { + successHost = append(successHost, hostManageList[i].Id) + } + wg.Done() + }() + } + wg.Wait() - _, err = session.Table("host_manage_list").Where("is_delete = 0 AND id = ?", v.Id). - Cols("conn_status").Update(&hostManageListConn) - if err != nil { - err = resp.DbUpdateError.WithError(err) - session.Rollback() - return - } + // 批量更新主机连接状态-成功 + _, err = session.Table("host_manage_list").Where("is_delete = 0").In("id", successHost). + Cols("conn_status").Update(&entity.HostManageList{ + ConnStatus: 0, + }) + if err != nil { + err = resp.DbUpdateError.WithError(err) + session.Rollback() + return + } + // 批量更新主机连接状态-失败 + _, err = session.Table("host_manage_list").Where("is_delete = 0").In("id", fail). + Cols("conn_status").Update(&entity.HostManageList{ + ConnStatus: 1, + }) + if err != nil { + err = resp.DbUpdateError.WithError(err) + session.Rollback() + return } - fmt.Println("结束") + + //for _, v := range hostManageList { + // //修改状态 + // connStatus := StatusDetection(v.Ip) + // hostManageListConn := entity.HostManageList{ + // ConnStatus: connStatus, + // } + // + // _, err = session.Table("host_manage_list").Where("is_delete = 0 AND id = ?", v.Id). + // Cols("conn_status").Update(&hostManageListConn) + // if err != nil { + // err = resp.DbUpdateError.WithError(err) + // session.Rollback() + // return + // } + //} session.Commit() return } -- 2.26.0