| | |
| | | "net/http" |
| | | "strconv" |
| | | "webserver/extend/code" |
| | | "webserver/extend/config" |
| | | "webserver/extend/util" |
| | | "webserver/middlewares/auth" |
| | | "webserver/service" |
| | |
| | | } |
| | | |
| | | func (sc SdkController) SdkDownLoad(c *gin.Context) { |
| | | var soApi dbapi.SdkApi |
| | | var sdkConfig map[string]interface{} |
| | | |
| | | sdkId, exist := c.GetQuery("path") |
| | | if !exist { |
| | | util.ResponseFormat(c, code.ComError, "下载的算法参数有误") |
| | | util.ResponseFormat(c, code.RequestParamError, "下载的算法参数有误") |
| | | return |
| | | } |
| | | |
| | | logger.Info(sdkId) |
| | | |
| | | // 先查找本地目录内是否已存在算法so, 没有走云端下载 |
| | | if sdkConfig = service.FindLocalSdkSoById(sdkId); sdkConfig == nil { |
| | | sdkConfig = service.DownSdk(sdkId) |
| | | if b,err := service.DownloadOrUpgrade(sdkId);b { |
| | | util.ResponseFormat(c, code.Success, "算法安装成功") |
| | | } else { |
| | | util.ResponseFormat(c, &code.Code{http.StatusBadRequest, false, err.Error()}, err.Error()) |
| | | } |
| | | |
| | | if sdkConfig != nil { |
| | | if regSdkSuccess, _ := soApi.Register(sdkConfig); regSdkSuccess { |
| | | util.ResponseFormat(c, code.Success, "下载算法成功!") |
| | | return |
| | | } |
| | | } |
| | | |
| | | flag := c.Query("needUpdateMiddle") |
| | | // 下载算法(有时候也需要把中间件一起下载下来) |
| | | if flag == "true" { |
| | | // 下载并更新中间件,带上MD5校验 |
| | | flag1, err := service.DownSo("http://" + config.SoPath.Ip + ":" + config.SoPath.Port + "/" + "middleware.so") |
| | | logger.Debug("中间件路径:", "http://"+config.SoPath.Ip+":"+config.SoPath.Port+"/"+"middleware.so") |
| | | if err != nil { |
| | | logger.Info(err) |
| | | } |
| | | if !flag1 { |
| | | util.ResponseFormat(c, code.ComError, "请重新下载算法") |
| | | } |
| | | } |
| | | |
| | | util.ResponseFormat(c, code.ComError, "算法下载失败,请重试") |
| | | } |
| | |
| | | basic.com/valib/goffmpeg.git v0.0.0-20200525032638-bc3239dc0121 // indirect |
| | | basic.com/valib/gogpu.git v0.0.0-20190711044327-62043b070865 |
| | | basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28 |
| | | basic.com/valib/licence.git v2.0.2+incompatible // indirect |
| | | basic.com/valib/logger.git v0.0.0-20190928113028-4907b08c4159 |
| | | github.com/Microsoft/go-winio v0.4.12 // indirect |
| | | github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect |
| | | github.com/ajg/form v1.5.1 |
| | | github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc |
| | | github.com/dgrijalva/jwt-go v3.2.0+incompatible |
| | | github.com/disintegration/imaging v1.6.2 // indirect |
| | | github.com/dustin/go-humanize v1.0.0 // indirect |
| | | github.com/gin-gonic/gin v1.4.0 |
| | | github.com/go-ole/go-ole v1.2.4 // indirect |
| | | github.com/gogo/protobuf v1.2.1 |
| | | github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b |
| | | github.com/hashicorp/memberlist v0.1.4 // indirect |
| | |
| | | basic.com/valib/gogpu.git v0.0.0-20190711044327-62043b070865/go.mod h1:yxux5RP4A6a591vWljXxGlHdERVVyWDD3TwwQjuyogw= |
| | | basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28 h1:3hejanzPEBvZSSvjIqayB83/6/6SLLrX9oNZAdiYELg= |
| | | basic.com/valib/gopherdiscovery.git v0.0.0-20190605034340-15d89d8b4e28/go.mod h1:CQ+UJyZV8MRzwwckncdUDu6/RDTKAzSIPCxc9tFcwPs= |
| | | basic.com/valib/licence.git v2.0.2+incompatible h1:7NHa1sWAITQmwXjpgf/2OT82XmFr/KBI1pOaj0UEx1s= |
| | | basic.com/valib/licence.git v2.0.2+incompatible/go.mod h1:kM6MDCHTJCNiYQz3dgX7UsTATCAHxMSGfhF+6byYGg0= |
| | | basic.com/valib/logger.git v0.0.0-20190928113028-4907b08c4159 h1:e5KopUEW/E9qmE3gUS6m7uO+/ti/N2m8rMMHB/HVqPk= |
| | | basic.com/valib/logger.git v0.0.0-20190928113028-4907b08c4159/go.mod h1:SPlOGUUlxCscwF1dkqmLb0oJXVqg1uJ8hsPXLFxrw1M= |
| | | cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= |
| | |
| | | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= |
| | | github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= |
| | | github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= |
| | | github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= |
| | | github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= |
| | | github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= |
| | | github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= |
| | | github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU= |
| | |
| | | github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= |
| | | github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= |
| | | github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= |
| | | github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= |
| | | github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= |
| | | github.com/go-openapi/jsonpointer v0.17.0 h1:nH6xp8XdXHx8dqveo0ZuJBluCO2qGrPbDNZ0dwoRHP0= |
| | | github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= |
| | | github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= |
| | |
| | | package service |
| | | |
| | | import ( |
| | | "basic.com/valib/licence.git" |
| | | "bytes" |
| | | "crypto/md5" |
| | | "encoding/hex" |
| | | "encoding/json" |
| | | "errors" |
| | | "fmt" |
| | | "io" |
| | | "io/ioutil" |
| | | "net/http" |
| | | "os" |
| | | "path" |
| | | "path/filepath" |
| | | "strings" |
| | | "webserver/extend/config" |
| | |
| | | Sdks []Sdk `json:"sdks"` |
| | | } |
| | | |
| | | const ( |
| | | token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQ3NDUwMjU5MjMsInVzZXIiOiJ7XCJpZFwiOlwiZTZjY2QzNmQtNGYxNi00NmZjLTg4ZDUtMDczNjU4NjZkMjA1XCIsXCJwZXJtaXNzaW9uc1wiOltcInByb2R1Y3RNYW5nZTpwdWJsaXNoXCIsXCJjb2RlTWFuZ2U6dmlld1wiLFwiZGV2aWNlTWFuYWdlOmFkZFwiLFwiYWRtaW5NYW5hZ2VcIixcIm9yZGVyTWFuZ2VcIixcImRldmljZU1hbmFnZTp2aWV3XCIsXCJwcm9kdWN0TWFuZ2U6YWRkXCIsXCJhZG1pbk1hbmFnZTp2aWV3XCIsXCJjb2RlTWFuZ2U6YWRkXCIsXCJwcm9kdWN0TWFuZ2U6b2ZmU2FsZVwiLFwib3JkZXJNYW5nZTpjYW5jZWxcIixcInByb2R1Y3RDZW50ZXI6ZG93bmxvYWRcIixcInByb2R1Y3RDZW50ZXI6YnV5XCIsXCJwcm9kdWN0TWFuZ2U6dmlld1wiLFwiYXBpXCIsXCJob21lXCIsXCJvcmRlck1hbmdlOnBheVwiLFwiYWRtaW5NYW5hZ2U6YWRkXCIsXCJvcmRlck1hbmdlOmRvd25sb2FkXCIsXCJwcm9kdWN0Q2VudGVyXCIsXCJkZXZpY2VNYW5hZ2U6dW5iaW5kXCIsXCJvcmRlck1hbmdlOnZpZXdcIixcImFkbWluTWFuYWdlOmVkaXRcIixcImRldmljZU1hbmFnZVwiLFwidmlwTWFuYWdlOmFkZFwiLFwidmlwTWFuYWdlOnZpZXdcIixcInByb2R1Y3RDZW50ZXI6dmlld1wiLFwidmlwTWFuYWdlOmVkaXRcIixcInZpcE1hbmFnZVwiLFwicHJvZHVjdE1hbmdlOmVkaXRcIixcImNvZGVNYW5nZVwiLFwicHJvZHVjdE1hbmdlXCJdLFwidXNlcm5hbWVcIjpcImJhc2ljXCJ9In0.vwjAFkWuEyadRLvIOGK8LFE3MjpY3SQ7j6AlTXnQDG8" |
| | | ) |
| | | |
| | | func findAllMySdk() map[string]Sdk { |
| | | token := "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQ3NDUwMjU5MjMsInVzZXIiOiJ7XCJpZFwiOlwiZTZjY2QzNmQtNGYxNi00NmZjLTg4ZDUtMDczNjU4NjZkMjA1XCIsXCJwZXJtaXNzaW9uc1wiOltcInByb2R1Y3RNYW5nZTpwdWJsaXNoXCIsXCJjb2RlTWFuZ2U6dmlld1wiLFwiZGV2aWNlTWFuYWdlOmFkZFwiLFwiYWRtaW5NYW5hZ2VcIixcIm9yZGVyTWFuZ2VcIixcImRldmljZU1hbmFnZTp2aWV3XCIsXCJwcm9kdWN0TWFuZ2U6YWRkXCIsXCJhZG1pbk1hbmFnZTp2aWV3XCIsXCJjb2RlTWFuZ2U6YWRkXCIsXCJwcm9kdWN0TWFuZ2U6b2ZmU2FsZVwiLFwib3JkZXJNYW5nZTpjYW5jZWxcIixcInByb2R1Y3RDZW50ZXI6ZG93bmxvYWRcIixcInByb2R1Y3RDZW50ZXI6YnV5XCIsXCJwcm9kdWN0TWFuZ2U6dmlld1wiLFwiYXBpXCIsXCJob21lXCIsXCJvcmRlck1hbmdlOnBheVwiLFwiYWRtaW5NYW5hZ2U6YWRkXCIsXCJvcmRlck1hbmdlOmRvd25sb2FkXCIsXCJwcm9kdWN0Q2VudGVyXCIsXCJkZXZpY2VNYW5hZ2U6dW5iaW5kXCIsXCJvcmRlck1hbmdlOnZpZXdcIixcImFkbWluTWFuYWdlOmVkaXRcIixcImRldmljZU1hbmFnZVwiLFwidmlwTWFuYWdlOmFkZFwiLFwidmlwTWFuYWdlOnZpZXdcIixcInByb2R1Y3RDZW50ZXI6dmlld1wiLFwidmlwTWFuYWdlOmVkaXRcIixcInZpcE1hbmFnZVwiLFwicHJvZHVjdE1hbmdlOmVkaXRcIixcImNvZGVNYW5nZVwiLFwicHJvZHVjdE1hbmdlXCJdLFwidXNlcm5hbWVcIjpcImJhc2ljXCJ9In0.vwjAFkWuEyadRLvIOGK8LFE3MjpY3SQ7j6AlTXnQDG8" |
| | | url := "http://"+config.ShopConf.Url+"/data/api-s/sdk/findAllMySdk" |
| | | fmt.Println("token:", token, "url:", url) |
| | | machineCode := licence.GetMachineCode() |
| | | fmt.Println("url:", url, "machineCode:", machineCode) |
| | | paramBody := map[string]interface{} { |
| | | "serverId": config.Server.AnalyServerId, |
| | | "machineCode": "", |
| | | "machineCode": machineCode, |
| | | } |
| | | header := map[string]string { |
| | | "Authorization": token, |
| | |
| | | |
| | | return nil |
| | | } |
| | | |
| | | type downOrUpResp struct { |
| | | Url string `json:"url"` |
| | | md5 string `json:"md5"` |
| | | } |
| | | |
| | | //下载或者升级算法 |
| | | func DownloadOrUpgrade(sdkId string) (bool,error) { |
| | | url := "http://"+config.ShopConf.Url+"/data/api-s/sdk/downloadOrUpgrade" |
| | | machineCode := licence.GetMachineCode() |
| | | if machineCode == "" { |
| | | logger.Debug("获取机器码失败") |
| | | return false, errors.New("获取机器码失败") |
| | | } |
| | | paramBody := map[string]interface{}{ |
| | | "sdkId": sdkId, |
| | | "machineCode": machineCode, |
| | | } |
| | | header := map[string]string { |
| | | "Authorization": token, |
| | | } |
| | | respBody, err := reqUtil.DoPostRequest(url, reqUtil.CONTENT_TYPE_JSON, paramBody, nil, header) |
| | | if err != nil { |
| | | logger.Debug("DoPostRequest err:", err) |
| | | return false, err |
| | | } |
| | | var res dbapi.Result |
| | | if err = json.Unmarshal(respBody, &res); err != nil { |
| | | logger.Debug("unmarshal err:", err) |
| | | return false, err |
| | | } |
| | | bytes, _ := json.Marshal(res.Data) |
| | | var resp downOrUpResp |
| | | if err := json.Unmarshal(bytes, &resp);err != nil { |
| | | logger.Debug("unmarshal err:", err) |
| | | return false, err |
| | | } |
| | | if resp.Url == "" || resp.md5 == "" { |
| | | return false, errors.New("获取下载安装包失败") |
| | | } |
| | | |
| | | //2.下载安装(升级)包,验证md5后安装 |
| | | configPatchPath := "" |
| | | if config.Server.PatchPath != "" { |
| | | configPatchPath = config.Server.PatchPath |
| | | } else { |
| | | configPatchPath = "../patch" |
| | | } |
| | | if !reqUtil.DirExists(configPatchPath) { |
| | | os.Mkdir(configPatchPath, 0777) |
| | | } |
| | | filenameWithSuffix := path.Base(resp.Url) |
| | | ext := path.Ext(filenameWithSuffix) |
| | | downUrl := "http://"+config.ShopConf.Url+"/files/"+resp.Url |
| | | |
| | | gzFilePath := configPatchPath + "/" + resp.md5+ext |
| | | err = reqUtil.DownloadFile(gzFilePath, downUrl) |
| | | if err != nil { |
| | | logger.Debug("DownloadFile err:", err) |
| | | return false, err |
| | | } |
| | | b, err := installSdk(resp.md5, ext) |
| | | if b { |
| | | return true, nil |
| | | } |
| | | |
| | | return false, err |
| | | } |