From 0d858e8610a79b15cb337daf134c4a00962dd477 Mon Sep 17 00:00:00 2001 From: liuxiaolong <liuxiaolong@aiotlink.com> Date: 星期四, 04 六月 2020 16:44:29 +0800 Subject: [PATCH] add sdk upload --- service/SdkInstall.go | 103 ++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 81 insertions(+), 22 deletions(-) diff --git a/service/SdkInstall.go b/service/SdkInstall.go index 3ad4557..b930aab 100644 --- a/service/SdkInstall.go +++ b/service/SdkInstall.go @@ -8,12 +8,17 @@ "io/ioutil" "os" "path" + "path/filepath" "webserver/extend/config" "webserver/extend/util" ) +type SdkInstallService struct { + +} + //绠楁硶瀹夎鍖呭畨瑁� -func (sv SysService) SdkInstall(identifier string,filename string) (bool,error) { +func (sv SdkInstallService) SdkInstall(identifier string,filename string) (bool,error) { configPatchPath := "" if config.Server.PatchPath != "" { configPatchPath = config.Server.PatchPath @@ -28,15 +33,17 @@ if util.Exists(zipFilePath) { strMd5, e := util.FileMd5(zipFilePath) if e !=nil || strMd5 == "" { + go os.Remove(zipFilePath) return false,errors.New("鑾峰彇瀹夎鍖卪d5澶辫触") } if strMd5 == identifier { - if !installSdk(identifier, ext) { - return false,errors.New("鎵ц瀹夎杩囩▼寮傚父,璇风‘瀹氫笂浼犵殑瀹夎鍖呮槸tar.gz鏍煎紡") + if _,insE := installSdk(identifier, ext); insE != nil { + return false, insE } return true,nil } else { + go os.Remove(zipFilePath) logger.Debug("strMd5 is", strMd5,"identifier is",identifier,"not equal") return false,errors.New("鏍¢獙瀹夎鏂囦欢澶辫触") } @@ -46,7 +53,7 @@ } //瀹夎sdk -func installSdk(identifier string, ext string) bool { +func installSdk(identifier string, ext string) (bool, error) { configPatchPath := "" if config.Server.PatchPath != "" { configPatchPath = config.Server.PatchPath @@ -54,34 +61,60 @@ configPatchPath = "/opt/vasystem/patch" } //1.瑙e帇缂╂洿鏂板寘 - unPackPath := configPatchPath+"/"+identifier+"_basic/" - if util.Exists(unPackPath) { + unPackTargetPath := configPatchPath+"/"+identifier+"_basic/" + unPackFilePath := configPatchPath+"/"+identifier+ext + defer func() { + if util.Exists(unPackTargetPath) { + os.RemoveAll(unPackTargetPath) + } + if util.Exists(unPackFilePath) { + os.RemoveAll(unPackFilePath) + } + }() + + if util.Exists(unPackTargetPath) { //姝ょ増鏈凡缁忔洿鏂拌繃 - rmErr := os.RemoveAll(unPackPath) + rmErr := os.RemoveAll(unPackTargetPath) if rmErr !=nil { - return false + return false,rmErr } } - if !util.CreateDirectory(unPackPath) { - return false + if !util.CreateDirectory(unPackTargetPath) { + return false, errors.New("鍒涘缓鍘嬬缉鏂囦欢澶瑰け璐�") } - unPackFilePath := configPatchPath+"/"+identifier+ext - err := util.UnTarGz(unPackFilePath, unPackPath) + logger.Debug("unPackFilePath:", unPackFilePath, "unPackPath:", unPackTargetPath) + _,err := util.UnTarGzByCmd(unPackFilePath, unPackTargetPath) if err !=nil { logger.Debug("UnPack err:",err,"unPackFile:",unPackFilePath) - return false + return false, err } + targetFileName := "" + err = filepath.Walk(unPackTargetPath, func(path string, f os.FileInfo, err error) error { + if f == nil { + return err + } + if f.IsDir() { + targetFileName = f.Name() + } + return nil + }) + if err != nil { + return false, err + } + unPackPath := unPackTargetPath + targetFileName +"/" //瑙e帇瀹屾垚锛岃幏鍙栧畨瑁呭寘涓殑鏂囦欢锛屽紑濮嬪畨瑁� //1.瑙f瀽瀹夎璇存槑ins.inc incPath := unPackPath+"ins.inc" - ret := false if util.Exists(incPath) { if incB, err := ioutil.ReadFile(incPath);err == nil { var ins InsInc if err = json.Unmarshal(incB, &ins); err == nil { //澶勭悊鎺堟潈淇℃伅 + curMc := "" + if ins.MachineCode != curMc { + } //2.瑙f瀽sdk.def,灏唖o鍜寊conf澶嶅埗鍒�/opt/vasystem/libs/鏂囦欢澶逛笅 defPath := unPackPath + "sdk.def" if util.Exists(defPath) { @@ -90,6 +123,7 @@ soM := make(map[string]SdkDef) var skDefArr []SdkDef if err = json.Unmarshal(defB, &skDefArr);err == nil { + //娉ㄥ唽绠楁硶淇℃伅鍜岀畻娉曞弬鏁板埌dbserver var sdkApi dbapi.SdkApi for _,skd := range skDefArr { if _,ok := soM[skd.Def.SdkType];!ok { @@ -121,9 +155,9 @@ srv.Args = append(srv.Args, sra) } paramBody := util.Struct2Map(srv) + logger.Debug("sdkApi.Register paramBody:", paramBody) sdkApi.Register(paramBody) //灏嗙畻娉曟敞鍐屽埌鏁版嵁搴撲腑 } - zconfPath := "/opt/vasystem/bin/zconf/" libPath := "/opt/vasystem/libs/" if !util.DirExists(zconfPath) { @@ -133,22 +167,47 @@ os.MkdirAll(libPath, 0777) } for sdkType,_ := range soM { - //澶嶅埗json鍚姩鏂囦欢 - util.CopyFile(unPackPath+sdkType+"/"+sdkType+".json", zconfPath) - util.CopyDir(unPackPath+sdkType+"/"+sdkType, libPath) - if util.DirExists(unPackPath+sdkType+"models") { - util.CopyDir(unPackPath+sdkType+"models", "/opt/vasystem/bin/") + //鍏堣В鍘婼dkType.tar.gz鏂囦欢 + if unTarGzE := util.UnTarGz(unPackPath+sdkType+".tar.gz", unPackPath);unTarGzE == nil { + //澶嶅埗json鍚姩鏂囦欢 + if util.Exists(unPackPath+sdkType+"/zconf/"+sdkType+".json") { + util.CopyFile(unPackPath+sdkType+"/zconf/"+sdkType+".json", zconfPath+sdkType+".json") + } + if util.DirExists(unPackPath+sdkType) { + if _,cE := util.CopyDirByCmd(unPackPath+sdkType, libPath);cE != nil { + return false, cE + } + } + if util.DirExists(unPackPath+sdkType+"/models") { + if _,cE := util.CopyDirByCmd(unPackPath+sdkType+"/models", "/opt/vasystem/bin/zconf"); cE != nil { + return false, cE + } + } + } else { + logger.Debug("unTarGzE sdkType.tar.gz err:", unTarGzE) } } - ret = true + + } else { + return false, errors.New("鍙嶅簭鍒楀寲绠楁硶瀹氫箟淇℃伅澶辫触") } + } else { + return false, errors.New("璇诲彇绠楁硶瀹氫箟淇℃伅澶辫触") } + } else { + return false, errors.New("绠楁硶瀹氫箟淇℃伅涓㈠け") } + } else { + return false, errors.New("鍙嶅簭鍒楀寲鎺堟潈淇℃伅澶辫触") } + } else { + return false, errors.New("璇诲彇鎺堟潈鏂囦欢澶辫触") } + } else { + return false, errors.New("鎺堟潈鏂囦欢涓嶅瓨鍦�") } - return ret + return true, nil } -- Gitblit v1.8.0