opnform/client/plugins/sentry.js

59 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2024-01-17 18:32:17 +00:00
import * as Sentry from "@sentry/vue";
function getSentryIntegrations() {
// don't load on server
if (!process.client) return [];
const router = useRouter();
const browserTracing = new Sentry.BrowserTracing({
routingInstrumentation: Sentry.vueRouterInstrumentation(router),
});
return [browserTracing];
}
export default defineNuxtPlugin({
name: 'sentry',
parallel: true,
async setup(nuxtApp) {
const vueApp = nuxtApp.vueApp;
const config = useRuntimeConfig();
Sentry.init({
app: vueApp,
dsn: config.public.SENTRY_DSN_PUBLIC ?? null,
integrations: getSentryIntegrations(),
// Set tracesSampleRate to 1.0 to capture 100%
// of transactions for performance monitoring.
// We recommend adjusting this value in production
tracesSampleRate: config.public.SENTRY_TRACES_SAMPLE_RATE,
// Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled
// tracePropagationTargets: ["localhost", /^https:\/\/yourserver\.io\/api/],
// This sets the sample rate. You may want this to be 100% while
// in development and sample at a lower rate in production
replaysSessionSampleRate: config.public.SENTRY_REPLAY_SAMPLE_RATE,
// If the entire session is not sampled, use the below sample rate to sample
// sessions when an error occurs.
replaysOnErrorSampleRate: config.public.SENTRY_ERROR_REPLAY_SAMPLE_RATE,
beforeSend(event) {
2024-01-18 10:37:04 +00:00
if (event.exception.values.length) {
// Don't send validation exceptions to Sentry
if (event.exception.values[0].type === 'FetchError' &&
event.exception.values[0].value.includes('422')
) {
return null
}
}
2024-01-17 18:32:17 +00:00
return event;
},
})
}
});