Readarr/frontend/src/Store/Middleware/createSentryMiddleware.js
ta264 d5c69d0375
Set sentry environment to be develop/nightly based on config file (#703)
* Set sentry environment to be develop/nightly based on config file

Also add details on sqlite version and database migration.  The
separate ReconfigureSentry class is required because
ReconfigureLogging happens before the database has been resolved, so
you can't access IMainDatabase there

* Set environment to develop/nightly in frontend too
2019-03-28 09:26:39 +00:00

91 lines
1.9 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: branch,
release,
sendDefaultPii: true,
beforeSend: cleanseData
});
sentry.configureScope((scope) => {
scope.setTag('version', version);
scope.setTag('production', isProduction);
});
return createMiddleware();
}