Skip to content

Commit

Permalink
Print storage names in backup-list
Browse files Browse the repository at this point in the history
  • Loading branch information
rdjjke committed Aug 28, 2023
1 parent 67e113c commit 0d85126
Show file tree
Hide file tree
Showing 30 changed files with 1,622 additions and 1,225 deletions.
28 changes: 24 additions & 4 deletions cmd/pg/backup_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ import (
"github.com/wal-g/tracelog"
"github.com/wal-g/wal-g/internal"
"github.com/wal-g/wal-g/internal/databases/postgres"
"github.com/wal-g/wal-g/internal/multistorage"
"github.com/wal-g/wal-g/internal/multistorage/cache"
"github.com/wal-g/wal-g/internal/multistorage/policies"
"github.com/wal-g/wal-g/utility"
)

Expand All @@ -21,13 +24,30 @@ var (
Use: "backup-list",
Short: backupListShortDescription,
Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) {
folder, err := internal.ConfigureFolder()
Run: func(cmd *cobra.Command, _ []string) {
primaryStorage, err := internal.ConfigureFolder()
tracelog.ErrorLogger.FatalOnError(err)

failoverStorages, err := internal.InitFailoverStorages()
tracelog.ErrorLogger.FatalOnError(err)

cacheLifetime, err := internal.GetDurationSetting(internal.PgFailoverStorageCacheLifetime)
tracelog.ErrorLogger.FatalOnError(err)
aliveCheckTimeout, err := internal.GetDurationSetting(internal.PgFailoverStoragesCheckTimeout)
tracelog.ErrorLogger.FatalOnError(err)
cache, err := cache.NewStatusCache(primaryStorage, failoverStorages, cacheLifetime, aliveCheckTimeout)
tracelog.ErrorLogger.FatalOnError(err)

folder := multistorage.NewFolder(cache)
folder = multistorage.SetPolicies(folder, policies.UniteAllStorages)
folder, err = multistorage.UseAllAliveStorages(folder)
tracelog.ErrorLogger.FatalOnError(err)

backupsFolder := folder.GetSubFolder(utility.BaseBackupPath)
if detail {
postgres.HandleDetailedBackupList(folder.GetSubFolder(utility.BaseBackupPath), pretty, json)
postgres.HandleDetailedBackupList(backupsFolder, pretty, json)
} else {
internal.DefaultHandleBackupList(folder.GetSubFolder(utility.BaseBackupPath), pretty, json)
internal.HandleDefaultBackupList(backupsFolder, pretty, json)
}
},
}
Expand Down
80 changes: 11 additions & 69 deletions internal/backup_list_handler.go
Original file line number Diff line number Diff line change
@@ -1,86 +1,28 @@
package internal

import (
"encoding/json"
"fmt"
"io"
"os"
"text/tabwriter"

"github.com/jedib0t/go-pretty/table"
"github.com/wal-g/tracelog"
"github.com/wal-g/wal-g/internal/printlist"
"github.com/wal-g/wal-g/pkg/storages/storage"
)

func HandleDefaultBackupList(folder storage.Folder, pretty, json bool) {
getBackupsFunc := func() ([]BackupTime, error) {
res, err := GetBackups(folder)
if _, ok := err.(NoBackupsFoundError); ok {
err = nil
}
return res, err
}
writeBackupListFunc := func(backups []BackupTime) {
SortBackupTimeSlices(backups)
switch {
case json:
err := WriteAsJSON(backups, os.Stdout, pretty)
tracelog.ErrorLogger.FatalOnError(err)
case pretty:
WritePrettyBackupList(backups, os.Stdout)
default:
WriteBackupList(backups, os.Stdout)
}
}

HandleBackupList(getBackupsFunc, writeBackupListFunc)
}

func HandleBackupList(
getBackupsFunc func() ([]BackupTime, error),
writeBackupListFunc func([]BackupTime),
) {
backups, err := getBackupsFunc()
tracelog.ErrorLogger.FatalOnError(err)

if len(backups) == 0 {
backupTimes, err := GetBackups(folder)
_, noBackupsErr := err.(NoBackupsFoundError)
if noBackupsErr {
tracelog.InfoLogger.Println("No backups found")
return
}
tracelog.ErrorLogger.FatalfOnError("Get backups from folder: %v", err)

writeBackupListFunc(backups)
}

func WriteBackupList(backups []BackupTime, output io.Writer) {
writer := tabwriter.NewWriter(output, 0, 0, 1, ' ', 0)
defer writer.Flush()
fmt.Fprintln(writer, "name\tmodified\twal_segment_backup_start")
for _, b := range backups {
fmt.Fprintf(writer, "%v\t%v\t%v\n", b.BackupName, FormatTime(b.Time), b.WalFileName)
}
}

func WritePrettyBackupList(backups []BackupTime, output io.Writer) {
writer := table.NewWriter()
writer.SetOutputMirror(output)
defer writer.Render()
writer.AppendHeader(table.Row{"#", "Name", "Modified", "WAL segment backup start"})
for i, b := range backups {
writer.AppendRow(table.Row{i, b.BackupName, PrettyFormatTime(b.Time), b.WalFileName})
}
}
SortBackupTimeSlices(backupTimes)

func WriteAsJSON(data interface{}, output io.Writer, pretty bool) error {
var bytes []byte
var err error
if pretty {
bytes, err = json.MarshalIndent(data, "", " ")
} else {
bytes, err = json.Marshal(data)
}
if err != nil {
return err
printableEntities := make([]printlist.Entity, len(backupTimes))
for i := range backupTimes {
printableEntities[i] = backupTimes[i]
}
_, err = output.Write(bytes)
return err
err = printlist.List(printableEntities, os.Stdout, pretty, json)
tracelog.ErrorLogger.FatalfOnError("Print backups: %v", err)
}

0 comments on commit 0d85126

Please sign in to comment.