diff --git a/app/worker.php b/app/worker.php index 8151381d4a..c4fd3a33d0 100644 --- a/app/worker.php +++ b/app/worker.php @@ -85,6 +85,8 @@ Server::setResource('queueForFunctions', function (Registry $register) { ); }, ['register']); +Server::setResource('log', fn() => new Log()); + Server::setResource('logger', function ($register) { return $register->get('logger'); }, ['register']); @@ -119,16 +121,15 @@ $server ->error() ->inject('error') ->inject('logger') - ->action(function (Throwable $error, Logger $logger) { + ->inject('log') + ->action(function (Throwable $error, Logger $logger, Log $log) { $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); if ($error instanceof PDOException) { throw $error; } - if ($error->getCode() >= 500 || $error->getCode() === 0) { - $log = new Log(); - + if ($logger && ($error->getCode() >= 500 || $error->getCode() === 0)) { $log->setNamespace("appwrite-worker"); $log->setServer(\gethostname()); $log->setVersion($version); @@ -146,7 +147,8 @@ $server $isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; $log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); - $logger->addLog($log); + $responseCode = $logger->addLog($log); + Console::info('Usage stats log pushed with status code: ' . $responseCode); } Console::error('[Error] Type: ' . get_class($error)); diff --git a/app/workers/functions.php b/app/workers/functions.php index 31e64a2bb4..e5542c9834 100644 --- a/app/workers/functions.php +++ b/app/workers/functions.php @@ -20,6 +20,7 @@ use Utopia\Database\Permission; use Utopia\Database\Query; use Utopia\Database\Role; use Utopia\Database\Validator\Authorization; +use Utopia\Logger\Log; use Utopia\Queue\Server; Authorization::disable(); @@ -27,6 +28,7 @@ Authorization::setDefaultStatus(false); Server::setResource('execute', function () { return function ( + Log $log, Func $queueForFunctions, Database $dbForProject, Client $statsd, @@ -40,10 +42,16 @@ Server::setResource('execute', function () { string $eventData = null, string $executionId = null, ) { + $error = null; // Used to re-throw at the end to trigger Logger (Sentry) + $errorCode = 0; + $user ??= new Document(); $functionId = $function->getId(); $deploymentId = $function->getAttribute('deployment', ''); + $log->addExtra('functionId', $functionId); + $log->addExtra('projectId', $project->getId()); + /** Check if deployment exists */ $deployment = $dbForProject->getDocument('deployments', $deploymentId); @@ -153,10 +161,8 @@ Server::setResource('execute', function () { ->setAttribute('statusCode', $th->getCode()) ->setAttribute('stderr', $th->getMessage()); - Console::error($th->getTraceAsString()); - Console::error($th->getFile()); - Console::error($th->getLine()); - Console::error($th->getMessage()); + $error = $th->getMessage(); + $errorCode = $th->getCode(); } $execution = $dbForProject->updateDocument('executions', $executionId, $execution); @@ -217,6 +223,10 @@ Server::setResource('execute', function () { ->setParam('networkResponseSize', 0) ->submit(); } + + if (!empty($error)) { + throw new Exception($error, $errorCode); + } }; }); @@ -226,7 +236,8 @@ $server->job() ->inject('queueForFunctions') ->inject('statsd') ->inject('execute') - ->action(function (Message $message, Database $dbForProject, Func $queueForFunctions, Client $statsd, callable $execute) { + ->inject('log') + ->action(function (Message $message, Database $dbForProject, Func $queueForFunctions, Client $statsd, callable $execute, Log $log) { $payload = $message->getPayload() ?? []; if (empty($payload)) { @@ -269,6 +280,7 @@ $server->job() } Console::success('Iterating function: ' . $function->getAttribute('name')); $execute( + log: $log, statsd: $statsd, dbForProject: $dbForProject, project: $project, @@ -297,6 +309,7 @@ $server->job() $execution = new Document($payload['execution'] ?? []); $user = new Document($payload['user'] ?? []); $execute( + log: $log, project: $project, function: $function, dbForProject: $dbForProject, @@ -313,6 +326,7 @@ $server->job() break; case 'schedule': $execute( + log: $log, project: $project, function: $function, dbForProject: $dbForProject, diff --git a/composer.lock b/composer.lock index a6be48eacd..be89664a92 100644 --- a/composer.lock +++ b/composer.lock @@ -2509,16 +2509,16 @@ }, { "name": "utopia-php/queue", - "version": "0.5.2", + "version": "0.5.3", "source": { "type": "git", "url": "https://github.com/utopia-php/queue.git", - "reference": "310271c5cd477541208d7fa74a4dea64df8e04a0" + "reference": "8e8b6cb27172713fe5d8b7b092ce68516caf129a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/queue/zipball/310271c5cd477541208d7fa74a4dea64df8e04a0", - "reference": "310271c5cd477541208d7fa74a4dea64df8e04a0", + "url": "https://api.github.com/repos/utopia-php/queue/zipball/8e8b6cb27172713fe5d8b7b092ce68516caf129a", + "reference": "8e8b6cb27172713fe5d8b7b092ce68516caf129a", "shasum": "" }, "require": { @@ -2564,9 +2564,9 @@ ], "support": { "issues": "https://github.com/utopia-php/queue/issues", - "source": "https://github.com/utopia-php/queue/tree/0.5.2" + "source": "https://github.com/utopia-php/queue/tree/0.5.3" }, - "time": "2023-03-07T08:54:10+00:00" + "time": "2023-05-24T19:06:04+00:00" }, { "name": "utopia-php/registry", diff --git a/docker-compose.yml b/docker-compose.yml index e01eaaacef..d36b175c0c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -483,6 +483,8 @@ services: - _APP_USAGE_STATS - DOCKERHUB_PULL_USERNAME - DOCKERHUB_PULL_PASSWORD + - _APP_LOGGING_CONFIG + - _APP_LOGGING_PROVIDER appwrite-worker-mails: entrypoint: worker-mails