forked from TrueCloudLab/restic
json: switch backup and restore errors from string to struct types
This keeps backwards compatibility with the previous empty structs. And maybe we'd want to put other fields into the inner struct later, rather than the outer message.
This commit is contained in:
parent
a376323331
commit
88f59fc2d6
5 changed files with 36 additions and 15 deletions
|
@ -139,7 +139,7 @@ Error
|
|||
+----------------------+-------------------------------------------+
|
||||
| ``message_type`` | Always "error" |
|
||||
+----------------------+-------------------------------------------+
|
||||
| ``error`` | Error message |
|
||||
| ``error.message`` | Error message |
|
||||
+----------------------+-------------------------------------------+
|
||||
| ``during`` | What restic was trying to do |
|
||||
+----------------------+-------------------------------------------+
|
||||
|
@ -539,6 +539,19 @@ Status
|
|||
|``bytes_skipped`` | Total size of skipped files |
|
||||
+----------------------+------------------------------------------------------------+
|
||||
|
||||
Error
|
||||
^^^^^
|
||||
|
||||
+----------------------+-------------------------------------------+
|
||||
| ``message_type`` | Always "error" |
|
||||
+----------------------+-------------------------------------------+
|
||||
| ``error.message`` | Error message |
|
||||
+----------------------+-------------------------------------------+
|
||||
| ``during`` | Always "restore" |
|
||||
+----------------------+-------------------------------------------+
|
||||
| ``item`` | Usually, the path of the problematic file |
|
||||
+----------------------+-------------------------------------------+
|
||||
|
||||
Verbose Status
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ func (b *JSONProgress) Update(total, processed Counter, errors uint, currentFile
|
|||
func (b *JSONProgress) ScannerError(item string, err error) error {
|
||||
b.error(errorUpdate{
|
||||
MessageType: "error",
|
||||
Error: err.Error(),
|
||||
Error: errorObject{err.Error()},
|
||||
During: "scan",
|
||||
Item: item,
|
||||
})
|
||||
|
@ -78,7 +78,7 @@ func (b *JSONProgress) ScannerError(item string, err error) error {
|
|||
func (b *JSONProgress) Error(item string, err error) error {
|
||||
b.error(errorUpdate{
|
||||
MessageType: "error",
|
||||
Error: err.Error(),
|
||||
Error: errorObject{err.Error()},
|
||||
During: "archival",
|
||||
Item: item,
|
||||
})
|
||||
|
@ -205,11 +205,15 @@ type statusUpdate struct {
|
|||
CurrentFiles []string `json:"current_files,omitempty"`
|
||||
}
|
||||
|
||||
type errorObject struct {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
type errorUpdate struct {
|
||||
MessageType string `json:"message_type"` // "error"
|
||||
Error string `json:"error"`
|
||||
During string `json:"during"`
|
||||
Item string `json:"item"`
|
||||
MessageType string `json:"message_type"` // "error"
|
||||
Error errorObject `json:"error"`
|
||||
During string `json:"during"`
|
||||
Item string `json:"item"`
|
||||
}
|
||||
|
||||
type verboseUpdate struct {
|
||||
|
|
|
@ -17,11 +17,11 @@ func createJSONProgress() (*ui.MockTerminal, ProgressPrinter) {
|
|||
func TestJSONError(t *testing.T) {
|
||||
term, printer := createJSONProgress()
|
||||
test.Equals(t, printer.Error("/path", errors.New("error \"message\"")), nil)
|
||||
test.Equals(t, []string{"{\"message_type\":\"error\",\"error\":\"error \\\"message\\\"\",\"during\":\"archival\",\"item\":\"/path\"}\n"}, term.Errors)
|
||||
test.Equals(t, []string{"{\"message_type\":\"error\",\"error\":{\"message\":\"error \\\"message\\\"\"},\"during\":\"archival\",\"item\":\"/path\"}\n"}, term.Errors)
|
||||
}
|
||||
|
||||
func TestJSONScannerError(t *testing.T) {
|
||||
term, printer := createJSONProgress()
|
||||
test.Equals(t, printer.ScannerError("/path", errors.New("error \"message\"")), nil)
|
||||
test.Equals(t, []string{"{\"message_type\":\"error\",\"error\":\"error \\\"message\\\"\",\"during\":\"scan\",\"item\":\"/path\"}\n"}, term.Errors)
|
||||
test.Equals(t, []string{"{\"message_type\":\"error\",\"error\":{\"message\":\"error \\\"message\\\"\"},\"during\":\"scan\",\"item\":\"/path\"}\n"}, term.Errors)
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@ func (t *jsonPrinter) Update(p State, duration time.Duration) {
|
|||
func (t *jsonPrinter) Error(item string, err error) error {
|
||||
t.error(errorUpdate{
|
||||
MessageType: "error",
|
||||
Error: err.Error(),
|
||||
Error: errorObject{err.Error()},
|
||||
During: "restore",
|
||||
Item: item,
|
||||
})
|
||||
|
@ -113,11 +113,15 @@ type statusUpdate struct {
|
|||
BytesSkipped uint64 `json:"bytes_skipped,omitempty"`
|
||||
}
|
||||
|
||||
type errorObject struct {
|
||||
Message string `json:"message"`
|
||||
}
|
||||
|
||||
type errorUpdate struct {
|
||||
MessageType string `json:"message_type"` // "error"
|
||||
Error string `json:"error"`
|
||||
During string `json:"during"`
|
||||
Item string `json:"item"`
|
||||
MessageType string `json:"message_type"` // "error"
|
||||
Error errorObject `json:"error"`
|
||||
During string `json:"during"`
|
||||
Item string `json:"item"`
|
||||
}
|
||||
|
||||
type verboseUpdate struct {
|
||||
|
|
|
@ -66,5 +66,5 @@ func TestJSONPrintCompleteItem(t *testing.T) {
|
|||
func TestJSONError(t *testing.T) {
|
||||
term, printer := createJSONProgress()
|
||||
test.Equals(t, printer.Error("/path", errors.New("error \"message\"")), nil)
|
||||
test.Equals(t, []string{"{\"message_type\":\"error\",\"error\":\"error \\\"message\\\"\",\"during\":\"restore\",\"item\":\"/path\"}\n"}, term.Errors)
|
||||
test.Equals(t, []string{"{\"message_type\":\"error\",\"error\":{\"message\":\"error \\\"message\\\"\"},\"during\":\"restore\",\"item\":\"/path\"}\n"}, term.Errors)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue