Add panic recovery, switch some fatal raises to panic

I don't know what I am doing really
This commit is contained in:
2024-02-16 17:28:32 -06:00
parent 595228df15
commit 069b77aebe
4 changed files with 26 additions and 15 deletions

12
api.go
View File

@@ -100,19 +100,19 @@ func SelectTerm(term string) {
res, err := DoRequest(req)
if err != nil {
log.Fatal().Stack().Err(err).Msg("Failed to select term")
log.Panic().Stack().Err(err).Msg("Failed to select term")
}
// Assert that the response is JSON
if !ContentTypeMatch(res, "application/json") {
log.Fatal().Stack().Str("content-type", res.Header.Get("Content-Type")).Msg("Response was not JSON")
log.Panic().Stack().Str("content-type", res.Header.Get("Content-Type")).Msg("Response was not JSON")
}
// Acquire fwdUrl
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
log.Fatal().Stack().Err(err).Msg("Failed to read response body")
log.Panic().Stack().Err(err).Msg("Failed to read response body")
}
var redirectResponse struct {
@@ -124,12 +124,12 @@ func SelectTerm(term string) {
req = BuildRequest("GET", redirectResponse.FwdUrl, nil)
res, err = DoRequest(req)
if err != nil {
log.Fatal().Stack().Err(err).Msg("Redirect request failed")
log.Panic().Stack().Err(err).Msg("Redirect request failed")
}
// Assert that the response is OK (200)
if res.StatusCode != 200 {
log.Fatal().Stack().Int("status", res.StatusCode).Msg("Unexpected status code from redirect request")
log.Panic().Stack().Int("status", res.StatusCode).Msg("Unexpected status code from redirect request")
}
}
@@ -157,7 +157,7 @@ func GetPartOfTerms(search string, term int, offset int, max int) ([]BannerTerm,
// Assert that the response is JSON
if !ContentTypeMatch(res, "application/json") {
log.Fatal().Stack().Str("content-type", res.Header.Get("Content-Type")).Msg("Response was not JSON")
log.Panic().Stack().Str("content-type", res.Header.Get("Content-Type")).Msg("Response was not JSON")
}
defer res.Body.Close()

View File

@@ -138,10 +138,8 @@ func SearchCommandHandler(session *discordgo.Session, interaction *discordgo.Int
if err != nil {
return errors.Wrap(err, "error parsing implied course code (high)")
}
}
// 4 digit code
if len(valueRaw) == 4 {
} else if len(valueRaw) == 4 {
// 4 digit code
low, err = strconv.Atoi(valueRaw)
if err != nil {
return errors.Wrap(err, "error parsing course code")

13
main.go
View File

@@ -223,6 +223,19 @@ func main() {
// Log command invocation
event.Msg("Command Invoked")
// Prepare to recover
defer func() {
if err := recover(); err != nil {
log.Error().Stack().Str("commandName", name).Interface("detail", err).Msg("Command Handler Panic")
// Respond with error
err := RespondError(internalSession, interaction.Interaction, "Unexpected Error: command handler panic", nil)
if err != nil {
log.Error().Stack().Str("commandName", name).Err(err).Msg("Failed to respond with panic error feedback")
}
}
}()
// Call handler
err := handler(internalSession, interaction)

View File

@@ -177,7 +177,7 @@ const layout = "01/02/2006"
func (m *MeetingTimeResponse) StartDay() time.Time {
t, err := time.Parse(layout, m.MeetingTime.StartDate)
if err != nil {
log.Fatal().Stack().Err(err).Str("raw", m.MeetingTime.StartDate).Msg("Cannot parse start date")
log.Panic().Stack().Err(err).Str("raw", m.MeetingTime.StartDate).Msg("Cannot parse start date")
}
return t
}
@@ -187,7 +187,7 @@ func (m *MeetingTimeResponse) StartDay() time.Time {
func (m *MeetingTimeResponse) EndDay() time.Time {
t, err := time.Parse(layout, m.MeetingTime.EndDate)
if err != nil {
log.Fatal().Stack().Err(err).Str("raw", m.MeetingTime.EndDate).Msg("Cannot parse end date")
log.Panic().Stack().Err(err).Str("raw", m.MeetingTime.EndDate).Msg("Cannot parse end date")
}
return t
}
@@ -197,12 +197,12 @@ func (m *MeetingTimeResponse) EndDay() time.Time {
func (m *MeetingTimeResponse) StartTime() *NaiveTime {
raw := m.MeetingTime.BeginTime
if raw == "" {
log.Fatal().Stack().Msg("Start time is empty")
log.Panic().Stack().Msg("Start time is empty")
}
value, err := strconv.ParseUint(raw, 10, 32)
if err != nil {
log.Fatal().Stack().Err(err).Str("raw", raw).Msg("Cannot parse start time integer")
log.Panic().Stack().Err(err).Str("raw", raw).Msg("Cannot parse start time integer")
}
return ParseNaiveTime(value)
@@ -218,7 +218,7 @@ func (m *MeetingTimeResponse) EndTime() *NaiveTime {
value, err := strconv.ParseUint(raw, 10, 32)
if err != nil {
log.Fatal().Stack().Err(err).Str("raw", raw).Msg("Cannot parse end time integer")
log.Panic().Stack().Err(err).Str("raw", raw).Msg("Cannot parse end time integer")
}
return ParseNaiveTime(value)