1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-13 06:32:40 +01:00

Merge pull request #8169 from turbo124/v5-develop

Improve sentry logging in selfhost + hosted
This commit is contained in:
David Bomba 2023-01-17 18:26:07 +11:00 committed by GitHub
commit 4fb80f98dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 5 deletions

View File

@ -36,6 +36,7 @@ use Symfony\Component\Console\Exception\CommandNotFoundException;
use Symfony\Component\Debug\Exception\FatalThrowableError;
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use League\Flysystem\UnableToCreateDirectory;
use Throwable;
class Handler extends ExceptionHandler
@ -54,6 +55,30 @@ class Handler extends ExceptionHandler
NotFoundHttpException::class,
];
protected $selfHostDontReport = [
FilePermissionsFailure::class,
PDOException::class,
MaxAttemptsExceededException::class,
CommandNotFoundException::class,
ValidationException::class,
ModelNotFoundException::class,
NotFoundHttpException::class,
UnableToCreateDirectory::class,
GuzzleHttp\Exception\ConnectException::class,
Symfony\Component\Process\Exception\RuntimeException::class,
InvalidArgumentException::class,
RuntimeException::class,
];
protected $hostedDontReport = [
PDOException::class,
MaxAttemptsExceededException::class,
CommandNotFoundException::class,
ValidationException::class,
ModelNotFoundException::class,
NotFoundHttpException::class,
];
/**
* A list of the inputs that are never flashed for validation exceptions.
*
@ -100,11 +125,11 @@ class Handler extends ExceptionHandler
]);
});
if ($this->validException($exception)) {
if ($this->validException($exception) && $this->sentryShouldReport($exception)) {
Integration::captureUnhandledException($exception);
}
} elseif (app()->bound('sentry') && $this->shouldReport($exception)) {
} elseif (app()->bound('sentry')) {
Integration::configureScope(function (Scope $scope): void {
if (auth()->guard('contact') && auth()->guard('contact')->user() && auth()->guard('contact')->user()->company->account->report_errors) {
$scope->setUser([
@ -121,7 +146,7 @@ class Handler extends ExceptionHandler
}
});
if ($this->validException($exception)) {
if ($this->validException($exception) && $this->sentryShouldReport($exception)) {
Integration::captureUnhandledException($exception);
}
}
@ -158,6 +183,23 @@ class Handler extends ExceptionHandler
return true;
}
/**
* Determine if the exception is in the "do not report" list.
*
* @param \Throwable $e
* @return bool
*/
protected function sentryShouldReport(Throwable $e)
{
if(Ninja::isHosted())
$dontReport = array_merge($this->hostedDontReport, $this->internalDontReport);
else
$dontReport = array_merge($this->selfHostDontReport, $this->internalDontReport);
return is_null(Arr::first($dontReport, fn ($type) => $e instanceof $type));
}
/**
* Render an exception into an HTTP response.
*
@ -194,7 +236,6 @@ class Handler extends ExceptionHandler
} elseif ($exception instanceof MethodNotAllowedHttpException && $request->expectsJson()) {
return response()->json(['message'=>'Method not supported for this route'], 404);
} elseif ($exception instanceof ValidationException && $request->expectsJson()) {
// nlog($exception->validator->getMessageBag());
return response()->json(['message' => 'The given data was invalid.', 'errors' => $exception->validator->getMessageBag()], 422);
} elseif ($exception instanceof RelationNotFoundException && $request->expectsJson()) {
return response()->json(['message' => "Relation `{$exception->relation}` is not a valid include."], 400);

View File

@ -40,7 +40,8 @@ class SchedulerService
private function client_statement()
{
$query = Client::query()
->where('company_id', $this->scheduler->company_id);
->where('company_id', $this->scheduler->company_id)
->where('is_deleted',0);
//Email only the selected clients
if(count($this->scheduler->parameters['clients']) >= 1)