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