作者:Bosh-for-Cp
项目:bosh-260
func PerformHandlerWithJSON(rawJSON []byte, handler HandlerFunc, maxResponseLength int, logger boshlog.Logger) ([]byte, Request, error) {
var request Request
err := json.Unmarshal(rawJSON, &request)
if err != nil {
return []byte{}, request, bosherr.WrapError(err, "Unmarshalling JSON payload")
}
request.Payload = rawJSON
logger.Info(mbusHandlerLogTag, "Received request with action %s", request.Method)
logger.DebugWithDetails(mbusHandlerLogTag, "Payload", request.Payload)
response := handler(request)
if response == nil {
logger.Info(mbusHandlerLogTag, "Nil response returned from handler")
return []byte{}, request, nil
}
respJSON, err := marshalResponse(response, maxResponseLength, logger)
if err != nil {
return respJSON, request, err
}
logger.Info(mbusHandlerLogTag, "Responding")
logger.DebugWithDetails(mbusHandlerLogTag, "Payload", respJSON)
return respJSON, request, nil
}
作者:Jane4PK
项目:bos
func BuildErrorWithJSON(msg string, logger boshlog.Logger) ([]byte, error) {
response := NewExceptionResponse(msg)
respJSON, err := json.Marshal(response)
if err != nil {
return respJSON, bosherr.WrapError(err, "Marshalling JSON")
}
logger.Info(mbusHandlerLogTag, "Building error", msg)
return respJSON, nil
}
作者:punalpate
项目:bos
func PerformHandlerWithJSON(rawJSON []byte, handler HandlerFunc, logger boshlog.Logger) (moreJSON []byte, request Request, err error) {
err = json.Unmarshal(rawJSON, &request)
if err != nil {
err = bosherr.WrapError(err, "Unmarshalling JSON payload")
return
}
request.Payload = rawJSON
logger.Info("MBus Handler", "Received request with action %s", request.Method)
logger.DebugWithDetails("MBus Handler", "Payload", request.Payload)
response := handler(request)
if response == nil {
moreJSON = []byte{}
return
}
moreJSON, err = json.Marshal(response)
if err != nil {
err = bosherr.WrapError(err, "Marshalling JSON response")
return
}
logger.Info("MBus Handler", "Responding")
logger.DebugWithDetails("MBus Handler", "Payload", moreJSON)
return
}
作者:Bosh-for-Cp
项目:bosh-260
func marshalResponse(response Response, maxResponseLength int, logger boshlog.Logger) ([]byte, error) {
respJSON, err := json.Marshal(response)
if err != nil {
logger.Error(mbusHandlerLogTag, "Failed to marshal response: %s", err.Error())
return respJSON, bosherr.WrapError(err, "Marshalling JSON response")
}
if maxResponseLength == UnlimitedResponseLength {
return respJSON, nil
}
if len(respJSON) > maxResponseLength {
respJSON, err = json.Marshal(response.Shorten())
if err != nil {
logger.Error(mbusHandlerLogTag, "Failed to marshal response: %s", err.Error())
return respJSON, bosherr.WrapError(err, "Marshalling JSON response")
}
}
if len(respJSON) > maxResponseLength {
respJSON, err = BuildErrorWithJSON(responseMaxLengthErrMsg, logger)
if err != nil {
logger.Error(mbusHandlerLogTag, "Failed to build 'max length exceeded' response: %s", err.Error())
return respJSON, bosherr.WrapError(err, "Building error")
}
}
return respJSON, nil
}