pitr/cli/internal/cmd/show.go (103 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package cmd import ( "encoding/json" "fmt" "github.com/apache/shardingsphere-on-cloud/pitr/cli/internal/pkg" "github.com/apache/shardingsphere-on-cloud/pitr/cli/internal/pkg/model" "github.com/apache/shardingsphere-on-cloud/pitr/cli/internal/pkg/xerr" "github.com/apache/shardingsphere-on-cloud/pitr/cli/pkg/logging" "github.com/spf13/cobra" ) var ShowCmd = &cobra.Command{ Use: "show", Short: "Show backup history", Run: func(cmd *cobra.Command, args []string) { if CSN != "" && RecordID != "" { logging.Error("Please specify only one of csn and record id") return } if err := show(); err != nil { logging.Error(err.Error()) } }, } func init() { RootCmd.AddCommand(ShowCmd) ShowCmd.Flags().StringVarP(&CSN, "csn", "", "", "commit sequence number") ShowCmd.Flags().StringVarP(&RecordID, "id", "", "", "backup record id") } func show() error { ls, err := pkg.NewLocalStorage(pkg.DefaultRootDir()) if err != nil { return xerr.NewCliErr(fmt.Sprintf("connect to local storage failed, err:%s", err.Error())) } // show backup record by csn if CSN != "" { bak, err := ls.ReadByCSN(CSN) if err != nil { return xerr.NewCliErr(fmt.Sprintf("read backup record failed, err:%s", err.Error())) } if bak == nil { fmt.Println("Didn't find backup record by csn: ", CSN) return nil } if err := formatRecord([]*model.LsBackup{bak}); err != nil { return err } return nil } // show backup record by id if RecordID != "" { bak, err := ls.ReadByID(RecordID) if err != nil { return xerr.NewCliErr(fmt.Sprintf("read backup record failed, err:%s", err.Error())) } if bak == nil { fmt.Println("Didn't find backup record by record id: ", RecordID) return nil } if err := formatRecord([]*model.LsBackup{bak}); err != nil { return err } return nil } // show all backup record backupList, err := ls.ReadAll() if err != nil { return xerr.NewCliErr(fmt.Sprintf("read backup record failed, err:%s", err.Error())) } if len(backupList) == 0 { fmt.Println("Didn't find any backup record.") return nil } if err := formatRecord(backupList); err != nil { return err } return nil } func formatRecord(backups []*model.LsBackup, mode ...string) error { var m string if len(mode) == 0 { m = "json" } else { m = mode[0] } switch m { case "json": return formatRecordJSON(backups) case "table": // TODO format record table return nil default: return formatRecordJSON(backups) } } func formatRecordJSON(backups []*model.LsBackup) error { var ds []string for _, backup := range backups { data, err := json.MarshalIndent(backup, "", "\t") if err != nil { logging.Error(err.Error()) return xerr.NewCliErr("format backup record failed, indent failed.") } ds = append(ds, string(data)) } fmt.Println(ds) return nil }