func GetSystemBySn(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { var info struct { Sn string Type string } info.Sn = r.FormValue("sn") info.Type = r.FormValue("type") info.Sn = strings.TrimSpace(info.Sn) info.Type = strings.TrimSpace(info.Type) if info.Type == "" { info.Type = "raw" } repo, ok := middleware.RepoFromContext(ctx) if !ok { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误", "Content": ""}) } return } if info.Sn == "" { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "SN参数不能为空"}) } return } mod, err := repo.GetSystemBySn(info.Sn) if err != nil { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""}) } return } if info.Type == "raw" { w.Header().Add("Content-type", "text/html; charset=utf-8") w.Write([]byte(mod.Content)) } else { w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "成功获取system信息", "Content": mod}) } }
func ExportHardware(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 { Ids []int } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } */ var where string where = " and is_system_add = 'Yes' " idsParam := r.FormValue("ids") if idsParam != "" { ids := strings.Split(idsParam, ",") if len(ids) > 0 { /* for _, id := range info.Ids { ids = append(ids, strconv.Itoa(id)) } */ where += " and id in (" + strings.Join(ids, ",") + ")" } } company := r.FormValue("company") if company != "" { where += " and company = '" + company + "' " } product := r.FormValue("product") if product != "" { where += " and product = '" + product + "' " } modelName := r.FormValue("modelName") if modelName != "" { where += " and model_name = '" + modelName + "' " } mods, err := repo.GetHardwareListWithPage(10000, 0, where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } var result []map[string]interface{} for _, v := range mods { result2 := make(map[string]interface{}) result2["Company"] = v.Company result2["Product"] = v.Product result2["ModelName"] = v.ModelName result2["IsSystemAdd"] = v.IsSystemAdd result2["Tpl"] = v.Tpl result2["Data"] = v.Data result = append(result, result2) } filename := "idcos-osinstall-hardware.json" w.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename='%s';filename*=utf-8''%s", filename, filename)) w.Header().Add("Content-Type", "application/octet-stream") err = json.NewEncoder(w).Encode(result) if err != nil { fmt.Println(err) } }
func ExportScanDeviceList(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 { Keyword string Company string Product string ModelName string CpuRule string Cpu string MemoryRule string Memory string DiskRule string Disk string UserID string } info.Keyword = r.FormValue("Keyword") info.UserID = r.FormValue("UserID") info.Company = r.FormValue("Company") info.Product = r.FormValue("Product") info.ModelName = r.FormValue("ModelName") info.CpuRule = r.FormValue("CpuRule") info.Cpu = r.FormValue("Cpu") info.MemoryRule = r.FormValue("MemoryRule") info.Memory = r.FormValue("Memory") info.DiskRule = r.FormValue("DiskRule") info.Disk = r.FormValue("Disk") info.UserID = strings.TrimSpace(info.UserID) info.Keyword = strings.TrimSpace(info.Keyword) info.Company = strings.TrimSpace(info.Company) info.Product = strings.TrimSpace(info.Product) info.ModelName = strings.TrimSpace(info.ModelName) info.CpuRule = strings.TrimSpace(info.CpuRule) info.Cpu = strings.TrimSpace(info.Cpu) info.MemoryRule = strings.TrimSpace(info.MemoryRule) info.Memory = strings.TrimSpace(info.Memory) info.DiskRule = strings.TrimSpace(info.DiskRule) info.Disk = strings.TrimSpace(info.Disk) var where string where = " and t1.is_show_in_scan_list = 'Yes' " if info.UserID != "" { var userID int userID, _ = strconv.Atoi(info.UserID) where += " and t1.user_id = '" + fmt.Sprintf("%d", userID) + "'" } idsParam := r.FormValue("ids") if idsParam != "" { ids := strings.Split(idsParam, ",") if len(ids) > 0 { where += " and t1.id in (" + strings.Join(ids, ",") + ")" } } if info.Company != "" { where += " and t1.company = '" + info.Company + "'" } if info.Product != "" { where += " and t1.product = '" + info.Product + "'" } if info.ModelName != "" { where += " and t1.model_name = '" + info.ModelName + "'" } if info.CpuRule != "" && info.Cpu != "" { where += " and t1.cpu_sum " + info.CpuRule + info.Cpu } if info.MemoryRule != "" && info.Memory != "" { where += " and t1.memory_sum " + info.MemoryRule + info.Memory } if info.DiskRule != "" && info.Disk != "" { where += " and t1.disk_sum " + info.DiskRule + info.Disk } if info.Keyword != "" { where += " and ( " info.Keyword = strings.Replace(info.Keyword, "\n", ",", -1) info.Keyword = strings.Replace(info.Keyword, ";", ",", -1) list := strings.Split(info.Keyword, ",") for k, v := range list { var str string v = strings.TrimSpace(v) if k == 0 { str = "" } else { str = " or " } where += str + " t1.sn = '" + v + "' or t1.ip = '" + v + "' or t1.company = '" + v + "' or t1.product = '" + v + "' or t1.model_name = '" + v + "'" } isValidate, _ := regexp.MatchString("^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$", info.Keyword) if isValidate { where += " or t1.nic like '%%\"" + info.Keyword + "\"%%' " } where += " ) " } mods, err := repo.GetManufacturerListWithPage(1000000, 0, where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } var str string var strTitle string strTitle = "SN(必填),主机名(必填),IP(必填),操作系统(必填),硬件配置模板,系统安装模板(必填),位置(必填),财编,管理IP,是否支持安装虚拟机(Yes或No)\n" for _, device := range mods { str += device.Sn + "," str += "," str += "," str += "," str += "," str += "," str += "," str += "," str += "," str += "\n" } cd, err := iconv.Open("gbk", "utf-8") // convert utf-8 to gbk if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } defer cd.Close() gbkStr := cd.ConvString(strTitle) bytes := []byte(gbkStr + str) filename := "idcos-osinstall-scan-device.csv" w.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename='%s';filename*=utf-8''%s", filename, filename)) w.Header().Add("Content-Type", "application/octet-stream") w.Write(bytes) }
func GetNetworkBySn(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { var info struct { Sn string Type string } info.Sn = r.FormValue("sn") info.Type = r.FormValue("type") info.Sn = strings.TrimSpace(info.Sn) info.Type = strings.TrimSpace(info.Type) if info.Type == "" { info.Type = "raw" } repo, ok := middleware.RepoFromContext(ctx) if !ok { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误", "Content": ""}) } return } if info.Sn == "" { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "SN参数不能为空"}) } return } deviceId, err := repo.GetDeviceIdBySn(info.Sn) if err != nil { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""}) } return } device, err := repo.GetDeviceById(deviceId) if err != nil { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""}) } return } mod, err := repo.GetNetworkBySn(info.Sn) if err != nil { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""}) } return } result := make(map[string]interface{}) result["Hostname"] = device.Hostname result["Ip"] = device.Ip result["Netmask"] = mod.Netmask result["Gateway"] = mod.Gateway result["Vlan"] = mod.Vlan result["Trunk"] = mod.Trunk result["Bonding"] = mod.Bonding if info.Type == "raw" { w.Header().Add("Content-type", "text/html; charset=utf-8") var str string if device.Hostname != "" { str += "HOSTNAME=\"" + device.Hostname + "\"" } if device.Ip != "" { str += "\nIPADDR=\"" + device.Ip + "\"" } if mod.Netmask != "" { str += "\nNETMASK=\"" + mod.Netmask + "\"" } if mod.Gateway != "" { str += "\nGATEWAY=\"" + mod.Gateway + "\"" } if mod.Vlan != "" { str += "\nVLAN=\"" + mod.Vlan + "\"" } if mod.Trunk != "" { str += "\nTrunk=\"" + mod.Trunk + "\"" } if mod.Bonding != "" { str += "\nBonding=\"" + mod.Bonding + "\"" } w.Write([]byte(str)) } else { w.Header().Add("Content-type", "application/json; charset=utf-8") w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "成功获取network信息", "Content": result}) } }