package service import ( "errors" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/entity" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/vo/request" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/bean/vo/response" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/client" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/pkg/beagle/resp" "time" ) type HostManageSvc struct { User *entity.User } // AddHostManage 新增主机 func (h *HostManageSvc) AddHostManage(req request.AddHostManageReq) (err error) { db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.WithError(err) return } // 开启事务 session := db.NewSession() defer session.Close() session.Begin() // 校验 主机分组名称 是否重复 has, err := session.Table("host_manage").Where("is_delete = 0 AND host_name = ?", req.HostName).Exist() if has { err = resp.DbDataCheckError.WithError(errors.New("主机名称重复")) session.Rollback() return } if err != nil { err = resp.DbSelectError.WithError(err) session.Rollback() return } //新增主机分组 hostManage := entity.HostManage{ HostName: req.HostName, CreateUser: "", CreateTime: time.Now(), UpdateUser: "", UpdateTime: time.Now(), } _, err = session.Table("host_manage").Insert(&hostManage) if err != nil { err = resp.DbInsertError.WithError(err) session.Rollback() return } if req.HostFileUrl == "" { //新增主机分组列表 for _, v := range req.HostManageList { port := "22" if v.Port != "" { port = v.Port } hostManageList := entity.HostManageList{ Ip: v.Ip, Port: port, VoucherType: v.VoucherType, UserName: v.UserName, Password: v.Password, HostGroupId: hostManage.Id, } _, err = session.Table("host_manage_list").Insert(&hostManageList) if err != nil { err = resp.DbInsertError.WithError(err) session.Rollback() return } } } else { //读取并解析文件内容--czl var hostManageLists []entity.HostManageList //新增主机分组列表--文件形式 for _, v := range hostManageLists { port := "22" if v.Port != "" { port = v.Port } hostManageList := entity.HostManageList{ Ip: v.Ip, Port: port, VoucherType: v.VoucherType, UserName: v.UserName, Password: v.Password, HostGroupId: hostManage.Id, HostFileUrl: req.HostFileUrl, } _, err = session.Table("host_manage_list").Insert(&hostManageList) if err != nil { err = resp.DbInsertError.WithError(err) session.Rollback() return } } } session.Commit() return } // EditHostManage 编辑 func (h *HostManageSvc) EditHostManage(req request.EditHostManageReq) (err error) { db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.WithError(err) return } // 开启事务 session := db.NewSession() defer session.Close() session.Begin() // 校验 主机分组名称 是否重复 has, err := session.Table("host_manage").Where("is_delete = 0 AND id != ? AND host_name = ?", req.Id, req.HostName).Exist() if has { err = resp.DbDataCheckError.WithError(errors.New("主机名称重复")) session.Rollback() return } if err != nil { err = resp.DbSelectError.WithError(err) session.Rollback() return } //修改主机分组信息 hostManage := entity.HostManage{ HostName: req.HostName, UpdateUser: "", UpdateTime: time.Now(), } _, err = session.Table("host_manage").Where("is_delete = 0 AND id = ?", req.Id). Cols("host_name,update_user,update_time").Update(&hostManage) if err != nil { err = resp.DbUpdateError.WithError(err) session.Rollback() return } //删除主机列表数据 _, err = session.Table("host_manage_list").Where("host_group_id = ?", req.Id).Cols("is_delete").Update(&entity.TaskManage{ IsDelete: 1, }) if err != nil { err = resp.DbDeleteError.WithError(err) session.Rollback() return } if req.HostFileUrl == "" { //修改主机分组列表 for _, v := range req.HostManageList { port := "22" if v.Port != "" { port = v.Port } hostManageList := entity.HostManageList{ Ip: v.Ip, Port: port, VoucherType: v.VoucherType, UserName: v.UserName, Password: v.Password, HostGroupId: hostManage.Id, } _, err = session.Table("host_manage_list").Insert(&hostManageList) if err != nil { err = resp.DbInsertError.WithError(err) session.Rollback() return } } } else { //读取并解析文件内容--czl var hostManageLists []entity.HostManageList //新增主机分组列表--文件形式 for _, v := range hostManageLists { port := "22" if v.Port != "" { port = v.Port } hostManageList := entity.HostManageList{ Ip: v.Ip, Port: port, VoucherType: v.VoucherType, UserName: v.UserName, Password: v.Password, HostGroupId: hostManage.Id, HostFileUrl: req.HostFileUrl, } _, err = session.Table("host_manage_list").Insert(&hostManageList) if err != nil { err = resp.DbInsertError.WithError(err) session.Rollback() return } } } session.Commit() return } // DelHostManage 删除任务 func (h *HostManageSvc) DelHostManage(req request.DelHostManageReq) (err error) { db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.WithError(err) return } // 开启事务 session := db.NewSession() defer session.Close() session.Begin() //删除主机分组 _, err = session.Table("host_manage").In("id", req.Id).Cols("is_delete").Update(&entity.HostManageList{ IsDelete: 1, }) if err != nil { err = resp.DbDeleteError.WithError(err) session.Rollback() return } //删除主机分组列表 _, err = session.Table("host_manage_list").In("host_group_id", req.Id).Cols("is_delete").Update(&entity.HostManageList{ IsDelete: 1, }) if err != nil { err = resp.DbDeleteError.WithError(err) session.Rollback() return } session.Commit() return } // DetailsHostManage 详情 func (h *HostManageSvc) DetailsHostManage(id int) (hostManageRes response.HostManageRes, err error) { db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.WithError(err) return } var hostManage response.HostManage hostList := make([]response.HostList, 0) taskList := make([]response.TaskList, 0) //查询主机分组 _, err = db.Table("host_manage").Where("is_delete = 0 AND id = ?", id).Get(&hostManage) if err != nil { err = resp.DbSelectError.WithError(err) return } //查询主机列表 err = db.Table("host_manage_list").Where("is_delete = 0 AND host_group_id = ?", id).Find(&hostList) if err != nil { err = resp.DbSelectError.WithError(err) return } //查询任务列表 err = db.Table("task_manage").Where("is_delete = 0 AND host_group_id = ?", id).Find(&taskList) if err != nil { err = resp.DbSelectError.WithError(err) return } hostManageRes.Id = hostManage.Id hostManageRes.HostName = hostManage.HostName hostManageRes.TaskCnt = len(hostManageRes.TaskList) hostManageRes.IpCnt = len(hostManageRes.HostList) hostManageRes.CreateUser = hostManage.CreateUser hostManageRes.CreateTime = hostManage.CreateTime hostManageRes.UpdateUser = hostManage.UpdateUser hostManageRes.UpdateTime = hostManage.UpdateTime for _, v := range hostList { if v.HostFileUrl != "" { hostManageRes.HostFileUrl = v.HostFileUrl break } } hostManageRes.HostList = hostList hostManageRes.TaskList = taskList return } // ListHostManage 列表 func (h *HostManageSvc) ListHostManage(req request.ListHostManageReq) (total int64, hostManageListRes []response.HostManagesRes, err error) { db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.WithError(err) return } finder := db.Table("host_manage").Alias("hm").Where("hm.is_delete = 0") if req.Search != "" { finder.Where("hm.host_name LIKE ?", "%"+req.Search+"%") } if req.CreateDateFrom != "" { finder.Where("hm.create_time >= ?", req.CreateDateFrom) } if req.CreateDateTo != "" { finder.Where("hm.create_time <= ?", req.CreateDateFrom) } finder.OrderBy("hm.id") //查询任务 total, err = finder.Select("hm.id,hm.host_name,hm.create_user,hm.create_time,(SELECT COUNT(*) FROM "+ "task_manage tm WHERE tm.is_delete = 0 AND tm.host_group_id = hm.ID) AS task_cnt,(SELECT COUNT(*) FROM "+ "host_manage_list hml WHERE hml.is_delete = 0 AND hml.conn_status = 0 AND hml.host_group_id = hm.ID) AS "+ "ip_cnt_err,(SELECT COUNT(*) FROM host_manage_list hml WHERE hml.is_delete = 0 AND hml.host_group_id = hm.ID) AS ip_cnt"). Limit(req.PageSize, (req.Page-1)*req.PageSize).FindAndCount(&hostManageListRes) if err != nil { err = resp.DbSelectError.WithError(err) return } return } // StateHostManage 状态检测 func (h *HostManageSvc) StateHostManage(req request.StateHostManageReq) (total int64, hostManageListRes []response.HostManageListRes, err error) { db, err := client.GetDbClient() if err != nil { err = resp.DbConnectError.WithError(err) return } //状态检测。。 //查询异常列表 finder := db.Table("host_manage_list").Where("is_delete = 0 AND conn_status = 0 AND host_group_id = ?", req.Id) finder.OrderBy("id") //查询任务 total, err = finder.Limit(req.PageSize, (req.Page-1)*req.PageSize).FindAndCount(&hostManageListRes) if err != nil { err = resp.DbSelectError.WithError(err) return } return }