mirror of https://github.com/lidarr/Lidarr
92 lines
2.0 KiB
JavaScript
92 lines
2.0 KiB
JavaScript
import _ from 'lodash';
|
|
import * as sentry from '@sentry/browser';
|
|
import parseUrl from 'Utilities/String/parseUrl';
|
|
|
|
function cleanseUrl(url) {
|
|
const properties = parseUrl(url);
|
|
|
|
return `${properties.pathname}${properties.search}`;
|
|
}
|
|
|
|
function cleanseData(data) {
|
|
const result = _.cloneDeep(data);
|
|
|
|
result.transaction = cleanseUrl(result.transaction);
|
|
|
|
if (result.exception) {
|
|
result.exception.values.forEach((exception) => {
|
|
const stacktrace = exception.stacktrace;
|
|
|
|
if (stacktrace) {
|
|
stacktrace.frames.forEach((frame) => {
|
|
frame.filename = cleanseUrl(frame.filename);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
result.request.url = cleanseUrl(result.request.url);
|
|
|
|
return result;
|
|
}
|
|
|
|
function identity(stuff) {
|
|
return stuff;
|
|
}
|
|
|
|
function createMiddleware() {
|
|
return (store) => (next) => (action) => {
|
|
try {
|
|
// Adds a breadcrumb for reporting later (if necessary).
|
|
sentry.addBreadcrumb({
|
|
category: 'redux',
|
|
message: action.type
|
|
});
|
|
|
|
return next(action);
|
|
} catch (err) {
|
|
console.error(`[sentry] Reporting error to Sentry: ${err}`);
|
|
|
|
// Send the report including breadcrumbs.
|
|
sentry.captureException(err, {
|
|
extra: {
|
|
action: identity(action),
|
|
state: identity(store.getState())
|
|
}
|
|
});
|
|
}
|
|
};
|
|
}
|
|
|
|
export default function createSentryMiddleware() {
|
|
const {
|
|
analytics,
|
|
branch,
|
|
version,
|
|
release,
|
|
isProduction
|
|
} = window.Lidarr;
|
|
|
|
if (!analytics) {
|
|
return;
|
|
}
|
|
|
|
const dsn = isProduction ? 'https://c3a5b33e08de4e18b7d0505e942dbc95@sentry.io/216290' :
|
|
'https://baede6f14da54cf48ff431479e400adf@sentry.io/1249427';
|
|
|
|
sentry.init({
|
|
dsn,
|
|
environment: isProduction ? 'production' : 'development',
|
|
release,
|
|
sendDefaultPii: true,
|
|
beforeSend: cleanseData
|
|
});
|
|
|
|
sentry.configureScope((scope) => {
|
|
scope.setTag('branch', branch);
|
|
scope.setTag('version', version);
|
|
});
|
|
|
|
return createMiddleware();
|
|
}
|