github.com/pluswing/datasync@v1.1.1-0.20240218052257-9077f6fc4ae3/cmd/dump.go (about)

     1  package cmd
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"time"
     7  
     8  	"github.com/pluswing/datasync/compress"
     9  	"github.com/pluswing/datasync/data"
    10  	"github.com/pluswing/datasync/dump/dump_file"
    11  	"github.com/pluswing/datasync/dump/dump_mysql"
    12  	"github.com/pluswing/datasync/file"
    13  	"github.com/spf13/cobra"
    14  )
    15  
    16  var message string
    17  
    18  var dumpCmd = &cobra.Command{
    19  	Use:   "dump",
    20  	Short: "dump current data",
    21  	Long:  "dump current data",
    22  	Run: func(cmd *cobra.Command, args []string) {
    23  
    24  		_, err := file.FindCurrentDir()
    25  		if err != nil {
    26  			fmt.Println("datasync.yaml not found.\nPlease run `datasync init`")
    27  			return
    28  		}
    29  
    30  		dumpDir, err := file.MakeTempDir()
    31  		cobra.CheckErr(err)
    32  		defer os.RemoveAll(dumpDir)
    33  
    34  		for _, target := range setting.Targets {
    35  			data.DispatchTarget(target, data.TargetFuncTable{
    36  				Mysql: func(conf data.TargetMysqlType) {
    37  					dump_mysql.Dump(dump_mysql.MysqlDumpFile(dumpDir, conf), conf)
    38  				},
    39  				File: func(conf data.TargetFileType) {
    40  					dump_file.Dump(dumpDir, conf)
    41  				},
    42  			})
    43  		}
    44  
    45  		zipFile := compress.Compress(dumpDir)
    46  
    47  		versionId, err := file.NewUUID()
    48  		cobra.CheckErr(err)
    49  
    50  		newVersion := data.VersionType{
    51  			Id:      versionId,
    52  			Time:    time.Now().Unix(),
    53  			Message: message,
    54  		}
    55  
    56  		dir, err := file.DataDir()
    57  		cobra.CheckErr(err)
    58  		dest := newVersion.FileNameWithDir(dir)
    59  		err = file.MoveFile(zipFile, dest)
    60  		cobra.CheckErr(err)
    61  
    62  		local := file.ReadLocalDataSyncFile()
    63  		local.Histories = append(local.Histories, newVersion)
    64  		file.WriteLocalDataSyncFile(local)
    65  		file.UpdateVersionFile(versionId)
    66  
    67  		fmt.Printf("dump Succeeded. version_id = %s\n", versionId)
    68  	},
    69  }
    70  
    71  func init() {
    72  	rootCmd.AddCommand(dumpCmd)
    73  
    74  	dumpCmd.Flags().StringVarP(&message, "message", "m", "", "commit mesasge")
    75  	dumpCmd.MarkFlagRequired("message")
    76  }