http_helpers.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package errdefs // import "github.com/docker/docker/errdefs"
  2. import (
  3. "net/http"
  4. "github.com/sirupsen/logrus"
  5. )
  6. // FromStatusCode creates an errdef error, based on the provided HTTP status-code
  7. func FromStatusCode(err error, statusCode int) error {
  8. if err == nil {
  9. return err
  10. }
  11. switch statusCode {
  12. case http.StatusNotFound:
  13. err = NotFound(err)
  14. case http.StatusBadRequest:
  15. err = InvalidParameter(err)
  16. case http.StatusConflict:
  17. err = Conflict(err)
  18. case http.StatusUnauthorized:
  19. err = Unauthorized(err)
  20. case http.StatusServiceUnavailable:
  21. err = Unavailable(err)
  22. case http.StatusForbidden:
  23. err = Forbidden(err)
  24. case http.StatusNotModified:
  25. err = NotModified(err)
  26. case http.StatusNotImplemented:
  27. err = NotImplemented(err)
  28. case http.StatusInternalServerError:
  29. if !IsSystem(err) && !IsUnknown(err) && !IsDataLoss(err) && !IsDeadline(err) && !IsCancelled(err) {
  30. err = System(err)
  31. }
  32. default:
  33. logrus.WithError(err).WithFields(logrus.Fields{
  34. "module": "api",
  35. "status_code": statusCode,
  36. }).Debug("FIXME: Got an status-code for which error does not match any expected type!!!")
  37. switch {
  38. case statusCode >= 200 && statusCode < 400:
  39. // it's a client error
  40. case statusCode >= 400 && statusCode < 500:
  41. err = InvalidParameter(err)
  42. case statusCode >= 500 && statusCode < 600:
  43. err = System(err)
  44. default:
  45. err = Unknown(err)
  46. }
  47. }
  48. return err
  49. }