func (h handler) ServeHTTP(w http.ResponseWriter, req *http.Request) { start := time.Now() defer req.Body.Close() if req.Method != "POST" { http.NotFound(w, req) return } service := req.Header.Get(ServiceHeader) procedure := req.Header.Get(ProcedureHeader) err := h.callHandler(w, req, start) if err == nil { return } err = errors.AsHandlerError(service, procedure, err) status := http.StatusInternalServerError if transport.IsBadRequestError(err) { status = http.StatusBadRequest } else if transport.IsTimeoutError(err) { status = http.StatusGatewayTimeout } http.Error(w, err.Error(), status) }
func (handlerTimeoutRawHandler) Handle(ctx context.Context, args *raw.Args) (*raw.Res, error) { start := time.Now() err := errors.HandlerTimeoutError("caller", "service", "handlertimeout/raw", time.Now().Sub(start)) err = errors.AsHandlerError("service", "handlertimeout/raw", err) err = tchannel.NewSystemError(tchannel.ErrCodeTimeout, err.Error()) return nil, err }
func (h handler) handle(ctx context.Context, call inboundCall) { start := time.Now() err := h.callHandler(ctx, call, start) if err == nil { return } if _, ok := err.(tchannel.SystemError); ok { call.Response().SendSystemError(err) return } err = errors.AsHandlerError(call.ServiceName(), call.MethodString(), err) status := tchannel.ErrCodeUnexpected if transport.IsBadRequestError(err) { status = tchannel.ErrCodeBadRequest } else if transport.IsTimeoutError(err) { status = tchannel.ErrCodeTimeout } call.Response().SendSystemError(tchannel.NewSystemError(status, err.Error())) }