-
Notifications
You must be signed in to change notification settings - Fork 444
/
backup_list_handler.go
99 lines (87 loc) · 2.28 KB
/
backup_list_handler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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/pkg/storages/storage"
)
type InfoLogger interface {
Println(v ...interface{})
}
type ErrorLogger interface {
FatalOnError(err error)
}
type Logging struct {
InfoLogger InfoLogger
ErrorLogger ErrorLogger
}
func DefaultHandleBackupList(folder storage.Folder, pretty, json bool) {
getBackupsFunc := func() ([]BackupTime, error) {
return GetBackups(folder)
}
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)
}
}
logging := Logging{
InfoLogger: tracelog.InfoLogger,
ErrorLogger: tracelog.ErrorLogger,
}
HandleBackupList(getBackupsFunc, writeBackupListFunc, logging)
}
func HandleBackupList(
getBackupsFunc func() ([]BackupTime, error),
writeBackupListFunc func([]BackupTime),
logging Logging,
) {
backups, err := getBackupsFunc()
if len(backups) == 0 {
logging.InfoLogger.Println("No backups found")
return
}
logging.ErrorLogger.FatalOnError(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})
}
}
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
}
_, err = output.Write(bytes)
return err
}