in pkg/filter/http/remote/call.go [120:161]
func (f *Filter) Decode(c *contexthttp.HttpContext) filter.FilterStatus {
if f.conf.Dpc != nil && f.conf.Dpc.AutoResolve {
if err := f.resolve(c); err != nil {
c.SendLocalReply(http.StatusInternalServerError, []byte(fmt.Sprintf("auto resolve err: %s", err)))
return filter.Stop
}
}
api := c.GetAPI()
if (f.conf.Level == OPEN && api.Mock) || (f.conf.Level == ALL) {
c.SourceResp = &contexthttp.ErrResponse{
Message: "mock success",
}
return filter.Continue
}
typ := api.Method.IntegrationRequest.RequestType
cli, err := f.matchClient(typ)
if err != nil {
panic(err)
}
req := client.NewReq(c.Request.Context(), c.Request, *api)
req.Timeout = c.Timeout
resp, err := cli.Call(req)
if err != nil {
logger.Errorf("[dubbo-go-pixiu] client call err: %v!", err)
if strings.Contains(strings.ToLower(err.Error()), "timeout") {
c.SendLocalReply(http.StatusGatewayTimeout, []byte(fmt.Sprintf("client call timeout err: %s", err)))
return filter.Stop
}
c.SendLocalReply(http.StatusInternalServerError, []byte(fmt.Sprintf("client call err: %s", err)))
return filter.Stop
}
logger.Debugf("[dubbo-go-pixiu] client call resp: %v", resp)
c.SourceResp = resp
return filter.Continue
}