restore: print JSON versions of errors in --json mode
Previously, they were printed as freeform text. This also adds a ui.Terminal interface to make writing tests easier and also adds a few tests.
This commit is contained in:
parent
ad2585af67
commit
a376323331
17 changed files with 234 additions and 70 deletions
|
@ -7,11 +7,11 @@ import (
|
|||
)
|
||||
|
||||
type jsonPrinter struct {
|
||||
terminal term
|
||||
terminal ui.Terminal
|
||||
verbosity uint
|
||||
}
|
||||
|
||||
func NewJSONProgress(terminal term, verbosity uint) ProgressPrinter {
|
||||
func NewJSONProgress(terminal ui.Terminal, verbosity uint) ProgressPrinter {
|
||||
return &jsonPrinter{
|
||||
terminal: terminal,
|
||||
verbosity: verbosity,
|
||||
|
@ -22,6 +22,10 @@ func (t *jsonPrinter) print(status interface{}) {
|
|||
t.terminal.Print(ui.ToJSONString(status))
|
||||
}
|
||||
|
||||
func (t *jsonPrinter) error(status interface{}) {
|
||||
t.terminal.Error(ui.ToJSONString(status))
|
||||
}
|
||||
|
||||
func (t *jsonPrinter) Update(p State, duration time.Duration) {
|
||||
status := statusUpdate{
|
||||
MessageType: "status",
|
||||
|
@ -41,6 +45,16 @@ func (t *jsonPrinter) Update(p State, duration time.Duration) {
|
|||
t.print(status)
|
||||
}
|
||||
|
||||
func (t *jsonPrinter) Error(item string, err error) error {
|
||||
t.error(errorUpdate{
|
||||
MessageType: "error",
|
||||
Error: err.Error(),
|
||||
During: "restore",
|
||||
Item: item,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func (t *jsonPrinter) CompleteItem(messageType ItemAction, item string, size uint64) {
|
||||
if t.verbosity < 3 {
|
||||
return
|
||||
|
@ -99,6 +113,13 @@ type statusUpdate struct {
|
|||
BytesSkipped uint64 `json:"bytes_skipped,omitempty"`
|
||||
}
|
||||
|
||||
type errorUpdate struct {
|
||||
MessageType string `json:"message_type"` // "error"
|
||||
Error string `json:"error"`
|
||||
During string `json:"during"`
|
||||
Item string `json:"item"`
|
||||
}
|
||||
|
||||
type verboseUpdate struct {
|
||||
MessageType string `json:"message_type"` // "verbose_status"
|
||||
Action string `json:"action"`
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue