github.com/mongodb/grip@v0.0.0-20240213223901-f906268d82b9/send/error_handler.go (about) 1 package send 2 3 import ( 4 "io" 5 "log" 6 "net/http" 7 8 "github.com/mongodb/grip/message" 9 "github.com/pkg/errors" 10 ) 11 12 // ErrorHandler is a function that you can use define how a sender 13 // handles errors sending messages. Implementations of this type 14 // should perform a noop if the err object is nil. 15 type ErrorHandler func(error, message.Composer) 16 17 func ErrorHandlerFromLogger(l *log.Logger) ErrorHandler { 18 return func(err error, m message.Composer) { 19 if err == nil { 20 return 21 } 22 23 l.Println("logging error:", err.Error(), "\n", m.String()) 24 } 25 } 26 27 // ErrorHandlerFromSender wraps an existing Sender for sending error messages. 28 func ErrorHandlerFromSender(s Sender) ErrorHandler { 29 return func(err error, m message.Composer) { 30 if err == nil { 31 return 32 } 33 34 s.Send(message.WrapError(err, m)) 35 } 36 } 37 38 func handleHTTPResponseError(resp *http.Response) error { 39 if resp == nil { 40 return nil 41 } 42 defer resp.Body.Close() 43 44 if resp.StatusCode >= 200 && resp.StatusCode < 300 { 45 return nil 46 } 47 48 data, err := io.ReadAll(resp.Body) 49 if err != nil { 50 return errors.Wrapf(err, "received HTTP status '%d' but failed to read response body", resp.StatusCode) 51 } 52 return errors.Errorf("received HTTP status '%d' with response '%s'", resp.StatusCode, string(data)) 53 }