output stack in errors
This commit is contained in:
135
handler.go
135
handler.go
@@ -25,10 +25,7 @@ func (api *API) collectionGetOneHandler(m mgocrud.ModelInterface) gin.HandlerFun
|
|||||||
if selectorStr != "" {
|
if selectorStr != "" {
|
||||||
err := bson.UnmarshalJSON([]byte(selectorStr), &selector)
|
err := bson.UnmarshalJSON([]byte(selectorStr), &selector)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, errorObject(err))
|
||||||
"error": "select: " + err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -38,10 +35,7 @@ func (api *API) collectionGetOneHandler(m mgocrud.ModelInterface) gin.HandlerFun
|
|||||||
DB: db,
|
DB: db,
|
||||||
}, m, selector)
|
}, m, selector)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": "select: " + err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,10 +45,7 @@ func (api *API) collectionGetOneHandler(m mgocrud.ModelInterface) gin.HandlerFun
|
|||||||
if err == mgo.ErrNotFound {
|
if err == mgo.ErrNotFound {
|
||||||
status = 404
|
status = 404
|
||||||
}
|
}
|
||||||
c.JSON(status, gin.H{
|
c.JSON(status, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,10 +55,7 @@ func (api *API) collectionGetOneHandler(m mgocrud.ModelInterface) gin.HandlerFun
|
|||||||
DB: db,
|
DB: db,
|
||||||
}, m, newM)
|
}, m, newM)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,10 +89,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
if filterStr != "" {
|
if filterStr != "" {
|
||||||
err := bson.UnmarshalJSON([]byte(filterStr), &filter)
|
err := bson.UnmarshalJSON([]byte(filterStr), &filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, errorObject(err))
|
||||||
"error": "filter: " + err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -114,10 +99,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
DB: db,
|
DB: db,
|
||||||
}, m, filter)
|
}, m, filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": "filter: " + err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,10 +114,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
if selectorStr != "" {
|
if selectorStr != "" {
|
||||||
err := bson.UnmarshalJSON([]byte(selectorStr), &selector)
|
err := bson.UnmarshalJSON([]byte(selectorStr), &selector)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, errorObject(err))
|
||||||
"error": "select: " + err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -146,10 +125,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
DB: db,
|
DB: db,
|
||||||
}, m, selector)
|
}, m, selector)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": "select: " + err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,10 +146,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
if queryCount == "1" || strings.ToLower(queryCount) == "true" {
|
if queryCount == "1" || strings.ToLower(queryCount) == "true" {
|
||||||
count, err := mgocrud.ReadCollectionCount(db, m, validFilter)
|
count, err := mgocrud.ReadCollectionCount(db, m, validFilter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
c.Header("X-Results-Count", strconv.Itoa(count))
|
c.Header("X-Results-Count", strconv.Itoa(count))
|
||||||
@@ -199,10 +172,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
|
|
||||||
err = mgocrud.ReadCollection(db, results, validFilter, validSelect, offset, limit, clearedSort, pipelineModFunc)
|
err = mgocrud.ReadCollection(db, results, validFilter, validSelect, offset, limit, clearedSort, pipelineModFunc)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,10 +182,7 @@ func (api *API) collectionGetHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
DB: db,
|
DB: db,
|
||||||
}, m, results)
|
}, m, results)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -235,10 +202,7 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc
|
|||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
newM := newModelOf(m).(mgocrud.ModelInterface)
|
newM := newModelOf(m).(mgocrud.ModelInterface)
|
||||||
if err := c.Bind(newM); err != nil {
|
if err := c.Bind(newM); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -251,21 +215,13 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc
|
|||||||
Context: c,
|
Context: c,
|
||||||
DB: db,
|
DB: db,
|
||||||
}, newM, nil); err != nil {
|
}, newM, nil); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
"apiContext": "validateObject",
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err := mgocrud.CreateDocument(db, newM)
|
err := mgocrud.CreateDocument(db, newM)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
"apiContext": "createDocument",
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -273,11 +229,7 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc
|
|||||||
readM.SetID(newM.GetID())
|
readM.SetID(newM.GetID())
|
||||||
err = mgocrud.ReadDocument(db, readM, nil)
|
err = mgocrud.ReadDocument(db, readM, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
"apiContext": "readDocument",
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,11 +238,7 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc
|
|||||||
Context: c,
|
Context: c,
|
||||||
DB: db,
|
DB: db,
|
||||||
}, readM, nil); err != nil {
|
}, readM, nil); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
"apiContext": "savedObject",
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -300,10 +248,7 @@ func (api *API) collectionPostHandler(m mgocrud.ModelInterface) gin.HandlerFunc
|
|||||||
DB: db,
|
DB: db,
|
||||||
}, m, readM)
|
}, m, readM)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -323,20 +268,14 @@ func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
if err == mgo.ErrNotFound {
|
if err == mgo.ErrNotFound {
|
||||||
status = 404
|
status = 404
|
||||||
}
|
}
|
||||||
c.JSON(status, gin.H{
|
c.JSON(status, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
newM := newModelOf(m).(mgocrud.ModelInterface)
|
newM := newModelOf(m).(mgocrud.ModelInterface)
|
||||||
|
|
||||||
if err := c.Bind(newM); err != nil {
|
if err := c.Bind(newM); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -344,7 +283,6 @@ func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
if newM.GetID() != nil {
|
if newM.GetID() != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, gin.H{
|
||||||
"error": "id not allowed in update",
|
"error": "id not allowed in update",
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -417,19 +355,13 @@ func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
Context: c,
|
Context: c,
|
||||||
DB: db,
|
DB: db,
|
||||||
}, orgM, changes); err != nil {
|
}, orgM, changes); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = mgocrud.UpdateDocument(db, orgM, changes)
|
err = mgocrud.UpdateDocument(db, orgM, changes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -437,10 +369,7 @@ func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
// reread from db
|
// reread from db
|
||||||
newM, err = getDocument(c, db, orgM, nil)
|
newM, err = getDocument(c, db, orgM, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -449,10 +378,7 @@ func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
Context: c,
|
Context: c,
|
||||||
DB: db,
|
DB: db,
|
||||||
}, newM, changes); err != nil {
|
}, newM, changes); err != nil {
|
||||||
c.JSON(400, gin.H{
|
c.JSON(400, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -462,10 +388,7 @@ func (api *API) collectionPutHandler(m mgocrud.ModelInterface) gin.HandlerFunc {
|
|||||||
DB: db,
|
DB: db,
|
||||||
}, m, newM)
|
}, m, newM)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -487,19 +410,13 @@ func (api *API) collectionDeleteHandler(m mgocrud.ModelInterface) gin.HandlerFun
|
|||||||
if err == mgo.ErrNotFound {
|
if err == mgo.ErrNotFound {
|
||||||
status = 404
|
status = 404
|
||||||
}
|
}
|
||||||
c.JSON(status, gin.H{
|
c.JSON(status, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = mgocrud.DeleteDocument(db, orgM)
|
err = mgocrud.DeleteDocument(db, orgM)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, gin.H{
|
c.JSON(500, errorObject(err))
|
||||||
"error": err.Error(),
|
|
||||||
"stack": string(debug.Stack()),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c.JSON(200, gin.H{"message": "ok"})
|
c.JSON(200, gin.H{"message": "ok"})
|
||||||
|
|||||||
@@ -12,6 +12,14 @@ import (
|
|||||||
"gopkg.in/mgo.v2/bson"
|
"gopkg.in/mgo.v2/bson"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func errorObject(err error) bson.M {
|
||||||
|
o := bson.M{"error": err.Error()}
|
||||||
|
if e, ok := err.(*mgocrud.ErrorWithStack); ok {
|
||||||
|
o["stack"] = e.Stack()
|
||||||
|
}
|
||||||
|
return o
|
||||||
|
}
|
||||||
|
|
||||||
func modelTypeOf(m interface{}) reflect.Type {
|
func modelTypeOf(m interface{}) reflect.Type {
|
||||||
return reflect.TypeOf(
|
return reflect.TypeOf(
|
||||||
reflect.ValueOf(m).Elem().Interface(),
|
reflect.ValueOf(m).Elem().Interface(),
|
||||||
|
|||||||
Reference in New Issue
Block a user