mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-04 03:43:07 +00:00
Submit feedback using another platform
This commit is contained in:
@@ -34,10 +34,10 @@ use Illuminate\Http\Request;
|
||||
use Illuminate\Session\TokenMismatchException;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Validation\ValidationException as LaravelValidationException;
|
||||
use League\OAuth2\Server\Exception\OAuthServerException;
|
||||
use Laravel\Passport\Exceptions\OAuthServerException as LaravelOAuthException;
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
use League\OAuth2\Server\Exception\OAuthServerException;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
use Throwable;
|
||||
|
||||
/**
|
||||
@@ -58,7 +58,7 @@ class Handler extends ExceptionHandler
|
||||
OAuthServerException::class,
|
||||
LaravelOAuthException::class,
|
||||
TokenMismatchException::class,
|
||||
HttpException::class
|
||||
HttpException::class,
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -138,6 +138,15 @@ class Handler extends ExceptionHandler
|
||||
*/
|
||||
public function report(Throwable $e)
|
||||
{
|
||||
// do sentry (telemetry)
|
||||
if (!(false === config('firefly.send_telemetry') || false === config('firefly.feature_flags.telemetry'))) {
|
||||
if (app()->bound('sentry') && $this->shouldReport($e)) {
|
||||
app('sentry')->captureException($e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// do email the user (no telemetry)
|
||||
$doMailError = config('firefly.send_error_message');
|
||||
if ($this->shouldntReportLocal($e) || !$doMailError) {
|
||||
parent::report($e);
|
||||
|
@@ -38,6 +38,9 @@ use Illuminate\Queue\SerializesModels;
|
||||
use Illuminate\Support\Collection;
|
||||
use JsonException;
|
||||
use Log;
|
||||
use Sentry\State\Scope;
|
||||
use function Sentry\captureMessage;
|
||||
use function Sentry\configureScope;
|
||||
|
||||
/**
|
||||
* Class SubmitTelemetryData
|
||||
@@ -78,40 +81,58 @@ class SubmitTelemetryData implements ShouldQueue
|
||||
return;
|
||||
}
|
||||
|
||||
$json = $this->parseJson($telemetry);
|
||||
try {
|
||||
$body = json_encode($json, JSON_THROW_ON_ERROR);
|
||||
} catch (JsonException $e) {
|
||||
Log::error($e->getMessage());
|
||||
Log::error('Could not parse JSON.');
|
||||
throw new FireflyException(sprintf('Could not parse telemetry JSON: %s', $e->getMessage()), 0, $e);
|
||||
}
|
||||
// submit to Sentry one by one:
|
||||
/** @var Telemetry $entry */
|
||||
foreach($telemetry as $entry) {
|
||||
|
||||
$client = new Client;
|
||||
$options = [
|
||||
'body' => $body,
|
||||
'headers' => [
|
||||
'Content-Type' => 'application/json',
|
||||
'Accept' => 'application/json',
|
||||
'connect_timeout' => 3.14,
|
||||
'User-Agent' => sprintf('FireflyIII/%s', config('firefly.version')),
|
||||
],
|
||||
];
|
||||
try {
|
||||
$result = $client->post($url, $options);
|
||||
} catch (GuzzleException | Exception $e) {
|
||||
Log::error($e->getMessage());
|
||||
Log::error($e->getTraceAsString());
|
||||
Log::error('Could not submit telemetry.');
|
||||
throw new FireflyException(sprintf('Could not submit telemetry: %s', $e->getMessage()), 0, $e);
|
||||
}
|
||||
$body = (string)$result->getBody();
|
||||
$statusCode = $result->getStatusCode();
|
||||
Log::info(sprintf('Result of submission [%d]: %s', $statusCode, $body));
|
||||
if (200 === $statusCode) {
|
||||
// mark as submitted:
|
||||
$this->markAsSubmitted($telemetry);
|
||||
configureScope(function (Scope $scope) use ($entry): void {
|
||||
$scope->setContext('telemetry', [
|
||||
'installation_id' => $entry->installation_id,
|
||||
'collected_at' => $entry->created_at->format('r'),
|
||||
'type' => $entry->type,
|
||||
'key' => $entry->key,
|
||||
'value' => $entry->value,
|
||||
]);
|
||||
});
|
||||
|
||||
captureMessage('Telemetry submission');
|
||||
}
|
||||
$this->markAsSubmitted($telemetry);
|
||||
|
||||
// $json = $this->parseJson($telemetry);
|
||||
// try {
|
||||
// $body = json_encode($json, JSON_THROW_ON_ERROR);
|
||||
// } catch (JsonException $e) {
|
||||
// Log::error($e->getMessage());
|
||||
// Log::error('Could not parse JSON.');
|
||||
// throw new FireflyException(sprintf('Could not parse telemetry JSON: %s', $e->getMessage()), 0, $e);
|
||||
// }
|
||||
//
|
||||
// $client = new Client;
|
||||
// $options = [
|
||||
// 'body' => $body,
|
||||
// 'headers' => [
|
||||
// 'Content-Type' => 'application/json',
|
||||
// 'Accept' => 'application/json',
|
||||
// 'connect_timeout' => 3.14,
|
||||
// 'User-Agent' => sprintf('FireflyIII/%s', config('firefly.version')),
|
||||
// ],
|
||||
// ];
|
||||
// try {
|
||||
// $result = $client->post($url, $options);
|
||||
// } catch (GuzzleException | Exception $e) {
|
||||
// Log::error($e->getMessage());
|
||||
// Log::error($e->getTraceAsString());
|
||||
// Log::error('Could not submit telemetry.');
|
||||
// throw new FireflyException(sprintf('Could not submit telemetry: %s', $e->getMessage()), 0, $e);
|
||||
// }
|
||||
// $body = (string)$result->getBody();
|
||||
// $statusCode = $result->getStatusCode();
|
||||
// Log::info(sprintf('Result of submission [%d]: %s', $statusCode, $body));
|
||||
// if (200 === $statusCode) {
|
||||
// // mark as submitted:
|
||||
// $this->markAsSubmitted($telemetry);
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user