From 1d2e2af3ae543cd124f638919dcd4c1b99b06302 Mon Sep 17 00:00:00 2001 From: Burak Civan Date: Wed, 9 Nov 2022 13:20:16 +0300 Subject: [PATCH 1/4] sentry integrations --- package-lock.json | 199 ++++++++++++++++++ package.json | 2 + resources/assets/js/mixins/global.js | 20 ++ .../layouts/admin/scripts.blade.php | 1 + .../layouts/portal/scripts.blade.php | 1 + .../layouts/print/scripts.blade.php | 1 + 6 files changed, 224 insertions(+) diff --git a/package-lock.json b/package-lock.json index 03631220b..260127bb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,8 @@ "@fullcalendar/timegrid": "^5.11.0", "@fullcalendar/vue": "^5.11.0", "@popperjs/core": "^2.11.0", + "@sentry/tracing": "^7.17.4", + "@sentry/vue": "^7.17.4", "@tailwindcss/forms": "^0.4.0", "@themesberg/flowbite": "^1.2.0", "axios": "^0.21", @@ -2814,6 +2816,110 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@sentry/browser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.18.0.tgz", + "integrity": "sha512-dFNJshI5I9F2ff8X9dyN1b8UIx3h+62DOtigo+Vg2RfjplEX+rnzRWfV5QU5YBSH3AbDE3WXHuPWuYTbWg9i9w==", + "dependencies": { + "@sentry/core": "7.18.0", + "@sentry/types": "7.18.0", + "@sentry/utils": "7.18.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/core": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.18.0.tgz", + "integrity": "sha512-erDEMGM+9Msvz/fQaKlYHD8vXDs/Mv5trZc6rlS/gnlaIPQQ8cALH7UdH2UO0eoCLH3/pEYTsa4Qh8AMz6Y86w==", + "dependencies": { + "@sentry/types": "7.18.0", + "@sentry/utils": "7.18.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/tracing": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.18.0.tgz", + "integrity": "sha512-1vxCpsAKvrr9yZe8zRE+Wp8RyNjrhUqBUEc2Z69bVHmVtvIygqEiqjrqds+98PZZsqkdC3hVuUJnI9TmqzeG3g==", + "dependencies": { + "@sentry/core": "7.18.0", + "@sentry/types": "7.18.0", + "@sentry/utils": "7.18.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.18.0.tgz", + "integrity": "sha512-bOnyoK1S1chPJ+dAeWJo0srxZ9U48WE5dZFtvKeXoog6JNHY3nqAR/P/uxh9djB4bbwQRMdnGk1zm0bxhOOC6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-nIIIF9FZ2rrw9OFIAfnSEK6TbHLii3ZtahVdcw6Jk9LscL2HMkgdmgroiNfFxhGYNqfWsaxVgMW+IdnkrHsqXQ==", + "dependencies": { + "@sentry/types": "7.18.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/vue": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.18.0.tgz", + "integrity": "sha512-8dQRO7JpNcSvZqDmwGFrRDw78yamxJT3wbvmWfqeYVLyeh2KWYactkxao8xCCyJpzF0Mpa8GeyCA/FO7N4eSmg==", + "dependencies": { + "@sentry/browser": "7.18.0", + "@sentry/core": "7.18.0", + "@sentry/types": "7.18.0", + "@sentry/utils": "7.18.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "vue": "2.x || 3.x" + } + }, + "node_modules/@sentry/vue/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, "node_modules/@soda/friendly-errors-webpack-plugin": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", @@ -29693,6 +29799,99 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" }, + "@sentry/browser": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.18.0.tgz", + "integrity": "sha512-dFNJshI5I9F2ff8X9dyN1b8UIx3h+62DOtigo+Vg2RfjplEX+rnzRWfV5QU5YBSH3AbDE3WXHuPWuYTbWg9i9w==", + "requires": { + "@sentry/core": "7.18.0", + "@sentry/types": "7.18.0", + "@sentry/utils": "7.18.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/core": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.18.0.tgz", + "integrity": "sha512-erDEMGM+9Msvz/fQaKlYHD8vXDs/Mv5trZc6rlS/gnlaIPQQ8cALH7UdH2UO0eoCLH3/pEYTsa4Qh8AMz6Y86w==", + "requires": { + "@sentry/types": "7.18.0", + "@sentry/utils": "7.18.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/tracing": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.18.0.tgz", + "integrity": "sha512-1vxCpsAKvrr9yZe8zRE+Wp8RyNjrhUqBUEc2Z69bVHmVtvIygqEiqjrqds+98PZZsqkdC3hVuUJnI9TmqzeG3g==", + "requires": { + "@sentry/core": "7.18.0", + "@sentry/types": "7.18.0", + "@sentry/utils": "7.18.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/types": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.18.0.tgz", + "integrity": "sha512-bOnyoK1S1chPJ+dAeWJo0srxZ9U48WE5dZFtvKeXoog6JNHY3nqAR/P/uxh9djB4bbwQRMdnGk1zm0bxhOOC6w==" + }, + "@sentry/utils": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.18.0.tgz", + "integrity": "sha512-nIIIF9FZ2rrw9OFIAfnSEK6TbHLii3ZtahVdcw6Jk9LscL2HMkgdmgroiNfFxhGYNqfWsaxVgMW+IdnkrHsqXQ==", + "requires": { + "@sentry/types": "7.18.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/vue": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.18.0.tgz", + "integrity": "sha512-8dQRO7JpNcSvZqDmwGFrRDw78yamxJT3wbvmWfqeYVLyeh2KWYactkxao8xCCyJpzF0Mpa8GeyCA/FO7N4eSmg==", + "requires": { + "@sentry/browser": "7.18.0", + "@sentry/core": "7.18.0", + "@sentry/types": "7.18.0", + "@sentry/utils": "7.18.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, "@soda/friendly-errors-webpack-plugin": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", diff --git a/package.json b/package.json index 1ffa0aa50..0fae6399c 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,8 @@ "@fullcalendar/timegrid": "^5.11.0", "@fullcalendar/vue": "^5.11.0", "@popperjs/core": "^2.11.0", + "@sentry/tracing": "^7.17.4", + "@sentry/vue": "^7.17.4", "@tailwindcss/forms": "^0.4.0", "@themesberg/flowbite": "^1.2.0", "axios": "^0.21", diff --git a/resources/assets/js/mixins/global.js b/resources/assets/js/mixins/global.js index cbeed6dd8..de5835b3d 100644 --- a/resources/assets/js/mixins/global.js +++ b/resources/assets/js/mixins/global.js @@ -38,6 +38,26 @@ import GLightbox from 'glightbox'; Swiper.use([Navigation, Pagination]); +//sentry integration +import * as Sentry from "@sentry/vue"; +import { BrowserTracing } from "@sentry/tracing"; + +Sentry.init({ + Vue, + dsn: "https://9ffc5a5f104d4087911f60714e8bdbe9@o4503982427078656.ingest.sentry.io/4503999793594368", + logErrors: true, + integrations: [ + new BrowserTracing({ + tracingOrigins: [], + }), + ], + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for performance monitoring. + // We recommend adjusting this value in production + tracesSampleRate: 1.0, +}); +//sentry integration + export default { components: { AkauntingDropzoneFileUpload, diff --git a/resources/views/components/layouts/admin/scripts.blade.php b/resources/views/components/layouts/admin/scripts.blade.php index 774b86feb..0cac8489a 100644 --- a/resources/views/components/layouts/admin/scripts.blade.php +++ b/resources/views/components/layouts/admin/scripts.blade.php @@ -3,6 +3,7 @@ @stack('scripts_start') diff --git a/resources/views/components/layouts/portal/scripts.blade.php b/resources/views/components/layouts/portal/scripts.blade.php index 3c4e9cbed..f03b972cb 100644 --- a/resources/views/components/layouts/portal/scripts.blade.php +++ b/resources/views/components/layouts/portal/scripts.blade.php @@ -3,6 +3,7 @@ @stack('scripts_start') diff --git a/resources/views/components/layouts/print/scripts.blade.php b/resources/views/components/layouts/print/scripts.blade.php index f13c9a4ce..069c29703 100644 --- a/resources/views/components/layouts/print/scripts.blade.php +++ b/resources/views/components/layouts/print/scripts.blade.php @@ -3,6 +3,7 @@ @stack('scripts_start') From 8602a1f478d0fdbbd38687834dd10fc7a023c443 Mon Sep 17 00:00:00 2001 From: Burak Civan Date: Wed, 9 Nov 2022 16:27:00 +0300 Subject: [PATCH 2/4] added new tags --- resources/assets/js/mixins/global.js | 33 +++++++++++-------- .../components/layouts/admin/head.blade.php | 9 +++++ .../layouts/admin/scripts.blade.php | 1 - .../components/layouts/modules/head.blade.php | 1 + .../components/layouts/portal/head.blade.php | 1 + .../layouts/portal/scripts.blade.php | 1 - .../components/layouts/preview/head.blade.php | 1 + .../layouts/print/scripts.blade.php | 1 - .../components/layouts/signed/head.blade.php | 1 + .../components/layouts/wizard/head.blade.php | 1 + 10 files changed, 33 insertions(+), 17 deletions(-) diff --git a/resources/assets/js/mixins/global.js b/resources/assets/js/mixins/global.js index de5835b3d..cf9e2cc00 100644 --- a/resources/assets/js/mixins/global.js +++ b/resources/assets/js/mixins/global.js @@ -42,20 +42,25 @@ Swiper.use([Navigation, Pagination]); import * as Sentry from "@sentry/vue"; import { BrowserTracing } from "@sentry/tracing"; -Sentry.init({ - Vue, - dsn: "https://9ffc5a5f104d4087911f60714e8bdbe9@o4503982427078656.ingest.sentry.io/4503999793594368", - logErrors: true, - integrations: [ - new BrowserTracing({ - tracingOrigins: [], - }), - ], - // Set tracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. - // We recommend adjusting this value in production - tracesSampleRate: 1.0, -}); +if (sentry_dsn && sentry_dsn != '' && sentry_dsn != undefined) { + Sentry.init({ + Vue, + dsn: sentry_dsn, + logErrors: true, + integrations: [ + new BrowserTracing({ + tracingOrigins: [], + }), + ], + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for performance monitoring. + // We recommend adjusting this value in production + tracesSampleRate: 1.0, + }); + + Sentry.setUser(sentry_user[0]); + Sentry.setTag("sentry_tag", "here"); +} //sentry integration export default { diff --git a/resources/views/components/layouts/admin/head.blade.php b/resources/views/components/layouts/admin/head.blade.php index fdbe51d51..e3c9017b3 100644 --- a/resources/views/components/layouts/admin/head.blade.php +++ b/resources/views/components/layouts/admin/head.blade.php @@ -41,6 +41,15 @@ var url = '{{ url("/" . company_id()) }}'; var app_url = '{{ config("app.url") }}'; var aka_currency = {!! !empty($currency) ? $currency : 'false' !!}; + var sentry_dsn = "https://9ffc5a5f104d4087911f60714e8bdbe9@o4503982427078656.ingest.sentry.io/4503999793594368"; + var sentry_user = [ + { + id: 34, + email: "burak@akaunting.com", + username: "brkcvn", + ip_address: "http://akaunting_v5.test/1" + } + ] //--> @stack('js') diff --git a/resources/views/components/layouts/admin/scripts.blade.php b/resources/views/components/layouts/admin/scripts.blade.php index 0cac8489a..774b86feb 100644 --- a/resources/views/components/layouts/admin/scripts.blade.php +++ b/resources/views/components/layouts/admin/scripts.blade.php @@ -3,7 +3,6 @@ @stack('scripts_start') diff --git a/resources/views/components/layouts/modules/head.blade.php b/resources/views/components/layouts/modules/head.blade.php index 6da80a894..385fbfc46 100644 --- a/resources/views/components/layouts/modules/head.blade.php +++ b/resources/views/components/layouts/modules/head.blade.php @@ -61,6 +61,7 @@ var app_home = '{{ route("apps.home.index") }}'; var app_url = '{{ config("app.url") }}'; var aka_currency = {!! !empty($currency) ? $currency : 'false' !!}; + var sentry_dsn = "https://9ffc5a5f104d4087911f60714e8bdbe9@o4503982427078656.ingest.sentry.io/4503999793594368"; //--> @stack('js') diff --git a/resources/views/components/layouts/portal/head.blade.php b/resources/views/components/layouts/portal/head.blade.php index 52bae9384..479919ed4 100644 --- a/resources/views/components/layouts/portal/head.blade.php +++ b/resources/views/components/layouts/portal/head.blade.php @@ -40,6 +40,7 @@ var url = '{{ url("/" . company_id()) }}'; var app_url = '{{ config("app.url") }}'; var aka_currency = {!! !empty($currency) ? $currency : 'false' !!}; + var sentry_dsn = "https://9ffc5a5f104d4087911f60714e8bdbe9@o4503982427078656.ingest.sentry.io/4503999793594368"; //--> @stack('js') diff --git a/resources/views/components/layouts/portal/scripts.blade.php b/resources/views/components/layouts/portal/scripts.blade.php index f03b972cb..3c4e9cbed 100644 --- a/resources/views/components/layouts/portal/scripts.blade.php +++ b/resources/views/components/layouts/portal/scripts.blade.php @@ -3,7 +3,6 @@ @stack('scripts_start') diff --git a/resources/views/components/layouts/preview/head.blade.php b/resources/views/components/layouts/preview/head.blade.php index 52bae9384..479919ed4 100644 --- a/resources/views/components/layouts/preview/head.blade.php +++ b/resources/views/components/layouts/preview/head.blade.php @@ -40,6 +40,7 @@ var url = '{{ url("/" . company_id()) }}'; var app_url = '{{ config("app.url") }}'; var aka_currency = {!! !empty($currency) ? $currency : 'false' !!}; + var sentry_dsn = "https://9ffc5a5f104d4087911f60714e8bdbe9@o4503982427078656.ingest.sentry.io/4503999793594368"; //--> @stack('js') diff --git a/resources/views/components/layouts/print/scripts.blade.php b/resources/views/components/layouts/print/scripts.blade.php index 069c29703..f13c9a4ce 100644 --- a/resources/views/components/layouts/print/scripts.blade.php +++ b/resources/views/components/layouts/print/scripts.blade.php @@ -3,7 +3,6 @@ @stack('scripts_start') diff --git a/resources/views/components/layouts/signed/head.blade.php b/resources/views/components/layouts/signed/head.blade.php index 52bae9384..479919ed4 100644 --- a/resources/views/components/layouts/signed/head.blade.php +++ b/resources/views/components/layouts/signed/head.blade.php @@ -40,6 +40,7 @@ var url = '{{ url("/" . company_id()) }}'; var app_url = '{{ config("app.url") }}'; var aka_currency = {!! !empty($currency) ? $currency : 'false' !!}; + var sentry_dsn = "https://9ffc5a5f104d4087911f60714e8bdbe9@o4503982427078656.ingest.sentry.io/4503999793594368"; //--> @stack('js') diff --git a/resources/views/components/layouts/wizard/head.blade.php b/resources/views/components/layouts/wizard/head.blade.php index c09f9bf11..7b866a2dc 100644 --- a/resources/views/components/layouts/wizard/head.blade.php +++ b/resources/views/components/layouts/wizard/head.blade.php @@ -37,6 +37,7 @@ var url = '{{ url("/" . company_id()) }}'; var app_url = '{{ config("app.url") }}'; var aka_currency = {!! !empty($currency) ? $currency : 'false' !!}; + var sentry_dsn = "https://9ffc5a5f104d4087911f60714e8bdbe9@o4503982427078656.ingest.sentry.io/4503999793594368"; //--> @stack('js') From 1c93c7a11ec0d117cf2408c13d772f3d52899059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=BCneyt=20=C5=9Eent=C3=BCrk?= Date: Mon, 21 Nov 2022 16:26:13 +0300 Subject: [PATCH 3/4] Changed javascipt exception tracker method.. --- app/Exceptions/Trackers/Bugsnag.php | 19 +-- app/Exceptions/Trackers/Sentry.php | 37 +---- app/Traits/Trackers.php | 43 ++++++ .../Components/Script/Exceptions/Trackers.php | 132 ++++++++++++++++++ .../assets/js/exceptions/trackers/bugsnag.js | 1 + .../assets/js/exceptions/trackers/sentry.js | 34 +++++ resources/assets/js/mixins/global.js | 34 ++--- .../components/layouts/admin/head.blade.php | 11 +- .../components/layouts/modules/head.blade.php | 3 +- .../components/layouts/portal/head.blade.php | 3 +- .../components/layouts/preview/head.blade.php | 3 +- .../components/layouts/signed/head.blade.php | 3 +- .../components/layouts/wizard/head.blade.php | 3 +- .../script/exceptions/trackers.blade.php | 16 +++ 14 files changed, 263 insertions(+), 79 deletions(-) create mode 100644 app/Traits/Trackers.php create mode 100644 app/View/Components/Script/Exceptions/Trackers.php create mode 100644 resources/assets/js/exceptions/trackers/bugsnag.js create mode 100644 resources/assets/js/exceptions/trackers/sentry.js create mode 100644 resources/views/components/script/exceptions/trackers.blade.php diff --git a/app/Exceptions/Trackers/Bugsnag.php b/app/Exceptions/Trackers/Bugsnag.php index 818c39ec2..9e5f943bd 100644 --- a/app/Exceptions/Trackers/Bugsnag.php +++ b/app/Exceptions/Trackers/Bugsnag.php @@ -2,28 +2,23 @@ namespace App\Exceptions\Trackers; +use App\Traits\Trackers as Base; use Throwable; class Bugsnag { + use Base; + public static function beforeSend(Throwable $e): void { app('bugsnag')->setAppVersion(version('short')); - app('bugsnag')->registerCallback(function ($report) { + $tags = $this->getTrackerTags(); + + app('bugsnag')->registerCallback(function ($report) use($tags) { $report->setMetaData([ - 'akaunting' => [ - 'company_id' => (string) company_id(), - 'locale' => (string) app()->getLocale(), - 'timezone' => (string) config('app.timezone'), - 'route_name' => (string) static::getRouteName(), - ] + 'akaunting' => $tags ]); }); } - - public static function getRouteName(): ?string - { - return request()->route()?->getName(); - } } diff --git a/app/Exceptions/Trackers/Sentry.php b/app/Exceptions/Trackers/Sentry.php index 8bad77c3b..1258c2c20 100644 --- a/app/Exceptions/Trackers/Sentry.php +++ b/app/Exceptions/Trackers/Sentry.php @@ -2,6 +2,7 @@ namespace App\Exceptions\Trackers; +use App\Traits\Trackers as Base; use Illuminate\Support\Str; use Sentry\Event; use Sentry\EventHint; @@ -9,17 +10,15 @@ use Sentry\Tracing\SamplingContext; class Sentry { + use Base; + public static function beforeSend(Event $event, ?EventHint $hint): ?Event { $event->setRelease(version('short')); - $event->setTags([ - 'company_id' => (string) company_id(), - 'locale' => (string) app()->getLocale(), - 'timezone' => (string) config('app.timezone'), - 'app_type' => (string) static::getAppType(), - 'route_name' => (string) static::getRouteName(), - ]); + $tags = $this->getTrackerTags(); + + $event->setTags($tags); return $event; } @@ -49,28 +48,4 @@ class Sentry return false; } - - public static function getAppType(): string - { - $hostname = gethostname(); - - if (Str::contains($hostname, '-queue-')) { - $app_type = 'queue'; - } elseif (Str::contains($hostname, '-cron-')) { - $app_type = 'cron'; - } elseif (request()->isApi()) { - $app_type = 'api'; - } elseif (app()->runningInConsole()) { - $app_type = 'console'; - } else { - $app_type = 'ui'; - } - - return $app_type; - } - - public static function getRouteName(): ?string - { - return request()->route()?->getName(); - } } diff --git a/app/Traits/Trackers.php b/app/Traits/Trackers.php new file mode 100644 index 000000000..bbe5d85ae --- /dev/null +++ b/app/Traits/Trackers.php @@ -0,0 +1,43 @@ + (string) company_id(), + 'locale' => (string) app()->getLocale(), + 'timezone' => (string) config('app.timezone'), + 'app_type' => (string) static::getAppType(), + 'route_name' => (string) static::getRouteName(), + ]; + } + + public static function getAppType(): string + { + $hostname = gethostname(); + + if (Str::contains($hostname, '-queue-')) { + $app_type = 'queue'; + } elseif (Str::contains($hostname, '-cron-')) { + $app_type = 'cron'; + } elseif (request()->isApi()) { + $app_type = 'api'; + } elseif (app()->runningInConsole()) { + $app_type = 'console'; + } else { + $app_type = 'ui'; + } + + return $app_type; + } + + public static function getRouteName(): ?string + { + return request()->route()?->getName(); + } +} diff --git a/app/View/Components/Script/Exceptions/Trackers.php b/app/View/Components/Script/Exceptions/Trackers.php new file mode 100644 index 000000000..6a11b40db --- /dev/null +++ b/app/View/Components/Script/Exceptions/Trackers.php @@ -0,0 +1,132 @@ +channel = $this->getChannel($channel); + $this->action = $this->getAction($action); + $this->ip = $this->getIp($ip); + $this->tags = $this->getTags($tags); + $this->params = $this->getParams($params); + } + /** + * Get the view / contents that represent the component. + * + * @return \Illuminate\Contracts\View\View|string + */ + public function render() + { + return view('components.script.exceptions.trackers'); + } + + public function getChannel($channel) + { + if (! empty($channel)) { + return $channel; + } + + return config('logging.default'); + } + + public function getAction($action) + { + if (! empty($action)) { + return $action; + } + + switch ($this->channel) { + case 'bugsnag': + $action = config('bugsnag.api_key'); + break; + case 'sentry': + $action = config('sentry.dsn'); + break; + } + + return $action; + } + + public function getIp($ip) + { + if (! empty($ip)) { + return $ip; + } + + return Info::ip(); + } + + public function getTags($tags) + { + if (! empty($tags)) { + return $tags; + } + + return $this->getTrackerTags(); + } + + public function getParams($params) + { + if (! empty($params)) { + return $params; + } + + switch ($this->channel) { + case 'bugsnag': + $params = [ + 'app_version' => version('short'), + ]; + break; + case 'sentry': + $params = [ + 'release' => version('short'), + 'traces_sample_rate' => $this->sentryTracesSampleRate(), + ]; + break; + } + + return $params; + } + + public static function sentryTracesSampleRate() + { + $user_agent = request()->userAgent(); + + $filter_agents = explode(',', env('SENTRY_TRACES_FILTER_AGENTS')); + + foreach ($filter_agents as $filter_agent) { + if (! Str::contains($user_agent, $filter_agent)) { + continue; + } + + return 0.0; + } + + return (float) config('sentry.traces_sample_rate', 1.0); + } +} diff --git a/resources/assets/js/exceptions/trackers/bugsnag.js b/resources/assets/js/exceptions/trackers/bugsnag.js new file mode 100644 index 000000000..7e9e193ae --- /dev/null +++ b/resources/assets/js/exceptions/trackers/bugsnag.js @@ -0,0 +1 @@ +// Will added as soon as possible \ No newline at end of file diff --git a/resources/assets/js/exceptions/trackers/sentry.js b/resources/assets/js/exceptions/trackers/sentry.js new file mode 100644 index 000000000..c5ce338d1 --- /dev/null +++ b/resources/assets/js/exceptions/trackers/sentry.js @@ -0,0 +1,34 @@ +import * as Sentry from "@sentry/vue"; +import { BrowserTracing } from "@sentry/tracing"; + +export default { + install(Vue) { + alert(exception_tracker.params.traces_sample_rate); + + Sentry.init({ + Vue, + dsn: exception_tracker.action, + logErrors: true, + integrations: [ + new BrowserTracing({ + tracingOrigins: [], + }), + ], + // Set tracesSampleRate to 1.0 to capture 100% + // of transactions for performance monitoring. + // We recommend adjusting this value in production + tracesSampleRate: exception_tracker.params.traces_sample_rate, + }); + + Sentry.setUser({ + id: exception_tracker.user.id, + username: exception_tracker.user.name, + email: exception_tracker.user.email, + ip_address: exception_tracker.ip, + }); + + for (const [key, value] of Object.entries(exception_tracker.tags)) { + Sentry.setTag(key, value); + } + } +} diff --git a/resources/assets/js/mixins/global.js b/resources/assets/js/mixins/global.js index cf9e2cc00..d99630bae 100644 --- a/resources/assets/js/mixins/global.js +++ b/resources/assets/js/mixins/global.js @@ -38,30 +38,20 @@ import GLightbox from 'glightbox'; Swiper.use([Navigation, Pagination]); -//sentry integration -import * as Sentry from "@sentry/vue"; -import { BrowserTracing } from "@sentry/tracing"; +import Bugsnag from './../exceptions/trackers/bugsnag'; +import Sentry from './../exceptions/trackers/sentry'; -if (sentry_dsn && sentry_dsn != '' && sentry_dsn != undefined) { - Sentry.init({ - Vue, - dsn: sentry_dsn, - logErrors: true, - integrations: [ - new BrowserTracing({ - tracingOrigins: [], - }), - ], - // Set tracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. - // We recommend adjusting this value in production - tracesSampleRate: 1.0, - }); - - Sentry.setUser(sentry_user[0]); - Sentry.setTag("sentry_tag", "here"); +// Exception Tracket start here!!s +if (typeof exception_tracker != 'undefined') { + switch (exception_tracker.channel) { + case 'bugsnag': + Vue.use(Bugsnag); + break; + case 'sentry': + Vue.use(Sentry); + break; + } } -//sentry integration export default { components: { diff --git a/resources/views/components/layouts/admin/head.blade.php b/resources/views/components/layouts/admin/head.blade.php index e3c9017b3..79a7f3831 100644 --- a/resources/views/components/layouts/admin/head.blade.php +++ b/resources/views/components/layouts/admin/head.blade.php @@ -41,17 +41,10 @@ var url = '{{ url("/" . company_id()) }}'; var app_url = '{{ config("app.url") }}'; var aka_currency = {!! !empty($currency) ? $currency : 'false' !!}; - var sentry_dsn = "https://9ffc5a5f104d4087911f60714e8bdbe9@o4503982427078656.ingest.sentry.io/4503999793594368"; - var sentry_user = [ - { - id: 34, - email: "burak@akaunting.com", - username: "brkcvn", - ip_address: "http://akaunting_v5.test/1" - } - ] //--> + + @stack('js') + + @stack('js') + + @stack('js') + + @stack('js') + + @stack('js') + + @stack('js') +@endif From 3cc312684b09cf85eefa9c3e2cd1a7dac81c0658 Mon Sep 17 00:00:00 2001 From: Burak Civan Date: Mon, 21 Nov 2022 17:29:16 +0300 Subject: [PATCH 4/4] removed alert message --- resources/assets/js/exceptions/trackers/sentry.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/assets/js/exceptions/trackers/sentry.js b/resources/assets/js/exceptions/trackers/sentry.js index c5ce338d1..9ef760eea 100644 --- a/resources/assets/js/exceptions/trackers/sentry.js +++ b/resources/assets/js/exceptions/trackers/sentry.js @@ -3,8 +3,6 @@ import { BrowserTracing } from "@sentry/tracing"; export default { install(Vue) { - alert(exception_tracker.params.traces_sample_rate); - Sentry.init({ Vue, dsn: exception_tracker.action,