2022-11-21 16:26:13 +03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\View\Components\Script\Exceptions;
|
|
|
|
|
|
|
|
use App\Abstracts\View\Component;
|
|
|
|
use App\Utilities\Info;
|
|
|
|
use App\Traits\Trackers as Base;
|
|
|
|
use Illuminate\Support\Str;
|
|
|
|
|
|
|
|
class Trackers extends Component
|
|
|
|
{
|
|
|
|
use Base;
|
|
|
|
|
|
|
|
public $channel;
|
|
|
|
|
|
|
|
public $action;
|
|
|
|
|
|
|
|
public $ip;
|
|
|
|
|
|
|
|
public $tags;
|
|
|
|
|
|
|
|
public $params;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create a new component instance.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public function __construct(
|
|
|
|
string $channel = null, string $action = null, string $ip = null, $tags = [], $params = []
|
|
|
|
) {
|
|
|
|
$this->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;
|
|
|
|
}
|
|
|
|
|
2022-11-22 15:00:33 +03:00
|
|
|
return static::getTrackerTags();
|
2022-11-21 16:26:13 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
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'),
|
2022-11-22 15:00:33 +03:00
|
|
|
'traces_sample_rate' => static::sentryTracesSampleRate(),
|
2022-11-21 16:26:13 +03:00
|
|
|
];
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|