diff --git a/utils/consts.go b/utils/consts.go
index 1f0a28663..5c90d4683 100644
--- a/utils/consts.go
+++ b/utils/consts.go
@@ -17,41 +17,7 @@ along with this program. If not, see
*/
package utils
-import (
- "errors"
- "fmt"
-)
-
-func NewErrMandatoryIeMissing(fields ...string) error {
- return fmt.Errorf("MANDATORY_IE_MISSING:%v", fields)
-}
-
-func NewErrServerError(err error) error {
- return fmt.Errorf("SERVER_ERROR: %s", err)
-}
-
var (
- ErrNotImplemented = errors.New("NOT_IMPLEMENTED")
- ErrNotFound = errors.New("NOT_FOUND")
- ErrTimedOut = errors.New("TIMED_OUT")
- ErrServerError = errors.New("SERVER_ERROR")
- ErrMaxRecursionDepth = errors.New("MAX_RECURSION_DEPTH")
- ErrMandatoryIeMissing = errors.New("MANDATORY_IE_MISSING")
- ErrExists = errors.New("EXISTS")
- ErrBrokenReference = errors.New("BROKEN_REFERENCE")
- ErrParserError = errors.New("PARSER_ERROR")
- ErrInvalidPath = errors.New("INVALID_PATH")
- ErrInvalidKey = errors.New("INVALID_KEY")
- ErrUnauthorizedDestination = errors.New("UNAUTHORIZED_DESTINATION")
- ErrRatingPlanNotFound = errors.New("RATING_PLAN_NOT_FOUND")
- ErrAccountNotFound = errors.New("ACCOUNT_NOT_FOUND")
- ErrAccountDisabled = errors.New("ACCOUNT_DISABLED")
- ErrUserNotFound = errors.New("USER_NOT_FOUND")
- ErrInsufficientCredit = errors.New("INSUFFICIENT_CREDIT")
- ErrNotConvertible = errors.New("NOT_CONVERTIBLE")
- ErrResourceUnavailable = errors.New("RESOURCE_UNAVAILABLE")
- ErrNoActiveSession = errors.New("NO_ACTIVE_SESSION")
-
CdreCdrFormats = []string{CSV, DRYRUN, CDRE_FIXED_WIDTH}
PrimaryCdrFields = []string{CGRID, CDRSOURCE, CDRHOST, ACCID, TOR, REQTYPE, DIRECTION, TENANT, CATEGORY, ACCOUNT, SUBJECT, DESTINATION, SETUP_TIME, PDD, ANSWER_TIME, USAGE,
SUPPLIER, DISCONNECT_CAUSE, COST, RATED, PartialField, MEDI_RUNID}
diff --git a/utils/errors.go b/utils/errors.go
index 7e90be92c..2e9a215b8 100644
--- a/utils/errors.go
+++ b/utils/errors.go
@@ -17,6 +17,34 @@ along with this program. If not, see
*/
package utils
+import (
+ "errors"
+ "fmt"
+)
+
+var (
+ ErrNotImplemented = errors.New("NOT_IMPLEMENTED")
+ ErrNotFound = errors.New("NOT_FOUND")
+ ErrTimedOut = errors.New("TIMED_OUT")
+ ErrServerError = errors.New("SERVER_ERROR")
+ ErrMaxRecursionDepth = errors.New("MAX_RECURSION_DEPTH")
+ ErrMandatoryIeMissing = errors.New("MANDATORY_IE_MISSING")
+ ErrExists = errors.New("EXISTS")
+ ErrBrokenReference = errors.New("BROKEN_REFERENCE")
+ ErrParserError = errors.New("PARSER_ERROR")
+ ErrInvalidPath = errors.New("INVALID_PATH")
+ ErrInvalidKey = errors.New("INVALID_KEY")
+ ErrUnauthorizedDestination = errors.New("UNAUTHORIZED_DESTINATION")
+ ErrRatingPlanNotFound = errors.New("RATING_PLAN_NOT_FOUND")
+ ErrAccountNotFound = errors.New("ACCOUNT_NOT_FOUND")
+ ErrAccountDisabled = errors.New("ACCOUNT_DISABLED")
+ ErrUserNotFound = errors.New("USER_NOT_FOUND")
+ ErrInsufficientCredit = errors.New("INSUFFICIENT_CREDIT")
+ ErrNotConvertible = errors.New("NOT_CONVERTIBLE")
+ ErrResourceUnavailable = errors.New("RESOURCE_UNAVAILABLE")
+ ErrNoActiveSession = errors.New("NO_ACTIVE_SESSION")
+)
+
// NewCGRError initialises a new CGRError
func NewCGRError(context, apiErr, shortErr, longErr string) *CGRError {
return &CGRError{context: context, apiError: apiErr,
@@ -52,3 +80,25 @@ func (err *CGRError) ActivateShortError() {
func (err *CGRError) ActivateLongError() {
err.errorMessage = err.longError
}
+
+func NewErrMandatoryIeMissing(fields ...string) error {
+ return fmt.Errorf("MANDATORY_IE_MISSING:%v", fields)
+}
+
+func NewErrServerError(err error) error {
+ return fmt.Errorf("SERVER_ERROR: %s", err)
+}
+
+// Centralized returns for APIs
+func APIErrorHandler(err error) error {
+ cgrErr, ok := err.(*CGRError)
+ if !ok {
+ if err == ErrNotFound {
+ return err
+ } else {
+ return NewErrServerError(err)
+ }
+ }
+ cgrErr.ActivateAPIError()
+ return cgrErr
+}
diff --git a/utils/errors_test.go b/utils/errors_test.go
index 9b2247858..7de628e6c 100644
--- a/utils/errors_test.go
+++ b/utils/errors_test.go
@@ -27,6 +27,9 @@ func TestCGRErrorActivate(t *testing.T) {
shortErr := "short error"
longErr := "long error which is good for debug"
err := NewCGRError(ctx, apiErr, shortErr, longErr)
+ if ctxRcv := err.Context(); ctxRcv != ctx {
+ t.Errorf("Context: <%s>", ctxRcv)
+ }
if err.Error() != shortErr {
t.Error(err)
}
@@ -39,3 +42,16 @@ func TestCGRErrorActivate(t *testing.T) {
t.Error(err)
}
}
+
+func TestAPIErrorHandler(t *testing.T) {
+ if err := APIErrorHandler(ErrNotImplemented); err.Error() != NewErrServerError(ErrNotImplemented).Error() {
+ t.Error(err)
+ }
+ if err := APIErrorHandler(ErrNotFound); err.Error() != ErrNotFound.Error() {
+ t.Error(err)
+ }
+ cgrErr := NewCGRError("TEST_CONTEXT", "TEST_API_ERR", "short error", "long error which is good for debug")
+ if err := APIErrorHandler(cgrErr); err.Error() != cgrErr.apiError {
+ t.Error(err)
+ }
+}