//获取cidr信息 func GetCidrInfoByNetwork(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { _, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } logger, ok := middleware.LoggerFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Network string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } info.Network = strings.TrimSpace(info.Network) //处理网段 network, err := util.GetCidrInfo(info.Network, logger) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": network}) }
func DeleteNetworkById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } mod, err := repo.DeleteNetworkById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } _, errDelete := repo.DeleteIpByNetworkId(info.ID) if errDelete != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errDelete.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func GetNetworkList(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Limit uint Offset uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } mods, err := repo.GetNetworkListWithPage(info.Limit, info.Offset) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result := make(map[string]interface{}) result["list"] = mods //总条数 count, err := repo.CountNetwork() if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result["recordCount"] = count w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
//SystemConfig func DeleteSystemConfigById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } info.AccessToken = strings.TrimSpace(info.AccessToken) _, errVerify := VerifyAccessPurview(info.AccessToken, ctx, true, w, r) if errVerify != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errVerify.Error()}) return } mod, err := repo.DeleteSystemConfigById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func DeleteHardwareById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } hardware, err := repo.GetHardwareById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if hardware.IsSystemAdd == "Yes" { //w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "系统添加的配置不允许删除!"}) //return } mod, err := repo.DeleteHardwareById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func GetDeviceInstallCallbackList(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { DeviceId uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } where := fmt.Sprintf("device_id = %d", info.DeviceId) order := "id asc" list, err := repo.GetDeviceInstallCallbackByWhere(where, order) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } var rows []model.DeviceInstallCallback for _, callback := range list { device, err := repo.GetDeviceById(callback.DeviceID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } callback.Content = strings.Replace(callback.Content, "<{sn}>", device.Sn, -1) callback.Content = strings.Replace(callback.Content, "<{hostname}>", device.Hostname, -1) callback.Content = strings.Replace(callback.Content, "<{ip}>", device.Ip, -1) callback.Content = strings.Replace(callback.Content, "<{manage_ip}>", device.ManageIp, -1) if device.NetworkID > uint(0) { network, _ := repo.GetNetworkById(device.NetworkID) callback.Content = strings.Replace(callback.Content, "<{gateway}>", network.Gateway, -1) callback.Content = strings.Replace(callback.Content, "<{netmask}>", network.Netmask, -1) } if device.ManageNetworkID > uint(0) { manageNetwork, _ := repo.GetManageNetworkById(device.ManageNetworkID) callback.Content = strings.Replace(callback.Content, "<{manage_gateway}>", manageNetwork.Gateway, -1) callback.Content = strings.Replace(callback.Content, "<{manage_netmask}>", manageNetwork.Netmask, -1) } callback.Content = strings.Replace(callback.Content, "\n", "<br />", -1) callback.RunResult = strings.Replace(callback.RunResult, "\n", "<br />", -1) rows = append(rows, callback) } result := make(map[string]interface{}) result["list"] = rows w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func CreateNewMacAddress(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } fmt.Println(repo) mac := util.CreateNewMacAddress() w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mac}) }
func UploadDevice(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { r.ParseForm() file, handle, err := r.FormFile("file") if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } cd, err := iconv.Open("UTF-8", "GBK") if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } defer cd.Close() dir := "./upload/" if !util.FileExist(dir) { err := os.MkdirAll(dir, 0777) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } } list := strings.Split(handle.Filename, ".") fix := list[len(list)-1] h := md5.New() h.Write([]byte(fmt.Sprintf("%s", time.Now().UnixNano()) + handle.Filename)) cipherStr := h.Sum(nil) md5 := fmt.Sprintf("%s", hex.EncodeToString(cipherStr)) filename := md5 + "." + fix result := make(map[string]interface{}) result["result"] = filename if util.FileExist(dir + filename) { os.Remove(dir + filename) } f, err := os.OpenFile(dir+filename, os.O_WRONLY|os.O_CREATE, 0666) io.Copy(f, file) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } defer f.Close() defer file.Close() w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) return }
func GetModelNameByWhereAndGroup(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Company string Product string IsSystemAdd string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } where := " company = '" + info.Company + "'" if info.Product != "" { where += " and product = '" + info.Product + "'" } if info.IsSystemAdd != "" { where += " and is_system_add = '" + info.IsSystemAdd + "'" } mod, err := repo.GetModelNameByWhereAndGroup(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func GetScanDeviceModelName(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Company string Product string UserID uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } info.Company = strings.TrimSpace(info.Company) info.Product = strings.TrimSpace(info.Product) var where string where = "device_id = 0 and company = '" + info.Company + "'" if info.Product != "" { where += " and product = '" + info.Product + "'" } if info.UserID > uint(0) { where += " and user_id = '" + fmt.Sprintf("%d", info.UserID) + "'" } mod, err := repo.GetManufacturerModelNameByGroup(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func GetScanDeviceProduct(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Company string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } info.Company = strings.TrimSpace(info.Company) var where string where = "device_id = 0 and company = '" + info.Company + "'" mod, err := repo.GetManufacturerProductByGroup(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func GetHardwareList(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Limit uint Offset uint Company string Product string ModelName string IsSystemAdd string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } var where string if info.Company != "" { where += " and company = '" + info.Company + "' " } if info.Product != "" { where += " and product = '" + info.Product + "' " } if info.ModelName != "" { where += " and model_name = '" + info.ModelName + "' " } if info.IsSystemAdd != "" { where += " and is_system_add = '" + info.IsSystemAdd + "' " } mods, err := repo.GetHardwareListWithPage(info.Limit, info.Offset, where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result := make(map[string]interface{}) result["list"] = mods //总条数 count, err := repo.CountHardware(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result["recordCount"] = count w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func GetDeviceNumByStatus(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Status string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } info.Status = strings.TrimSpace(info.Status) var where string where = " where t1.id > 0 " where += " and t1.status = '" + info.Status + "'" //总条数 count, err := repo.CountDevice(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result := make(map[string]interface{}) result["count"] = count w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func BatchDeleteVm(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var infos []struct { ID uint } if err := r.DecodeJSONPayload(&infos); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } for _, info := range infos { _, errDevice := repo.DeleteVmDeviceById(info.ID) if errDevice != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errDevice.Error()}) return } } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }
func FormatLocationToTreeByPid(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Pid uint SelectPid uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } //var initContent []map[string]interface{} mods, err := repo.FormatLocationToTreeByPid(info.Pid, nil, 0, info.SelectPid) //mods, err := repo.FormatLocationToTreeByPid(info.Pid) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mods}) }
func LoginOut(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } info.AccessToken = strings.TrimSpace(info.AccessToken) session, err := store.Get(r.Request, "user-authentication") if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } /* sessionUser, err := GetSession(w, r) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } */ _, errToken := repo.DeleteUserAccessTokenByToken(info.AccessToken) if errToken != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errToken.Error()}) return } delete(session.Values, "ID") delete(session.Values, "Username") delete(session.Values, "Name") delete(session.Values, "Role") delete(session.Values, "AccessToken") session.Save(r.Request, w) w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }
func GetVmDeviceLogByDeviceIdAndType(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { DeviceID uint Type string Order string MaxID uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if info.Order == "" { info.Order = "id DESC" } mods, err := repo.GetVmDeviceLogListByDeviceIDAndType(info.DeviceID, info.Type, info.Order, info.MaxID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } type log struct { ID uint DeviceID uint Title string Type string Content string CreatedAt utils.ISOTime UpdatedAt utils.ISOTime } var result []log for _, v := range mods { var row log row.ID = v.ID row.DeviceID = v.DeviceID row.Title = v.Title row.Type = v.Type row.Content = v.Content row.CreatedAt = utils.ISOTime(v.CreatedAt) row.UpdatedAt = utils.ISOTime(v.UpdatedAt) result = append(result, row) } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func GetUserById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } mod, err := repo.GetUserById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } type UserWithTime struct { ID uint Username string Password string Name string PhoneNumber string Permission string Status string Role string CreatedAt utils.ISOTime UpdatedAt utils.ISOTime } var user UserWithTime user.ID = mod.ID user.Username = mod.Username user.Name = mod.Name user.PhoneNumber = mod.PhoneNumber user.Permission = mod.Permission user.Status = mod.Status user.Role = mod.Role user.CreatedAt = utils.ISOTime(mod.CreatedAt) user.UpdatedAt = utils.ISOTime(mod.UpdatedAt) w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": user}) }
func CollectAndUpdateVmHostResource(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } logger, ok := middleware.LoggerFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } conf, ok := middleware.ConfigFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } UpdateVmHostResource(logger, repo, conf, 0) w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }
func GetVmHostBySn(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Sn string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } mod, err := repo.GetVmHostBySn(info.Sn) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func GetOsConfigById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } osConfig, err := repo.GetOsConfigById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": osConfig}) }
func GetCompanyByGroup(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } mod, err := repo.GetCompanyByGroup() if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func GetNotUsedIPListByNetworkId(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { NetworkID uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } //处理网段 result, err := repo.GetNotUsedIPListByNetworkId(info.NetworkID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func GetScanDeviceCompany(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var where string where = "device_id = 0" mod, err := repo.GetManufacturerCompanyByGroup(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func GetProductByWhereAndGroup(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Company string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } where := " company = '" + info.Company + "'" mod, err := repo.GetProductByWhereAndGroup(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func ImportPriview(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Filename string Limit uint Offset uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } file := "./upload/" + info.Filename cd, err := iconv.Open("utf-8", "gbk") // convert gbk to utf8 if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } defer cd.Close() input, err := os.Open(file) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } bufSize := 1024 * 1024 read := iconv.NewReader(cd, input, bufSize) r2 := csv.NewReader(read) ra, err := r2.ReadAll() if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } length := len(ra) type Device struct { ID uint BatchNumber string Sn string Hostname string Ip string NetworkID uint OsID uint HardwareID uint SystemID uint Location string LocationID uint AssetNumber string Status string InstallProgress float64 InstallLog string NetworkName string OsName string HardwareName string SystemName string Content string } var success []Device var failure []Device //var result []string for i := 1; i < length; i++ { //result = append(result, ra[i][0]) var row Device if len(ra[i]) != 8 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "导入文件格式错误!" failure = append(failure, row) continue } row.Sn = strings.TrimSpace(ra[i][0]) row.Hostname = strings.TrimSpace(ra[i][1]) row.Ip = strings.TrimSpace(ra[i][2]) row.OsName = strings.TrimSpace(ra[i][3]) row.HardwareName = strings.TrimSpace(ra[i][4]) row.SystemName = strings.TrimSpace(ra[i][5]) row.Location = strings.TrimSpace(ra[i][6]) row.AssetNumber = strings.TrimSpace(ra[i][7]) if len(row.Sn) > 255 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN长度超过255限制!" } if len(row.Hostname) > 255 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "主机名长度超过255限制!" } if len(row.Location) > 255 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "位置长度超过255限制!" } if len(row.AssetNumber) > 255 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "财编长度超过255限制!" } if row.Sn == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN不能为空!" } if row.Hostname == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "主机名不能为空!" } if row.Ip == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "IP不能为空!" } if row.OsName == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "操作系统不能为空!" } if row.SystemName == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "系统安装模板不能为空!" } if row.Location == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "位置不能为空!" } countDevice, err := repo.CountDeviceBySn(row.Sn) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countDevice > 0 { ID, err := repo.GetDeviceIdBySn(row.Sn) row.ID = ID if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } //hostname countHostname, err := repo.CountDeviceByHostnameAndId(row.Hostname, ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误:" + err.Error()}) return } if countHostname > 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "该主机名已存在!" } //IP countIp, err := repo.CountDeviceByIpAndId(row.Ip, ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countIp > 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "该IP已存在!" } } else { //hostname countHostname, err := repo.CountDeviceByHostname(row.Hostname) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误:" + err.Error()}) return } if countHostname > 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "该主机名已存在!" } //IP countIp, err := repo.CountDeviceByIp(row.Ip) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countIp > 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "该IP已存在!" } } //匹配网络 isValidate, err := regexp.MatchString("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$", row.Ip) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if !isValidate { var br string if row.Content != "" { br = "<br />" } row.Content += br + "IP格式不正确!" } modelIp, err := repo.GetIpByIp(row.Ip) if err != nil { var br string if row.Content != "" { br = "<br />" } row.Content += br + "未匹配到网段!" } else { network, errNetwork := repo.GetNetworkById(modelIp.NetworkID) if errNetwork != nil { var br string if row.Content != "" { br = "<br />" } row.Content += br + "未匹配到网段!" } row.NetworkName = network.Network } //OSName countOs, err := repo.CountOsConfigByName(row.OsName) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countOs <= 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "未匹配到操作系统!" } //SystemName countSystem, err := repo.CountSystemConfigByName(row.SystemName) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countSystem <= 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "未匹配到系统安装模板!" } if row.HardwareName != "" { //HardwareName countHardware, err := repo.CountHardwarrWithSeparator(row.HardwareName) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countHardware <= 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "未匹配到硬件配置模板!" } } /* if row.Location != "" { locationId, err := repo.GetLocationIdByName(row.Location) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if locationId <= 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "未匹配到位置!" } else { row.LocationID = locationId } } */ if row.Content != "" { failure = append(failure, row) } else { success = append(success, row) } } var data []Device if len(failure) > 0 { data = failure } else { data = success } var result []Device for i := 0; i < len(data); i++ { if uint(i) >= info.Offset && uint(i) < (info.Offset+info.Limit) { result = append(result, data[i]) } } if len(failure) > 0 { w.WriteJSON(map[string]interface{}{"Status": "failure", "Message": "设备信息不正确", "recordCount": len(data), "Content": result}) } else { w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "recordCount": len(data), "Content": result}) } }
func ImportDevice(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Filename string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } file := "./upload/" + info.Filename cd, err := iconv.Open("utf-8", "gbk") // convert gbk to utf8 if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } defer cd.Close() input, err := os.Open(file) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } bufSize := 1024 * 1024 read := iconv.NewReader(cd, input, bufSize) r2 := csv.NewReader(read) ra, err := r2.ReadAll() if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } length := len(ra) type Device struct { ID uint BatchNumber string Sn string Hostname string Ip string NetworkID uint OsID uint HardwareID uint SystemID uint Location string LocationID uint AssetNumber string Status string InstallProgress float64 InstallLog string NetworkName string OsName string HardwareName string SystemName string Content string IsSupportVm string } batchNumber, err := repo.CreateBatchNumber() if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } //var result []string for i := 1; i < length; i++ { //result = append(result, ra[i][0]) var row Device if len(ra[i]) != 8 { continue } row.Sn = strings.TrimSpace(ra[i][0]) row.Hostname = strings.TrimSpace(ra[i][1]) row.Ip = strings.TrimSpace(ra[i][2]) row.OsName = strings.TrimSpace(ra[i][3]) row.HardwareName = strings.TrimSpace(ra[i][4]) row.SystemName = strings.TrimSpace(ra[i][5]) row.Location = strings.TrimSpace(ra[i][6]) row.AssetNumber = strings.TrimSpace(ra[i][7]) if len(row.Sn) > 255 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN长度超过255限制!" } if len(row.Hostname) > 255 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "主机名长度超过255限制!" } if len(row.Location) > 255 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "位置长度超过255限制!" } if len(row.AssetNumber) > 255 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "财编长度超过255限制!" } if row.Sn == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN不能为空!" } if row.Hostname == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "主机名不能为空!" } if row.Ip == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "IP不能为空!" } if row.OsName == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "操作系统不能为空!" } if row.SystemName == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "系统安装模板不能为空!" } if row.Location == "" { var br string if row.Content != "" { br = "<br />" } row.Content += br + "位置不能为空!" } countDevice, err := repo.CountDeviceBySn(row.Sn) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countDevice > 0 { ID, err := repo.GetDeviceIdBySn(row.Sn) row.ID = ID if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } //hostname countHostname, err := repo.CountDeviceByHostnameAndId(row.Hostname, ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误:" + err.Error()}) return } if countHostname > 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + "该主机名已存在!" } //IP countIp, err := repo.CountDeviceByIpAndId(row.Ip, ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countIp > 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + "该IP已存在!" } } else { //hostname countHostname, err := repo.CountDeviceByHostname(row.Hostname) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误:" + err.Error()}) return } if countHostname > 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + "该主机名已存在!" } //IP countIp, err := repo.CountDeviceByIp(row.Ip) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countIp > 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + "该IP已存在!" } } //匹配网络 isValidate, err := regexp.MatchString("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$", row.Ip) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if !isValidate { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + "IP格式不正确!" } modelIp, err := repo.GetIpByIp(row.Ip) if err != nil { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + "未匹配到网段!" } _, errNetwork := repo.GetNetworkById(modelIp.NetworkID) if errNetwork != nil { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + "未匹配到网段!" } row.NetworkID = modelIp.NetworkID //OSName countOs, err := repo.CountOsConfigByName(row.OsName) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countOs <= 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + "未匹配到操作系统!" } mod, err := repo.GetOsConfigByName(row.OsName) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } row.OsID = mod.ID //SystemName countSystem, err := repo.CountSystemConfigByName(row.SystemName) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countSystem <= 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + "未匹配到系统安装模板!" } systemId, err := repo.GetSystemConfigIdByName(row.SystemName) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } row.SystemID = systemId if row.HardwareName != "" { //HardwareName countHardware, err := repo.CountHardwarrWithSeparator(row.HardwareName) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if countHardware <= 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + "未匹配到硬件配置模板!" } hardware, err := repo.GetHardwareBySeaprator(row.HardwareName) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } row.HardwareID = hardware.ID } if row.Location != "" { locationId, err := repo.GetLocationIdByName(row.Location) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if locationId <= 0 { /* var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + " 未匹配到位置!" */ _, err := repo.ImportLocation(row.Location) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } locationId, err := repo.GetLocationIdByName(row.Location) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if locationId <= 0 { var br string if row.Content != "" { br = "<br />" } row.Content += br + "SN:" + row.Sn + " 未匹配到位置!" } row.LocationID = locationId } else { row.LocationID = locationId } } if row.Content != "" { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": row.Content}) return } else { status := "pre_install" row.IsSupportVm = "Yes" if countDevice > 0 { id, err := repo.GetDeviceIdBySn(row.Sn) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } _, errUpdate := repo.UpdateDeviceById(id, batchNumber, row.Sn, row.Hostname, row.Ip, row.NetworkID, row.OsID, row.HardwareID, row.SystemID, "", row.LocationID, row.AssetNumber, status, row.IsSupportVm) if errUpdate != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "操作失败:" + errUpdate.Error()}) return } } else { _, err := repo.AddDevice(batchNumber, row.Sn, row.Hostname, row.Ip, row.NetworkID, row.OsID, row.HardwareID, row.SystemID, "", row.LocationID, row.AssetNumber, status, row.IsSupportVm) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "操作失败:" + err.Error()}) return } } } } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }
func UpdateNetworkById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } logger, ok := middleware.LoggerFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint Network string Netmask string Gateway string Vlan string Trunk string Bonding string AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } info.Network = strings.TrimSpace(info.Network) info.Netmask = strings.TrimSpace(info.Netmask) info.Gateway = strings.TrimSpace(info.Gateway) info.Vlan = strings.TrimSpace(info.Vlan) info.Trunk = strings.TrimSpace(info.Trunk) info.Bonding = strings.TrimSpace(info.Bonding) info.AccessToken = strings.TrimSpace(info.AccessToken) _, errVerify := VerifyAccessPurview(info.AccessToken, ctx, true, w, r) if errVerify != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errVerify.Error()}) return } if info.Network == "" || info.Netmask == "" || info.Gateway == "" { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "请将信息填写完整!"}) return } isValidate, err := regexp.MatchString("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$", info.Netmask) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if !isValidate { w.WriteJSON(map[string]interface{}{"Status": "failure", "Message": "掩码格式不正确!", "Content": ""}) return } isValidateGageway, err := regexp.MatchString("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$", info.Gateway) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if !isValidateGageway { w.WriteJSON(map[string]interface{}{"Status": "failure", "Message": "网关格式不正确!", "Content": ""}) return } count, err := repo.CountNetworkByNetworkAndId(info.Network, info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if count > 0 { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "该网段已存在!"}) return } oldNetwork, err := repo.GetNetworkById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } mod, err := repo.UpdateNetworkById(info.ID, info.Network, info.Netmask, info.Gateway, info.Vlan, info.Trunk, info.Bonding) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } //网段发生更改的情况下,重新分配IP if oldNetwork.Network != info.Network { //处理网段 network, err := util.GetCidrInfo(info.Network, logger) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } ipList, err := util.GetIPListByMinAndMaxIP(network["MinIP"], network["MaxIP"]) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } _, errDelete := repo.DeleteIpByNetworkId(info.ID) if errDelete != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errDelete.Error()}) return } for _, ip := range ipList { _, err := repo.AddIp(info.ID, ip) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } } } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func ValidateIp(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Ip string } info.Ip = strings.TrimSpace(info.Ip) if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } isValidate, err := regexp.MatchString("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$", info.Ip) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if !isValidate { w.WriteJSON(map[string]interface{}{"Status": "failure", "Message": "IP格式不正确!", "Content": ""}) return } modelIp, err := repo.GetIpByIp(info.Ip) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "failure", "Message": "未匹配到网段!"}) return } network, err := repo.GetNetworkById(modelIp.NetworkID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "failure", "Message": "未匹配到网段!"}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "匹配成功", "Content": network}) }
func UpdateOsConfigById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint Name string Pxe string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } info.Name = strings.TrimSpace(info.Name) info.Pxe = strings.TrimSpace(info.Pxe) if info.Name == "" || info.Pxe == "" { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "请将信息填写完整!"}) return } count, err := repo.CountOsConfigByNameAndId(info.Name, info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if count > 0 { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "该操作系统版本已存在!"}) return } osConfig, err := repo.UpdateOsConfigById(info.ID, info.Name, info.Pxe) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": osConfig}) }