Skip to content
This repository has been archived by the owner on Feb 22, 2023. It is now read-only.

Capturing Issue Description in Sentry #1707

Merged
merged 16 commits into from
Sep 1, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 41 additions & 11 deletions src/stores/media/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,10 @@ export const useMediaStore = defineStore('media', {
}
},

//Handles errors for media fetches and sets the fetch state accordingly
//Reported errors are logged to Sentry
//TODO: Handle errors for media fetches

ramadanomar marked this conversation as resolved.
Show resolved Hide resolved
async handleMediaError({
mediaType,
error,
Expand All @@ -378,21 +382,47 @@ export const useMediaStore = defineStore('media', {
}) {
let errorMessage
if (axios.isAxiosError(error)) {
errorMessage =
error.response?.status === 500
? 'There was a problem with our servers'
: `Request failed with status ${
error.response?.status ?? 'unknown'
}`
// If the error is an axios error:
// If the error has a response property, and recieved a response that is not in the 2xx range,
// then the error is logged to Sentry
if (error.response && error.response.status >= 300) {
ramadanomar marked this conversation as resolved.
Show resolved Hide resolved
errorMessage = `Error fetching ${mediaType} from API. Request failed with status code: ${error.response.status}`
this.$nuxt.$sentry.captureEvent({
message: errorMessage,
extra: {
error,
},
})
} else if (!error.response && error.request) {
ramadanomar marked this conversation as resolved.
Show resolved Hide resolved
// If the error has a request property, but no response, then we capture the event in Sentry
errorMessage = `Error fetching ${mediaType} from API. No response received from the server`
this.$nuxt.$sentry.captureEvent({
message: errorMessage,
extra: {
error,
},
})
} else {
ramadanomar marked this conversation as resolved.
Show resolved Hide resolved
// Something happened in setting up the request that triggered an Error
errorMessage = `Error fetching ${mediaType} from API. Unknown Axios error`
this.$nuxt.$sentry.captureEvent({
message: errorMessage,
extra: {
error,
},
})
obulat marked this conversation as resolved.
Show resolved Hide resolved
ramadanomar marked this conversation as resolved.
Show resolved Hide resolved
}
} else {
/*Capture the error and all of its details using $sentry */
// If the error is not an axios error, then we capture the event in Sentry
errorMessage = `Error fetching ${mediaType} from API. Unknown error`
this.$nuxt.$sentry.captureEvent({
message: `Error fetching ${mediaType}`,
extra: { error },
message: errorMessage,
extra: {
error,
},
})
errorMessage =
error instanceof Error ? error.message : 'Oops! Something went wrong'
}

ramadanomar marked this conversation as resolved.
Show resolved Hide resolved
this._updateFetchState(mediaType, 'end', errorMessage)
if (!axios.isAxiosError(error)) {
throw new Error(errorMessage)
Expand Down
6 changes: 3 additions & 3 deletions test/unit/specs/stores/media-store.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,7 @@ describe('Media Store', () => {
const mediaStore = useMediaStore()
mediaStore.handleMediaError({ mediaType, error })
expect(mediaStore.mediaFetchState[mediaType].fetchingError).toEqual(
'There was a problem with our servers'
'Error fetching audio from API. Request failed with status code: 500'
)
})

Expand All @@ -382,14 +382,14 @@ describe('Media Store', () => {
const mediaStore = useMediaStore()
mediaStore.handleMediaError({ mediaType, error })
expect(mediaStore.mediaFetchState[mediaType].fetchingError).toEqual(
'Request failed with status 403'
'Error fetching audio from API. Request failed with status code: 403'
)
})

it('handleMediaError throws a new error on error when server did not respond', async () => {
const mediaStore = useMediaStore()

const error = new Error('Server did not respond')
const error = new Error('Error fetching audio from API. Unknown error')
await expect(
mediaStore.handleMediaError({ mediaType: AUDIO, error })
).rejects.toThrow(error.message)
Expand Down