Skip to content

Commit ccd7026

Browse files
yankovskyandreyyankovskyandrey
yankovskyandrey
authored and
yankovskyandrey
committed
Initial commit
0 parents  commit ccd7026

File tree

8 files changed

+2416
-0
lines changed

8 files changed

+2416
-0
lines changed

.babelrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"presets": ["@babel/preset-env"]
3+
}

.env.example

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Токен пользователя, все операции sentry-cli выполняются от лица конкретного пользователя
2+
# Токен можно найти или создать здесь http://s.csssr.ru/U02D248T6/2019-04-16-1720-4px40k6h0d.png
3+
export SENTRY_AUTH_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
.idea
2+
node_modules
3+
lib
4+
.env

deploy.sh

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#!/bin/sh
2+
3+
# Читаем файл окружения
4+
. ./.env
5+
6+
# Имя организации
7+
export SENTRY_ORG=csssr
8+
9+
# Документация по релизам https://docs.sentry.io/workflow/releases/?platform=node
10+
# Документация по sentry-cli https://docs.sentry.io/cli/releases/
11+
# Названия переменных окружения используемых в sentry-cli https://docs.sentry.io/cli/configuration/#configuration-values
12+
13+
# Токен пользователя, все операции sentry-cli выполняются от лица конкретного пользователя
14+
# Токен можно найти или создать здесь http://s.csssr.ru/U02D248T6/2019-04-16-1720-4px40k6h0d.png
15+
#
16+
export SENTRY_AUTH_TOKEN=352fc281b25b4ae7a3eb95af0cb49bd36f6401897871424da27e65c9212036d7
17+
18+
# Имя организации
19+
export SENTRY_ORG=csssr
20+
21+
# propose-version возвращает хэш последнего коммита
22+
export SENTRY_RELEASE=$(./node_modules/.bin/sentry-cli releases propose-version)
23+
24+
# Выполняем загрузку sourcemaps асинхронно, потому что сейчас они загружаются последовательно и очень медленно.
25+
# Не блокируем сборку отправкой sourcemaps
26+
# https://github.com/getsentry/sentry-cli/issues/405
27+
upload_sourcemaps() {
28+
# Для этой команды требуется, чтобы project был указан через переменную окружения
29+
# https://github.com/getsentry/sentry-cli/issues/451
30+
SENTRY_PROJECT=sentry-sample ./node_modules/.bin/sentry-cli releases files $SENTRY_RELEASE upload-sourcemaps --url-prefix $(pwd)/lib --rewrite ./lib
31+
32+
# Завершаем создание релиза
33+
yarn sentry-cli releases finalize $SENTRY_RELEASE
34+
35+
# Создаём новый Deploy в Sentry
36+
yarn sentry-cli releases deploys $SENTRY_RELEASE new -e $NODE_ENV
37+
}
38+
39+
# Создаём новый релиз
40+
yarn sentry-cli releases new --project sentry-sample $SENTRY_RELEASE
41+
42+
# Прикрепляем коммиты к новому релизу
43+
yarn sentry-cli releases set-commits --auto $SENTRY_RELEASE
44+
45+
yarn build
46+
47+
upload_sourcemaps &
48+
49+
yarn start

package.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"name": "sentry-playground",
3+
"version": "1.0.0",
4+
"main": "index.js",
5+
"license": "MIT",
6+
"dependencies": {
7+
"@sentry/node": "^5.0.8"
8+
},
9+
"devDependencies": {
10+
"@babel/cli": "^7.4.3",
11+
"@babel/core": "^7.4.3",
12+
"@babel/preset-env": "^7.4.3",
13+
"@sentry/cli": "^1.41.0"
14+
},
15+
"scripts": {
16+
"build": "babel ./src --out-dir ./lib --source-maps",
17+
"start": "node lib/index.js",
18+
"deploy": "NODE_ENV=production ./deploy.sh"
19+
}
20+
}

readme.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## Запуск
2+
3+
Перед запуском проекта надо создать файл .env по примеру .env.example

src/index.js

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
console.log(process.env.NODE_ENV, process.env.SENTRY_RELEASE)
2+
3+
const Sentry = require('@sentry/node')
4+
Sentry.init({
5+
dsn: 'https://[email protected]/1438725',
6+
// Приложение должно быть запущено с правильной версией релиза, чтобы ошибки попадали именно в этот релиз
7+
release: process.env.SENTRY_RELEASE,
8+
// Позволяет обработать сообщения/ошибки перед отправкой
9+
beforeSend(event, hint) {
10+
// console.log('EVENT', event)
11+
// console.log('HINT', event)
12+
return event
13+
},
14+
environment: process.env.NODE_ENV,
15+
// Добавляет стектрейс при отправке сообщений в Sentry
16+
// При ошибках стектрейс всегда отправляется вне зависимости от этого флага
17+
attachStacktrace: true,
18+
})
19+
20+
class SentryExtendedError extends Error {
21+
constructor(extraData, ...params) {
22+
super(...params)
23+
24+
if (Error.captureStackTrace) {
25+
Error.captureStackTrace(this, SentryExtendedError)
26+
}
27+
28+
this.name = new.target.prototype.constructor.name
29+
this.extraData = extraData
30+
}
31+
}
32+
33+
const a = () => {
34+
setTimeout(() => {
35+
try {
36+
throw new SentryExtendedError({ baz: 'baz', bar: 'bar' }, 'My Custom Error')
37+
} catch (e) {
38+
Sentry.withScope(scope => {
39+
if (e instanceof SentryExtendedError) {
40+
Object.entries(e.extraData).forEach(([k, v]) => {
41+
scope.setExtra(k, JSON.stringify(v))
42+
})
43+
}
44+
Sentry.captureException(e)
45+
})
46+
}
47+
48+
Sentry.withScope(scope => {
49+
Object.entries({ foo: 'foo' }).forEach(([k, v]) => {
50+
scope.setExtra(k, JSON.stringify(v))
51+
})
52+
Sentry.captureMessage('My Custom Message')
53+
})
54+
}, 10000)
55+
}
56+
57+
const b = () => {
58+
a()
59+
}
60+
61+
const c = function () {
62+
b()
63+
}
64+
65+
c()

0 commit comments

Comments
 (0)