From 9d88c7c467f8d93af4aab9ba0b6d6c01c2ffc546 Mon Sep 17 00:00:00 2001 From: sunty <1172534965@qq.com> Date: 星期四, 20 八月 2020 20:35:30 +0800 Subject: [PATCH] add get buckets contrl --- service/SdkDownLoad.go | 212 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 193 insertions(+), 19 deletions(-) diff --git a/service/SdkDownLoad.go b/service/SdkDownLoad.go index ed364ca..db15569 100644 --- a/service/SdkDownLoad.go +++ b/service/SdkDownLoad.go @@ -1,17 +1,23 @@ 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" + + reqUtil "webserver/extend/util" "webserver/util" @@ -127,31 +133,83 @@ } } -func GetSdkList(sdkName string) []map[string]interface{} { - // 寰呰繑鍥炵殑鏁版嵁 - sdks, idsCache := queryDatabase(sdkName) +//installedFlag 濡傛灉鏄痶rue,琛ㄧず鍙煡鏈湴鐨勶紝涓嶉渶瑕佹瘮瀵规煡鐪嬫湭瀹夎鐨勭畻娉� +func GetSdkList(sdkName string, installedFlag bool) []SdkInsOrUpgrade { + var api dbapi.SdkApi + localSdks := api.FindAll(sdkName) //鏈湴宸插畨瑁呮墍鏈夌畻娉�,甯﹂『搴� + if localSdks == nil { + return []SdkInsOrUpgrade{} + } + installedSdks := make([]SdkInsOrUpgrade, len(localSdks)) - // 鏌ヨ鏈湴宸茬粡瀛樺湪鐨勭畻娉曞拰杩滅鐨勫叏閮ㄧ畻娉�, 鐒跺悗鍜屽凡瀹夎鐨勬瘮瀵�, 杩斿洖鍏ㄩ儴鍙敤鐨勭畻娉曠粍. 鏈畨瑁呯殑绠楁硶鍦ㄥ墠绔蛋涓嬭浇娴佺▼ - localSdks := GetLocalSdks() - for _, sdk := range localSdks { - id := sdk["id"].(string) - if !idsCache[id] { - idsCache[id] = true - - sdk["enable"] = false - sdk["installed"] = false - - // 涓嶈繑鍥炲弬鏁颁俊鎭� - delete(sdk, "args") - sdks = append(sdks, sdk) + localSdkM := make(map[string]SdkInsOrUpgrade) + for idx,ls :=range localSdks { + siou := SdkInsOrUpgrade{ + Installed: true, } + sdk := Sdk{ + CreateTime: ls.CreateTime, + CreateBy: ls.CreateBy, + UpdateTime: ls.UpdateTime, + Enable: ls.Enable, + DelFlag: int(ls.DelFlag), + } + var sc SdkCommon + sc.copyFromProto(ls) + sdk.SdkCommon = sc + for _,arg := range ls.Args { + sdk.Args = append(sdk.Args, SdkArg{ + Alias: arg.Alias, + Name: arg.Name, + Type: arg.Type, + Must: arg.Must, + Unit: arg.Unit, + Range: arg.Range, + DefaultValue: arg.DefaultValue, + DefaultOperator: arg.DefaultOperator, + Sort: int(arg.Sort), + }) + } + siou.Sdk = sdk + localSdkM[siou.Id] = siou + installedSdks[idx] = siou } - // 鐩墠杩樻病鏈夎繙绔畻娉曞簱, - // remoteSdks := getRemoteSdks() + nInsSdks := make([]SdkInsOrUpgrade,0) + if !installedFlag { + //杩滅鍙敤鐨勭畻娉� + remoteSdks := findAllMySdk() + //logger.Debug("remoteSdks:", remoteSdks) - return sdks + for _,sdk := range remoteSdks { + if v,ok := localSdkM[sdk.Id];ok { //鏈湴宸插畨瑁� + ls := v + if shouldVersionBeUpgrade(ls.Version, sdk.Version) { //鍒ゆ柇鐗堟湰鍙锋槸鍚﹂渶瑕佸崌绾� + ls.Installed = true + ls.IsUpgrade = true //闇�瑕佸崌绾� + ls.RemoteVersion = sdk.Version //杩滅鐨勭増鏈彿 + } + localSdkM[sdk.Id] = ls + for index,es := range installedSdks { + if es.Id == sdk.Id { + installedSdks[index] = ls + break + } + } + } else { //鏈湴鏈畨瑁咃紝闇�瑕佸畨瑁� + bIns := SdkInsOrUpgrade{ + RemoteVersion: sdk.Version, + IsUpgrade: false, + Installed: false, + } + bIns.Sdk = sdk + nInsSdks = append(nInsSdks, bIns) + } + } + } + + return append(installedSdks, nInsSdks...) } func queryDatabase(sdkName string) ([]map[string]interface{}, map[string]bool) { @@ -175,6 +233,46 @@ } return sdks, ids +} + + +type shopSdks struct { + Sdks []Sdk `json:"sdks"` +} + +const ( + token = "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjQ3NDUwMjU5MjMsInVzZXIiOiJ7XCJpZFwiOlwiZTZjY2QzNmQtNGYxNi00NmZjLTg4ZDUtMDczNjU4NjZkMjA1XCIsXCJwZXJtaXNzaW9uc1wiOltcInByb2R1Y3RNYW5nZTpwdWJsaXNoXCIsXCJjb2RlTWFuZ2U6dmlld1wiLFwiZGV2aWNlTWFuYWdlOmFkZFwiLFwiYWRtaW5NYW5hZ2VcIixcIm9yZGVyTWFuZ2VcIixcImRldmljZU1hbmFnZTp2aWV3XCIsXCJwcm9kdWN0TWFuZ2U6YWRkXCIsXCJhZG1pbk1hbmFnZTp2aWV3XCIsXCJjb2RlTWFuZ2U6YWRkXCIsXCJwcm9kdWN0TWFuZ2U6b2ZmU2FsZVwiLFwib3JkZXJNYW5nZTpjYW5jZWxcIixcInByb2R1Y3RDZW50ZXI6ZG93bmxvYWRcIixcInByb2R1Y3RDZW50ZXI6YnV5XCIsXCJwcm9kdWN0TWFuZ2U6dmlld1wiLFwiYXBpXCIsXCJob21lXCIsXCJvcmRlck1hbmdlOnBheVwiLFwiYWRtaW5NYW5hZ2U6YWRkXCIsXCJvcmRlck1hbmdlOmRvd25sb2FkXCIsXCJwcm9kdWN0Q2VudGVyXCIsXCJkZXZpY2VNYW5hZ2U6dW5iaW5kXCIsXCJvcmRlck1hbmdlOnZpZXdcIixcImFkbWluTWFuYWdlOmVkaXRcIixcImRldmljZU1hbmFnZVwiLFwidmlwTWFuYWdlOmFkZFwiLFwidmlwTWFuYWdlOnZpZXdcIixcInByb2R1Y3RDZW50ZXI6dmlld1wiLFwidmlwTWFuYWdlOmVkaXRcIixcInZpcE1hbmFnZVwiLFwicHJvZHVjdE1hbmdlOmVkaXRcIixcImNvZGVNYW5nZVwiLFwicHJvZHVjdE1hbmdlXCJdLFwidXNlcm5hbWVcIjpcImJhc2ljXCJ9In0.vwjAFkWuEyadRLvIOGK8LFE3MjpY3SQ7j6AlTXnQDG8" +) + +func findAllMySdk() []Sdk { + url := "http://"+config.ShopConf.Url+"/data/api-s/sdk/findAllMySdk" + machineCode := licence.GetMachineCode() + fmt.Println("url:", url, "machineCode:", machineCode) + paramBody := map[string]interface{} { + "serverId": config.Server.AnalyServerId, + "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 nil + } + var res dbapi.Result + if err = json.Unmarshal(respBody, &res); err != nil { + logger.Debug("unmarshal err:", err) + return nil + } + bytes, _ := json.Marshal(res.Data) + var ss shopSdks + if err := json.Unmarshal(bytes, &ss);err != nil { + logger.Debug("unmarshal err:", err) + return nil + } + + return ss.Sdks } func GetLocalSdks() []map[string]interface{} { @@ -222,3 +320,79 @@ 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 + } + if !res.Success { + logger.Debug("res.Data:", res.Data) + return false, errors.New("璇锋眰鍟嗗煄澶辫触") + } + bytes, _ := json.Marshal(res.Data) + var resp downOrUpResp + if err := json.Unmarshal(bytes, &resp);err != nil { + logger.Debug("unmarshal err:", err) + return false, err + } + logger.Debug("res.Data:", res.Data, "resp:", resp) + 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 + } + if unPackB,unPackErr := unPackPatchPackage(resp.Md5, ext); !unPackB { //瑙e帇澶辫触 + return false, unPackErr + } + b, err := installSdk(resp.Md5, ext) + if b { + return true, nil + } + + return false, err +} \ No newline at end of file -- Gitblit v1.8.0