liuxiaolong
2020-06-08 2a4041f16c6588921c87df93927e9076c2cc309d
add sdk download impl
4个文件已修改
129 ■■■■ 已修改文件
controllers/sdk.go 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.mod 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
go.sum 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/SdkDownLoad.go 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
controllers/sdk.go
@@ -4,7 +4,6 @@
    "net/http"
    "strconv"
    "webserver/extend/code"
    "webserver/extend/config"
    "webserver/extend/util"
    "webserver/middlewares/auth"
    "webserver/service"
@@ -276,41 +275,15 @@
}
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, "算法下载失败,请重试")
}
go.mod
@@ -15,14 +15,17 @@
    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
go.sum
@@ -23,6 +23,8 @@
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=
@@ -38,6 +40,8 @@
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=
@@ -92,6 +96,8 @@
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=
service/SdkDownLoad.go
@@ -1,15 +1,18 @@
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"
@@ -215,13 +218,17 @@
    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,
@@ -294,3 +301,71 @@
    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
}