Finish the first version of migrate.

This commit is contained in:
zicla 2019-05-20 02:43:44 +08:00
parent 256cf56426
commit b7a81e0dce
2 changed files with 84 additions and 0 deletions

View File

@ -12,6 +12,7 @@ type PreferenceController struct {
BaseController BaseController
preferenceDao *PreferenceDao preferenceDao *PreferenceDao
preferenceService *PreferenceService preferenceService *PreferenceService
migrating bool
} }
func (this *PreferenceController) Init() { func (this *PreferenceController) Init() {
@ -37,6 +38,7 @@ func (this *PreferenceController) RegisterRoutes() map[string]func(writer http.R
routeMap["/api/preference/fetch"] = this.Wrap(this.Fetch, USER_ROLE_GUEST) routeMap["/api/preference/fetch"] = this.Wrap(this.Fetch, USER_ROLE_GUEST)
routeMap["/api/preference/edit"] = this.Wrap(this.Edit, USER_ROLE_ADMINISTRATOR) routeMap["/api/preference/edit"] = this.Wrap(this.Edit, USER_ROLE_ADMINISTRATOR)
routeMap["/api/preference/system/cleanup"] = this.Wrap(this.SystemCleanup, USER_ROLE_ADMINISTRATOR) routeMap["/api/preference/system/cleanup"] = this.Wrap(this.SystemCleanup, USER_ROLE_ADMINISTRATOR)
routeMap["/api/preference/migrate20to30"] = this.Wrap(this.Migrate20to30, USER_ROLE_ADMINISTRATOR)
return routeMap return routeMap
} }
@ -123,6 +125,44 @@ func (this *PreferenceController) Edit(writer http.ResponseWriter, request *http
return this.Success(preference) return this.Success(preference)
} }
//migrate 2.0's db data and file data to 3.0
func (this *PreferenceController) Migrate20to30(writer http.ResponseWriter, request *http.Request) *result.WebResult {
this.logger.Info("start migrating from 2.0 to 3.0")
if this.migrating {
panic(result.BadRequest("migrating work is processing"))
} else {
this.migrating = true
}
defer func() {
this.migrating = false
}()
migrateDashboardSql := "INSERT INTO `tank`.`tank30_download_token` ( `uuid`, `sort`, `update_time`, `create_time`, `user_uuid`, `matter_uuid`, `expire_time`, `ip` ) ( SELECT `uuid`, `sort`, `update_time`, `create_time`, `user_uuid`, `matter_uuid`, `expire_time`, `ip` FROM `tank`.`tank20_download_token`)"
this.logger.Info(migrateDashboardSql)
core.CONTEXT.GetDB().Exec(migrateDashboardSql)
migrateDownloadTokenSql := "INSERT INTO `tank`.`tank30_dashboard` ( `uuid`, `sort`, `update_time`, `create_time`, `invoke_num`, `total_invoke_num`, `uv`, `total_uv`, `matter_num`, `total_matter_num`, `file_size`, `total_file_size`, `avg_cost`, `dt` ) ( SELECT `uuid`, `sort`, `update_time`, `create_time`, `invoke_num`, `total_invoke_num`, `uv`, `total_uv`, `matter_num`, `total_matter_num`, `file_size`, `total_file_size`, `avg_cost`, `dt` FROM `tank`.`tank20_dashboard` )"
this.logger.Info(migrateDownloadTokenSql)
core.CONTEXT.GetDB().Exec(migrateDownloadTokenSql)
migrateMatterSql := "INSERT INTO `tank`.`tank30_matter` ( `uuid`, `sort`, `update_time`, `create_time`, `puuid`, `user_uuid`, `username`, `dir`, `name`, `md5`, `size`, `privacy`, `path`, `times` ) ( SELECT `uuid`, `sort`, `update_time`, `create_time`, `puuid`, `user_uuid`, '', `dir`, `name`, `md5`, `size`, `privacy`, `path`, `times` FROM `tank`.`tank20_matter` ) "
this.logger.Info(migrateMatterSql)
core.CONTEXT.GetDB().Exec(migrateMatterSql)
migrateUploadTokenSql := "INSERT INTO `tank`.`tank30_upload_token` ( `uuid`, `sort`, `update_time`, `create_time`, `user_uuid`, `folder_uuid`, `matter_uuid`, `expire_time`, `filename`, `privacy`, `size`, `ip` ) ( SELECT `uuid`, `sort`, `update_time`, `create_time`, `user_uuid`, `folder_uuid`, `matter_uuid`, `expire_time`, `filename`, `privacy`, `size`, `ip` FROM `tank`.`tank20_upload_token` ) "
this.logger.Info(migrateUploadTokenSql)
core.CONTEXT.GetDB().Exec(migrateUploadTokenSql)
//username in tank2.0 add _20.
migrateUserSql := "INSERT INTO `tank`.`tank30_user` ( `uuid`, `sort`, `update_time`, `create_time`, `role`, `username`, `password`, `avatar_url`, `last_ip`, `last_time`, `size_limit`, `total_size_limit`, `total_size`, `status` ) ( SELECT `uuid`, `sort`, `update_time`, `create_time`, `role`, CONCAT(`username`,'_20') as `username`, `password`, `avatar_url`, `last_ip`, `last_time`, `size_limit`, -1, 0, `status` FROM `tank`.`tank20_user` )"
this.logger.Info(migrateUserSql)
core.CONTEXT.GetDB().Exec(migrateUserSql)
return this.Success("OK")
}
//cleanup system data. //cleanup system data.
func (this *PreferenceController) SystemCleanup(writer http.ResponseWriter, request *http.Request) *result.WebResult { func (this *PreferenceController) SystemCleanup(writer http.ResponseWriter, request *http.Request) *result.WebResult {

View File

@ -25,6 +25,8 @@ const (
MODE_CRAWL = "crawl" MODE_CRAWL = "crawl"
//Current version. //Current version.
MODE_VERSION = "version" MODE_VERSION = "version"
//migrate 2.0 to 3.0
MODE_MIGRATE_20_TO_30 = "migrate20to30"
) )
type TankApplication struct { type TankApplication struct {
@ -118,6 +120,10 @@ func (this *TankApplication) Start() {
this.HandleMirror() this.HandleMirror()
} else if strings.ToLower(this.mode) == MODE_MIGRATE_20_TO_30 {
this.HandleMigrate20to30()
} else if strings.ToLower(this.mode) == MODE_CRAWL { } else if strings.ToLower(this.mode) == MODE_CRAWL {
this.HandleCrawl() this.HandleCrawl()
@ -254,3 +260,41 @@ func (this *TankApplication) HandleVersion() {
fmt.Printf("EyeblueTank %s\r\n", core.VERSION) fmt.Printf("EyeblueTank %s\r\n", core.VERSION)
} }
//migrate 2.0 to 3.0
func (this *TankApplication) HandleMigrate20to30() {
if this.src == "" {
panic("src is required")
}
fmt.Printf("start migrating 2.0 to 3.0. MatterPath2.0 = %s \r\n", this.src)
urlString := fmt.Sprintf("%s/api/preference/migrate20to30", this.host)
params := url.Values{
"matterPath": {this.src},
core.USERNAME_KEY: {this.username},
core.PASSWORD_KEY: {this.password},
}
response, err := http.PostForm(urlString, params)
core.PanicError(err)
bodyBytes, err := ioutil.ReadAll(response.Body)
webResult := &result.WebResult{}
err = jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal(bodyBytes, webResult)
if err != nil {
fmt.Printf("error response format %s \r\n", err.Error())
return
}
if webResult.Code == result.OK.Code {
fmt.Println("success")
} else {
fmt.Printf("error %s\r\n", webResult.Msg)
}
}