mirror of
https://github.com/hatchet-dev/hatchet.git
synced 2025-12-30 21:29:44 -06:00
85 lines
1.4 KiB
Go
85 lines
1.4 KiB
Go
package webhookutils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"net/http"
|
|
|
|
hatcheterrors "github.com/hatchet-dev/hatchet/pkg/errors"
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
type ErrorOpts struct {
|
|
Code uint
|
|
}
|
|
|
|
func HandleAPIError(
|
|
l *zerolog.Logger,
|
|
alerter hatcheterrors.Alerter,
|
|
w http.ResponseWriter,
|
|
r *http.Request,
|
|
err error,
|
|
writeErr bool,
|
|
) {
|
|
// if the error is of type detailed error, get the code from that
|
|
detailedErr := hatcheterrors.DetailedError{}
|
|
|
|
if ok := errors.As(err, &detailedErr); ok {
|
|
if detailedErr.Code == 0 || detailedErr.Code >= http.StatusInternalServerError {
|
|
handleInternalError(
|
|
l,
|
|
alerter,
|
|
w,
|
|
r,
|
|
detailedErr,
|
|
writeErr,
|
|
)
|
|
|
|
return
|
|
} else {
|
|
w.WriteHeader(int(detailedErr.Code))
|
|
writerErr := json.NewEncoder(w).Encode(detailedErr)
|
|
|
|
if writerErr != nil {
|
|
handleInternalError(
|
|
l,
|
|
alerter,
|
|
w,
|
|
r,
|
|
writerErr,
|
|
false,
|
|
)
|
|
|
|
return
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func handleInternalError(l *zerolog.Logger,
|
|
alerter hatcheterrors.Alerter,
|
|
w http.ResponseWriter,
|
|
r *http.Request,
|
|
err error,
|
|
writeErr bool) {
|
|
event := l.Warn().
|
|
Str("internal_error", err.Error())
|
|
|
|
event.Send()
|
|
|
|
data := make(map[string]interface{})
|
|
|
|
data["method"] = r.Method
|
|
data["url"] = r.URL.String()
|
|
|
|
alerter.SendAlert(r.Context(), err, data)
|
|
|
|
w.WriteHeader(http.StatusInternalServerError)
|
|
return
|
|
}
|