From 7d952a14b34b186da3053988095d705d1ffe407c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=90=E9=BE=99?= Date: Sun, 2 Jul 2023 15:59:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A3=80=E6=B5=8B=E8=A7=A3?= =?UTF-8?q?=E6=9E=90minio=E6=96=87=E4=BB=B6=E6=B5=81=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 ++ go.sum | 3 ++ src/bean/vo/request/host_manage.go | 8 ++--- src/controller/host_manage.go | 50 +++++++++++++++++++++++++++++- src/main.go | 2 +- src/router/router.go | 2 +- src/service/doc_lib.go | 29 ++++++++++++++++- 7 files changed, 88 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 50992ab..bbbca44 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/360EntSecGroup-Skylar/excelize v1.4.1 github.com/Luzifer/go-openssl/v4 v4.1.0 github.com/bytedance/go-tagexpr v2.7.4+incompatible + github.com/ghodss/yaml v1.0.0 github.com/gin-gonic/gin v1.9.0 github.com/go-playground/locales v0.14.1 github.com/go-playground/universal-translator v0.18.1 @@ -72,6 +73,7 @@ require ( golang.org/x/text v0.9.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect xorm.io/builder v0.3.11-0.20220531020008-1bd24a7dc978 // indirect diff --git a/go.sum b/go.sum index 2d958ff..22d5b86 100644 --- a/go.sum +++ b/go.sum @@ -81,6 +81,7 @@ github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVB github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -650,6 +651,8 @@ gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRN gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/src/bean/vo/request/host_manage.go b/src/bean/vo/request/host_manage.go index 70b9d6a..dc9cda5 100644 --- a/src/bean/vo/request/host_manage.go +++ b/src/bean/vo/request/host_manage.go @@ -36,10 +36,10 @@ type ListHostManageReq struct { // StateHostManageReq 状态检测 type StateHostManageReq struct { - DetectionType int `json:"detection_type" form:"detection_type" binding:"oneof=1 2 3"` //1主页列表手动检测 2输入ip列表保存时检测 3上传ip列表文件保存时检测 - Id int `json:"id" form:"id"` //主机分组ID - //HostFile file `form:"host_file"` // 主机文件 - HostManageList string `json:"host_manage_list" form:"host_manage_list"` //主机ip列表 + DetectionType int `json:"detection_type" form:"detection_type" binding:"oneof=1 2 3"` //1主页列表手动检测 2输入ip列表保存时检测 3上传ip列表文件保存时检测 + Id int `json:"id" form:"id"` //主机分组ID + HostManageList string `json:"host_manage_list" form:"host_manage_list"` //主机ip列表 + FileName string `json:"file_name" form:"file_name"` //文件名称 } // HostIpExceptionListReq 异常列表 diff --git a/src/controller/host_manage.go b/src/controller/host_manage.go index 1236760..86c1ffb 100644 --- a/src/controller/host_manage.go +++ b/src/controller/host_manage.go @@ -57,6 +57,52 @@ func ParsingHostFiles(c *gin.Context) (hostManageList []request.HostManageList, return } +// GetMinioFiles 解析minio中xlsx类型文件 +func GetMinioFiles(fileName string) (hostManageList []request.HostManageList, err error) { + + obj, err := service.DocLibSvc{}.GetFile(fileName) + if err != nil { + err = resp.GetFileStreamError.WithError(err) + return + } + + xlsxData, err := excelize.OpenReader(obj) + if err != nil { + err = resp.ReadFileError.WithError(err) + return + } + //读取工作簿 + rows := xlsxData.GetRows("Sheet1") + + if len(rows) > 1001 { + err = resp.FailedToParseFile.WithError(errors.New("ip数量不可超过1000")) + return + } + + for i := 0; i < len(rows); i++ { + //默认跳过第一行 + if i < 1 { + continue + } + + var voucherType int + if rows[i][2] == "密码验证" { + voucherType = 0 + } else { + voucherType = 1 + } + hostManageList = append(hostManageList, request.HostManageList{ + Ip: rows[i][0], + Port: rows[i][1], + VoucherType: voucherType, + UserName: rows[i][3], + Password: rows[i][4], + }) + } + return + +} + // AddHostManage 新增 func AddHostManage(c *gin.Context) { var ( @@ -237,7 +283,9 @@ func StateHostManage(c *gin.Context) { } case 3: //解析主机文件 - hostManageList, err = ParsingHostFiles(c) + //hostManageList, err = ParsingHostFiles(c) + hostManageList, err = GetMinioFiles(req.FileName) + if err != nil { SendJsonResponse(c, resp.ReadFileError.WithError(errors.New("解析主机文件失败")), nil) return diff --git a/src/main.go b/src/main.go index 6e4f861..41fc2c2 100644 --- a/src/main.go +++ b/src/main.go @@ -60,7 +60,7 @@ func initConfig() { LogMode: util.SetEnvInt("LOG_MODE", 1), // 1.标准打印 2.输出文件 ArgBool: util.SetEnvBool("ARG_BOOL", false), // 示例参数 ArgInt: util.SetEnvInt("ARG_INT", 10), // 示例参数 - MinioServer: util.SetEnvStr("MINIO_SERVER", "cache.wodcloud.com"), // Minio 服务地址 + MinioServer: util.SetEnvStr("MINIO_SERVER", "https://cache.wodcloud.com"), // Minio 服务地址 MinioAccessKey: util.SetEnvStr("MINIO_ACCESS_KEY", "beagleadmin"), // Minio Access Key MinioSecretKey: util.SetEnvStr("MINIO_SECRET_KEY", "H76cPmwvH7vJ"), // Minio Secret MinioBucket: util.SetEnvStr("MINIO_BUCKET", "so-operation"), // Minio Bucket diff --git a/src/router/router.go b/src/router/router.go index 444593e..c50c4e2 100644 --- a/src/router/router.go +++ b/src/router/router.go @@ -28,7 +28,7 @@ func Load(r *gin.Engine, middleware ...gin.HandlerFunc) { base.GET("/example/list", controller.GetExampleList) // 示例获取列表 } - base.POST("add_file", controller.AddFile) //文件上传 + base.POST("/add_file", controller.AddFile) //文件上传 // 初始化自动化运维路由 InitAutomatedMaintenRouter(r) diff --git a/src/service/doc_lib.go b/src/service/doc_lib.go index 62a8d3d..b1fc7e8 100644 --- a/src/service/doc_lib.go +++ b/src/service/doc_lib.go @@ -1,6 +1,7 @@ package service import ( + "context" "fmt" "github.com/gin-gonic/gin" "github.com/google/uuid" @@ -8,6 +9,7 @@ import ( "github.com/pkg/errors" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/client" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/conf" + "io" "mime/multipart" "net/http" "path" @@ -81,6 +83,31 @@ func (d *DocLibSvc) AddFile(c *gin.Context) (fileUrl string, err error) { err = errors.Wrap(err, "上传文件失败") return } - fileUrl = fmt.Sprintf("https://%s/%s/%s%s", conf.Options.MinioServer, conf.Options.MinioBucket, id, ext) + fileUrl = fmt.Sprintf("%s/%s/%s%s", conf.Options.MinioServer, conf.Options.MinioBucket, id, ext) return } + +// GetFile 读取minio文件 +func (d DocLibSvc) GetFile(fileName string) (obj io.Reader, err error) { + minioClient, err := client.GetMinioConnect() + if err != nil { + err = errors.Wrap(err, "getMinio") + return + } + object, err := minioClient.GetObject(context.Background(), conf.Options.MinioBucket, fileName, minio.GetObjectOptions{}) + if err != nil { + err = errors.Wrap(err, "download object error") + return + } + obj = io.Reader(object) + return obj, nil + //localFile, err := os.Create("C:/Users/25238/Desktop/123456.xlsx") + //if err != nil { + // log.Fatalf("create local object error " + err.Error()) + //} + //_, err = io.Copy(localFile, object) + //if err != nil { + // log.Fatalf("write object from object to local file error " + err.Error()) + // return + //} +} -- 2.26.0