Adding Sentry

This commit is contained in:
Jeff Avallone 2019-01-03 21:33:13 -05:00
parent c26bf26bd1
commit 6cff032efb
8 changed files with 146 additions and 5 deletions

View File

@ -8,6 +8,7 @@
"eslint:recommended", "eslint:recommended",
"plugin:react/recommended" "plugin:react/recommended"
], ],
"parser": "babel-eslint",
"parserOptions": { "parserOptions": {
"ecmaFeatures": { "ecmaFeatures": {
"jsx": true "jsx": true

View File

@ -1 +1,8 @@
require('./src/site.css'); import * as Sentry from '@sentry/browser';
import 'site.css';
export const onClientEntry = () => {
Sentry.getCurrentHub().getClient().getOptions().enabled =
(navigator.doNotTrack !== '1' && window.doNotTrack !== '1');
};

View File

@ -19,6 +19,15 @@ module.exports = {
anonymize: true, anonymize: true,
respectDNT: true respectDNT: true
} }
},
{
resolve: 'gatsby-plugin-sentry',
options: {
dsn: process.env.SENTRY_DSN,
environment: process.env.DEPLOY_ENV || process.env.NODE_ENV,
debug: (process.env.NODE_ENV !== 'production'),
release: buildId
}
} }
] ]
}; };

View File

@ -35,6 +35,7 @@
"gatsby-plugin-google-analytics": "^2.0.8", "gatsby-plugin-google-analytics": "^2.0.8",
"gatsby-plugin-postcss": "^2.0.2", "gatsby-plugin-postcss": "^2.0.2",
"gatsby-plugin-react-helmet": "^3.0.5", "gatsby-plugin-react-helmet": "^3.0.5",
"gatsby-plugin-sentry": "^1.0.0",
"postcss-cssnext": "^3.1.0", "postcss-cssnext": "^3.1.0",
"postcss-import": "^12.0.1", "postcss-import": "^12.0.1",
"prop-types": "^15.6.2", "prop-types": "^15.6.2",

View File

@ -2,17 +2,20 @@ import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Helmet } from 'react-helmet'; import { Helmet } from 'react-helmet';
import SentryBoundary from 'components/SentryBoundary';
import Header from 'components/Header'; import Header from 'components/Header';
import Footer from 'components/Footer'; import Footer from 'components/Footer';
const Layout = ({ title, children }) => <React.Fragment> const Layout = ({ title, children }) => <SentryBoundary>
<Helmet> <Helmet>
<title>{ title ? `Regexper - ${ title }` : 'Regexper' }</title> <title>{ title ? `Regexper - ${ title }` : 'Regexper' }</title>
</Helmet> </Helmet>
<Header /> <Header />
<SentryBoundary>
{ children } { children }
</SentryBoundary>
<Footer /> <Footer />
</React.Fragment>; </SentryBoundary>;
Layout.propTypes = { Layout.propTypes = {
title: PropTypes.string, title: PropTypes.string,

View File

@ -0,0 +1,39 @@
import React from 'react';
import PropTypes from 'prop-types';
import * as Sentry from '@sentry/browser';
import SentryError from 'components/SentryError';
class SentryBoundary extends React.Component {
state = {
hasError: false
}
static getDerivedStateFromError() {
return { hasError: true };
}
componentDidCatch(error, errorInfo) {
Sentry.captureException(error, errorInfo);
}
render() {
const { hasError } = this.state;
const { children } = this.props;
if (hasError) {
return <SentryError />;
} else {
return children;
}
}
}
SentryBoundary.propTypes = {
children: PropTypes.oneOfType([
PropTypes.arrayOf(PropTypes.node),
PropTypes.node
]).isRequired
};
export default SentryBoundary;

View File

@ -0,0 +1,22 @@
import React from 'react';
import * as Sentry from '@sentry/browser';
import Message from 'components/Message';
class SentryError extends React.Component {
reportError = event => {
event.preventDefault();
if (Sentry.lastEventId()) {
Sentry.showReportDialog();
}
}
render() {
return <Message type="error" heading="An error has occurred">
<p>This error has been logged. You may also <a href="#error-report" onClick={ this.reportError }>fill out a report</a>.</p>
</Message>;
}
}
export default SentryError;

View File

@ -806,6 +806,58 @@
react-lifecycles-compat "^3.0.4" react-lifecycles-compat "^3.0.4"
warning "^3.0.0" warning "^3.0.0"
"@sentry/browser@latest":
version "4.4.2"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-4.4.2.tgz#8d361778962ef8ab1540e4ebbf64d485903abdf1"
integrity sha512-km5p3hPz+aoY4UiEvYxAdRJAbIK30urZSuMs/3zAUVe+8Zij0IHjHmdi9JtrMqpn+rAcWCxtRmFSYlkiKjdSUg==
dependencies:
"@sentry/core" "4.4.2"
"@sentry/types" "4.4.2"
"@sentry/utils" "4.4.2"
tslib "^1.9.3"
"@sentry/core@4.4.2":
version "4.4.2"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-4.4.2.tgz#562526bc634c087f04bbca68b09cedc4b41cc64d"
integrity sha512-hJyAodTCf4sZfVdf41Rtuzj4EsyzYq5rdMZ+zc2Vinwdf8D0/brHe91fHeO0CKXEb2P0wJsrjwMidG/ccq/M8A==
dependencies:
"@sentry/hub" "4.4.2"
"@sentry/minimal" "4.4.2"
"@sentry/types" "4.4.2"
"@sentry/utils" "4.4.2"
tslib "^1.9.3"
"@sentry/hub@4.4.2":
version "4.4.2"
resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-4.4.2.tgz#1399556fda06fb83c4f186c4aa842725f520159c"
integrity sha512-oe9ytXkTWyD+QmOpVzHAqTbRV4Hc0ee2Nt6HvrDtRmlXzQxfvTWG2F8KYT6w8kzqg5klnuRpnsmgTTV3KuNBVQ==
dependencies:
"@sentry/types" "4.4.2"
"@sentry/utils" "4.4.2"
tslib "^1.9.3"
"@sentry/minimal@4.4.2":
version "4.4.2"
resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-4.4.2.tgz#13fffc6b17a2401b6a79947838a637626ab80b10"
integrity sha512-GEZZiNvVgqFAESZhAe3vjwTInn13lI2bSI3ItQN4RUWKL/W4n/fwVoDJbkb1U8aWxanuMnRDEpKwyQv6zYTZfw==
dependencies:
"@sentry/hub" "4.4.2"
"@sentry/types" "4.4.2"
tslib "^1.9.3"
"@sentry/types@4.4.2":
version "4.4.2"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-4.4.2.tgz#f38dd3bc671cd2f5983a85553aebeac9c2286b17"
integrity sha512-QyQd6PKKIyjJgaq/RQjsxPJEWbXcuiWZ9RvSnhBjS5jj53HEzkM1qkbAFqlYHJ1DTJJ1EuOM4+aTmGzHe93zuA==
"@sentry/utils@4.4.2":
version "4.4.2"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-4.4.2.tgz#e05a47e135ecef29e63a996f59aee8c8f792c222"
integrity sha512-j/Ad8G1abHlJdD2q7aWWbSOSeWB5M5v1R1VKL8YPlwEbSvvmEQWePhBKFI0qlnKd2ObdUQsj86pHEXJRSFNfCw==
dependencies:
"@sentry/types" "4.4.2"
tslib "^1.9.3"
"@types/configstore@^2.1.1": "@types/configstore@^2.1.1":
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/@types/configstore/-/configstore-2.1.1.tgz#cd1e8553633ad3185c3f2f239ecff5d2643e92b6" resolved "https://registry.yarnpkg.com/@types/configstore/-/configstore-2.1.1.tgz#cd1e8553633ad3185c3f2f239ecff5d2643e92b6"
@ -4718,6 +4770,13 @@ gatsby-plugin-react-helmet@^3.0.5:
dependencies: dependencies:
"@babel/runtime" "^7.0.0" "@babel/runtime" "^7.0.0"
gatsby-plugin-sentry@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/gatsby-plugin-sentry/-/gatsby-plugin-sentry-1.0.0.tgz#746307a27f5382a9a787fa86ac812b947f8bebc5"
integrity sha512-6eq9RBpXXL76Ag0jp33NoWofji1jr2dhkfcJBhzAtKlztgRpkiOwm0OXrBspAa0Nu6PEPrJsEWoLAZ96w8Hj9w==
dependencies:
"@sentry/browser" latest
gatsby-react-router-scroll@^2.0.2: gatsby-react-router-scroll@^2.0.2:
version "2.0.2" version "2.0.2"
resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.0.2.tgz#d8046ce2f3bfa52ef6ec55804007d976b0bb6bef" resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-2.0.2.tgz#d8046ce2f3bfa52ef6ec55804007d976b0bb6bef"
@ -9806,7 +9865,7 @@ trim-right@^1.0.1:
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
tslib@^1.6.0, tslib@^1.9.0: tslib@^1.6.0, tslib@^1.9.0, tslib@^1.9.3:
version "1.9.3" version "1.9.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==