From 2e701df21a146cb0775efc4a2295e9a8e84ae2c0 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 27 May 2025 21:26:17 +0000 Subject: [PATCH] Avoid warnings in the Jetstream process --- bin/console.php | 3 ++ src/Protocol/ATProtocol/Actor.php | 2 +- src/Protocol/ATProtocol/Jetstream.php | 46 ++++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/bin/console.php b/bin/console.php index a20f3f7e025..88382e1665c 100755 --- a/bin/console.php +++ b/bin/console.php @@ -13,6 +13,9 @@ if (php_sapi_name() !== 'cli') { exit(); } +// Ensure that te console is executed from the base path of the installation +chdir(dirname(__DIR__)); + require dirname(__DIR__) . '/vendor/autoload.php'; $container = \Friendica\Core\DiceContainer::fromBasePath(dirname(__DIR__)); diff --git a/src/Protocol/ATProtocol/Actor.php b/src/Protocol/ATProtocol/Actor.php index 38da819dfc4..4dae8b75cf3 100755 --- a/src/Protocol/ATProtocol/Actor.php +++ b/src/Protocol/ATProtocol/Actor.php @@ -133,7 +133,7 @@ class Actor } $directory = $this->atprotocol->get(ATProtocol::DIRECTORY . '/' . $profile->did); - if (!empty($directory)) { + if (!empty($directory->service)) { foreach ($directory->service as $service) { if (($service->id == '#atproto_pds') && ($service->type == 'AtprotoPersonalDataServer') && !empty($service->serviceEndpoint)) { $fields['baseurl'] = $service->serviceEndpoint; diff --git a/src/Protocol/ATProtocol/Jetstream.php b/src/Protocol/ATProtocol/Jetstream.php index 8051e471268..86e28c0124a 100755 --- a/src/Protocol/ATProtocol/Jetstream.php +++ b/src/Protocol/ATProtocol/Jetstream.php @@ -84,6 +84,8 @@ class Jetstream $timeout_limit = 10; $timestamp = $this->keyValue->get('jetstream_timestamp') ?? 0; $cursor = ''; + $this->logger->notice('Start listening'); + while (true) { if ($timestamp) { $cursor = '&cursor=' . $timestamp; @@ -92,12 +94,21 @@ class Jetstream $this->syncContacts(); try { + set_error_handler(function ($errno, $errstr, $errfile, $errline) { + restore_error_handler(); + throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); + }, E_WARNING); // @todo make the path configurable $this->client = new \WebSocket\Client('wss://jetstream1.us-west.bsky.network/subscribe?requireHello=true' . $cursor); $this->client->setTimeout($timeout); $this->client->setLogger($this->logger); + restore_error_handler(); } catch (\WebSocket\ConnectionException $e) { - $this->logger->error('Error while trying to establish the connection', ['code' => $e->getCode(), 'message' => $e->getMessage()]); + $this->logger->error('Error while trying to establish the connection', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); + echo "Connection wasn't established.\n"; + exit(1); + } catch (\ErrorException $e) { + $this->logger->notice('Warning while trying to establish the connection', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); echo "Connection wasn't established.\n"; exit(1); } @@ -105,7 +116,13 @@ class Jetstream $last_timeout = time(); while (true) { try { - $message = @$this->client->receive(); + set_error_handler(function ($errno, $errstr, $errfile, $errline) { + restore_error_handler(); + throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); + }, E_WARNING); + $message = $this->client->receive(); + restore_error_handler(); + if (empty($message)) { $this->logger->notice('Empty message received'); break; @@ -128,19 +145,31 @@ class Jetstream break; } $this->logger->notice('Timeout', ['duration' => $timeout_duration, 'timestamp' => $timestamp, 'code' => $e->getCode(), 'message' => $e->getMessage()]); + break; } else { - $this->logger->error('Error', ['code' => $e->getCode(), 'message' => $e->getMessage()]); + $this->logger->error('Error while trying to receive a message', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); break; } + } catch (\ErrorException $e) { + $this->logger->notice('Warning while trying to receive a message', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); + break; } $last_timeout = time(); } try { + set_error_handler(function ($errno, $errstr, $errfile, $errline) { + restore_error_handler(); + throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); + }, E_WARNING); $this->client->close(); + restore_error_handler(); } catch (\WebSocket\ConnectionException $e) { - $this->logger->error('Error while trying to close the connection', ['code' => $e->getCode(), 'message' => $e->getMessage()]); + $this->logger->error('Error while trying to close the connection', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); + } catch (\ErrorException $e) { + $this->logger->notice('Warning while trying to close the connection', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); } } + $this->logger->notice('Stop listening'); } /** @@ -234,9 +263,16 @@ class Jetstream ] ]; try { + set_error_handler(function ($errno, $errstr, $errfile, $errline) { + restore_error_handler(); + throw new \ErrorException($errstr, 0, $errno, $errfile, $errline); + }, E_WARNING); $this->client->send(json_encode($update)); + restore_error_handler(); } catch (\WebSocket\ConnectionException $e) { - $this->logger->error('Error while trying to send options.', ['code' => $e->getCode(), 'message' => $e->getMessage()]); + $this->logger->error('Error while trying to send options.', ['code' => $e->getCode(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); + } catch (\ErrorException $e) { + $this->logger->notice('Warning while trying to send options.', ['code' => $e->getCode(), 'severity' => $e->getSeverity(), 'message' => $e->getMessage(), 'file' => $e->getFile(), 'line' => $e->getLine()]); } }