diff --git a/.github/workflows/staging-backend.yml b/.github/workflows/staging-backend.yml
index 894e3d89..73cbb1ee 100644
--- a/.github/workflows/staging-backend.yml
+++ b/.github/workflows/staging-backend.yml
@@ -3,7 +3,7 @@ name: Release staging backend
on:
push:
branches:
- - main
+ - trunk
paths:
- 'backend/**'
- '.github/workflows/staging-backend.yml'
@@ -29,3 +29,19 @@ jobs:
tags: toska/back-grappa2:staging
build-args: |
GIT_SHA=${{ github.sha }}
+ sentry-release:
+ runs-on: ubuntu-latest
+ needs: build
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Create Sentry release
+ uses: getsentry/action-release@v1
+ env:
+ SENTRY_URL: https://sentry.cs.helsinki.fi
+ SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
+ SENTRY_ORG: toska
+ SENTRY_PROJECT: grappa
+ with:
+ environment: staging
+ set_commits: 'skip'
diff --git a/.github/workflows/staging-frontend.yml b/.github/workflows/staging-frontend.yml
index e9885e24..c5225547 100644
--- a/.github/workflows/staging-frontend.yml
+++ b/.github/workflows/staging-frontend.yml
@@ -3,7 +3,7 @@ name: Release staging frontend
on:
push:
branches:
- - main
+ - trunk
paths:
- 'frontend/**'
- '.github/workflows/staging-frontend.yml'
@@ -29,5 +29,32 @@ jobs:
push: true
tags: toska/front-grappa2:staging
build-args: |
+ NODE_ENV=staging
BASE_PATH=/staging/
GIT_SHA=${{ github.sha }}
+
+ sentry-release:
+ runs-on: ubuntu-latest
+ needs: build
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Pull image and create a container
+ run: docker create --name front-grappa2 toska/front-grappa2:staging
+
+ - name: Copy assets from the container
+ run: docker cp front-grappa2:/usr/src/app/build ./build
+
+ - name: Create Sentry release
+ uses: getsentry/action-release@v1
+ env:
+ SENTRY_URL: https://sentry.cs.helsinki.fi
+ SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
+ SENTRY_ORG: toska
+ SENTRY_PROJECT: grappa
+ with:
+ environment: staging
+ set_commits: 'skip'
+ sourcemaps: './build/static/js'
+ url_prefix: '~/staging/static/js'
diff --git a/backend/index.js b/backend/index.js
index 8d32ee52..0f6a1d45 100644
--- a/backend/index.js
+++ b/backend/index.js
@@ -2,18 +2,24 @@ require('dotenv').config()
require('babel-core/register')
require('babel-polyfill')
const express = require('express')
-const Raven = require('raven')
+const Sentry = require('@sentry/node')
const cors = require('cors')
const gracefulExit = require('express-graceful-exit')
const logger = require('./src/util/logger')
const routes = require('./src/routes.js')
const errorHandler = require('./src/util/errorHandler')
+const initializeSentry = require('./src/util/sentry')
const app = express()
+
+initializeSentry(app)
+
+app.use(Sentry.Handlers.requestHandler())
+app.use(Sentry.Handlers.tracingHandler())
+
const server = require('http').createServer(app)
-Raven.config(process.env.SENTRY_ADDR).install()
app.listen(3100, () => {
logger.info('Grappa app listening on port 3100!')
diff --git a/backend/package-lock.json b/backend/package-lock.json
index 20b55df5..33978306 100644
--- a/backend/package-lock.json
+++ b/backend/package-lock.json
@@ -126,6 +126,87 @@
}
}
},
+ "@sentry/core": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.4.1.tgz",
+ "integrity": "sha512-Lx13oTiP+Tjvm5VxulcCszNVd2S1wY4viSnr+ygq62ySVERR+t7uOZDSARZ0rZ259GwW6nkbMh9dDmD0d6VCGQ==",
+ "requires": {
+ "@sentry/hub": "6.4.1",
+ "@sentry/minimal": "6.4.1",
+ "@sentry/types": "6.4.1",
+ "@sentry/utils": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/hub": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.4.1.tgz",
+ "integrity": "sha512-7IZRP5buDE6s/c3vWzzPR/ySE+8GUuHPgTEPiDCPOCWwUN11zXDafJDKkJqY3muJfebUKmC/JG67RyBx+XlnlQ==",
+ "requires": {
+ "@sentry/types": "6.4.1",
+ "@sentry/utils": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/minimal": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.4.1.tgz",
+ "integrity": "sha512-4x/PRbDZACCKJqjta9EkhiIMyGMf7VgBX13EEWEDVWLP7ymFukBuTr4ap/Tz9429kB/yXZuDGGMIZp/G618H3g==",
+ "requires": {
+ "@sentry/hub": "6.4.1",
+ "@sentry/types": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/node": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.4.1.tgz",
+ "integrity": "sha512-w4IFRA7UFZxKL9xVXmQU8eAjVMY/sr0fJcTV8Wma4uZqa1FQVX4p6xgfylLrcaA8VsolE3l9LRrP1XYxCVwvOw==",
+ "requires": {
+ "@sentry/core": "6.4.1",
+ "@sentry/hub": "6.4.1",
+ "@sentry/tracing": "6.4.1",
+ "@sentry/types": "6.4.1",
+ "@sentry/utils": "6.4.1",
+ "cookie": "^0.4.1",
+ "https-proxy-agent": "^5.0.0",
+ "lru_map": "^0.3.3",
+ "tslib": "^1.9.3"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
+ }
+ }
+ },
+ "@sentry/tracing": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.4.1.tgz",
+ "integrity": "sha512-EPRadE9n/wpUjx4jqP/8vXdOAZBk7vjlzRKniJgKgQUO3v03i0ui6xydaal2mvhplIyOCI2muXdGhjUO7ga4uw==",
+ "requires": {
+ "@sentry/hub": "6.4.1",
+ "@sentry/minimal": "6.4.1",
+ "@sentry/types": "6.4.1",
+ "@sentry/utils": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/types": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.4.1.tgz",
+ "integrity": "sha512-sTu/GaLsLYk1AkAqpkMT4+4q665LtZjhV0hkgiTD4N3zPl5uSf1pCIzxPRYjOpe7NEANmWv8U4PaGKGtc2eMfA=="
+ },
+ "@sentry/utils": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.4.1.tgz",
+ "integrity": "sha512-xJ1uVa5fvg23pXQfulvCIBb9pQ3p1awyd1PapK2AYi+wKjTuYl4B9edmhjRREEQEExznl/d2OVm78fRXLq7M9Q==",
+ "requires": {
+ "@sentry/types": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
"@sinonjs/commons": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.2.tgz",
@@ -213,6 +294,29 @@
"resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz",
"integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ=="
},
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "requires": {
+ "debug": "4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
"ajv": {
"version": "6.12.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz",
@@ -1977,11 +2081,6 @@
"integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
"dev": true
},
- "charenc": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
- "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc="
- },
"checkit": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/checkit/-/checkit-0.7.0.tgz",
@@ -2435,11 +2534,6 @@
"which": "^1.2.9"
}
},
- "crypt": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
- "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
- },
"crypto-random-string": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
@@ -4830,6 +4924,30 @@
"sshpk": "^1.7.0"
}
},
+ "https-proxy-agent": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
"hullabaloo-config-manager": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/hullabaloo-config-manager/-/hullabaloo-config-manager-1.1.1.tgz",
@@ -6023,6 +6141,11 @@
"yallist": "^2.1.2"
}
},
+ "lru_map": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
+ "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0="
+ },
"magic-string": {
"version": "0.25.1",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz",
@@ -6103,16 +6226,6 @@
"integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
"dev": true
},
- "md5": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz",
- "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=",
- "requires": {
- "charenc": "~0.0.1",
- "crypt": "~0.0.1",
- "is-buffer": "~1.1.1"
- }
- },
"md5-hex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-2.0.0.tgz",
@@ -7440,30 +7553,6 @@
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
},
- "raven": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/raven/-/raven-2.6.4.tgz",
- "integrity": "sha512-6PQdfC4+DQSFncowthLf+B6Hr0JpPsFBgTVYTAOq7tCmx/kR4SXbeawtPch20+3QfUcQDoJBLjWW1ybvZ4kXTw==",
- "requires": {
- "cookie": "0.3.1",
- "md5": "^2.2.1",
- "stack-trace": "0.0.10",
- "timed-out": "4.0.1",
- "uuid": "3.3.2"
- },
- "dependencies": {
- "cookie": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
- "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
- },
- "uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
- }
- }
- },
"raw-body": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
@@ -9040,7 +9129,8 @@
"timed-out": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
- "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8="
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
},
"tiny-inflate": {
"version": "1.0.3",
@@ -9144,6 +9234,11 @@
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
"integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
},
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ },
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
diff --git a/backend/package.json b/backend/package.json
index c0097f81..daaa22da 100755
--- a/backend/package.json
+++ b/backend/package.json
@@ -26,6 +26,7 @@
},
"homepage": "https://github.com/UniversityOfHelsinkiCS/back-grappa2#readme",
"dependencies": {
+ "@sentry/node": "^6.4.1",
"axios": "^0.19.2",
"babel-core": "^6.26.3",
"babel-polyfill": "^6.26.0",
@@ -50,7 +51,6 @@
"nodemailer": "^4.6.8",
"pdfkit": "^0.8.3",
"pg": "^7.6.1",
- "raven": "^2.6.4",
"request": "^2.88.0",
"utf8": "^3.0.0",
"uuid": "^3.3.2",
diff --git a/backend/src/routes.js b/backend/src/routes.js
index 0cd24a51..3d42047b 100644
--- a/backend/src/routes.js
+++ b/backend/src/routes.js
@@ -36,6 +36,9 @@ const accessLogger = morgan((tokens, req, res) => {
})
module.exports = (app) => {
+ app.use('/sandbox', (req, res) => { //eslint-disable-line
+ throw new Error('Grappa ei toimi :eitoimi:')
+ })
app.use(auditLogger)
app.use(login)
app.use(auth.checkAuth, accessLogger)
diff --git a/backend/src/util/sentry.js b/backend/src/util/sentry.js
new file mode 100644
index 00000000..e9a4c464
--- /dev/null
+++ b/backend/src/util/sentry.js
@@ -0,0 +1,23 @@
+const Sentry = require('@sentry/node')
+const Tracing = require('@sentry/tracing') // eslint-disable-line
+
+const { GIT_SHA, NODE_ENV } = process.env
+const IN_PRODUCTION = NODE_ENV === 'development' || NODE_ENV === 'staging'
+
+
+const initializeSentry = (app) => {
+ if (!IN_PRODUCTION) return
+
+ Sentry.init({
+ dsn: 'https://937cdbbab78348eaa445788e08bdba9c@sentry.cs.helsinki.fi/8',
+ release: GIT_SHA,
+ integrations: [
+ new Sentry.Integrations.Http({ tracing: true }),
+ new Tracing.Integrations.Express({ app })
+ ],
+ environment: NODE_ENV,
+ tracesSampleRate: 1.0
+ })
+}
+
+module.exports = initializeSentry
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 40a7d6e7..3615b5a7 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -226,6 +226,98 @@
}
}
},
+ "@sentry/browser": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.4.1.tgz",
+ "integrity": "sha512-3cDud6GWutnJqcnheIq0lPNTsUJbrRLevQ+g1YfawVXFUxfmmY2bOsGd/Mxq17LxYeBHgKTitXv3DU1bsQ+WBQ==",
+ "requires": {
+ "@sentry/core": "6.4.1",
+ "@sentry/types": "6.4.1",
+ "@sentry/utils": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/core": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.4.1.tgz",
+ "integrity": "sha512-Lx13oTiP+Tjvm5VxulcCszNVd2S1wY4viSnr+ygq62ySVERR+t7uOZDSARZ0rZ259GwW6nkbMh9dDmD0d6VCGQ==",
+ "requires": {
+ "@sentry/hub": "6.4.1",
+ "@sentry/minimal": "6.4.1",
+ "@sentry/types": "6.4.1",
+ "@sentry/utils": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/hub": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.4.1.tgz",
+ "integrity": "sha512-7IZRP5buDE6s/c3vWzzPR/ySE+8GUuHPgTEPiDCPOCWwUN11zXDafJDKkJqY3muJfebUKmC/JG67RyBx+XlnlQ==",
+ "requires": {
+ "@sentry/types": "6.4.1",
+ "@sentry/utils": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/minimal": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.4.1.tgz",
+ "integrity": "sha512-4x/PRbDZACCKJqjta9EkhiIMyGMf7VgBX13EEWEDVWLP7ymFukBuTr4ap/Tz9429kB/yXZuDGGMIZp/G618H3g==",
+ "requires": {
+ "@sentry/hub": "6.4.1",
+ "@sentry/types": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/react": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/react/-/react-6.4.1.tgz",
+ "integrity": "sha512-/rbp9jFgFc+m3DWhI58uKSLQxXtIW5bKqu5eVO/9jedhLzGRGBp0eOlJ5qtZ3KtYKSyPbA4uEBY5qI0rGwipeA==",
+ "requires": {
+ "@sentry/browser": "6.4.1",
+ "@sentry/minimal": "6.4.1",
+ "@sentry/types": "6.4.1",
+ "@sentry/utils": "6.4.1",
+ "hoist-non-react-statics": "^3.3.2",
+ "tslib": "^1.9.3"
+ },
+ "dependencies": {
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ }
+ }
+ }
+ },
+ "@sentry/tracing": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.4.1.tgz",
+ "integrity": "sha512-EPRadE9n/wpUjx4jqP/8vXdOAZBk7vjlzRKniJgKgQUO3v03i0ui6xydaal2mvhplIyOCI2muXdGhjUO7ga4uw==",
+ "requires": {
+ "@sentry/hub": "6.4.1",
+ "@sentry/minimal": "6.4.1",
+ "@sentry/types": "6.4.1",
+ "@sentry/utils": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
+ "@sentry/types": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.4.1.tgz",
+ "integrity": "sha512-sTu/GaLsLYk1AkAqpkMT4+4q665LtZjhV0hkgiTD4N3zPl5uSf1pCIzxPRYjOpe7NEANmWv8U4PaGKGtc2eMfA=="
+ },
+ "@sentry/utils": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.4.1.tgz",
+ "integrity": "sha512-xJ1uVa5fvg23pXQfulvCIBb9pQ3p1awyd1PapK2AYi+wKjTuYl4B9edmhjRREEQEExznl/d2OVm78fRXLq7M9Q==",
+ "requires": {
+ "@sentry/types": "6.4.1",
+ "tslib": "^1.9.3"
+ }
+ },
"@types/node": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-9.3.0.tgz",
@@ -15946,6 +16038,11 @@
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
},
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ },
"tty-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
diff --git a/frontend/package.json b/frontend/package.json
index 01f840e1..90f4c887 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -13,6 +13,8 @@
"lint": "eslint --ext .js src || true"
},
"dependencies": {
+ "@sentry/react": "^6.4.1",
+ "@sentry/tracing": "^6.4.1",
"autoprefixer": "7.2.5",
"axios": "^0.17.1",
"babel-core": "6.26.0",
diff --git a/frontend/public/index.html b/frontend/public/index.html
index 34d3d51b..c2bc4994 100644
--- a/frontend/public/index.html
+++ b/frontend/public/index.html
@@ -4,7 +4,6 @@
-