diff --git a/src/Appwrite/Resque/Worker.php b/src/Appwrite/Resque/Worker.php index 094573a114..b6cb868513 100644 --- a/src/Appwrite/Resque/Worker.php +++ b/src/Appwrite/Resque/Worker.php @@ -2,12 +2,15 @@ namespace Appwrite\Resque; -use Utopia\App; -use Utopia\CLI\Console; -use Utopia\Logger\Log; - abstract class Worker { + /** + * Callbacks that will be executed when an error occurs + * + * @var array + */ + protected $errorCallbacks = []; + /** * Named array holding all information passed into worker alongside a new task. * @@ -60,38 +63,8 @@ abstract class Worker try { $this->init(); } catch(\Throwable $error) { - global $register; - $logger = $register->get('logger'); - - if($logger) { - $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); - $workerType = $this->getName(); - - $log = new Log(); - - $log->setNamespace("worker-" . $workerType); - $log->setServer(\gethostname()); - $log->setVersion($version); - $log->setType(Log::TYPE_ERROR); - $log->setMessage($error->getMessage()); - - $log->addTag('worker_type', $workerType); - $log->addTag('code', $error->getCode()); - $log->addTag('verbose_type', \get_class($error)); - - $log->addExtra('file', $error->getFile()); - $log->addExtra('line', $error->getLine()); - $log->addExtra('trace', $error->getTraceAsString()); - $log->addExtra('args', $this->args); - - $action = 'worker.' . $workerType . '.setUp'; - $log->setAction($action); - - $isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; - $log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); - - $responseCode = $logger->addLog($log); - Console::info('Setup log pushed with status code: '.$responseCode); + foreach ($this->errorCallbacks as $errorCallback) { + $errorCallback($error, "init"); } throw $error; @@ -109,39 +82,8 @@ abstract class Worker try { $this->run(); } catch(\Throwable $error) { - global $register; - $logger = $register->get('logger'); - - if($logger) { - $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); - $workerType = $this->getName(); - - $log = new Log(); - - $log->setNamespace("worker-" . $workerType); - $log->setServer(\gethostname()); - $log->setVersion($version); - $log->setType(Log::TYPE_ERROR); - $log->setMessage($error->getMessage()); - - $log->setTags([ - 'worker_type' => $workerType, - 'code' => $error->getCode(), - 'verbose_type' => \get_class($error), - ]); - - $log->addExtra('file', $error->getFile()); - $log->addExtra('line', $error->getLine()); - $log->addExtra('trace', $error->getTraceAsString()); - - $action = 'worker.' . $workerType . '.perform'; - $log->setAction($action); - - $isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; - $log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); - - $responseCode = $logger->addLog($log); - Console::info('Perform log pushed with status code: '.$responseCode); + foreach ($this->errorCallbacks as $errorCallback) { + $errorCallback($error, "run"); } throw $error; @@ -159,42 +101,59 @@ abstract class Worker try { $this->shutdown(); } catch(\Throwable $error) { - global $register; - $logger = $register->get('logger'); - - if($logger) { - $version = App::getEnv('_APP_VERSION', 'UNKNOWN'); - $workerType = $this->getName(); - - $log = new Log(); - - $log->setNamespace("worker-" . $workerType); - $log->setServer(\gethostname()); - $log->setVersion($version); - $log->setType(Log::TYPE_ERROR); - $log->setMessage($error->getMessage()); - - $log->setTags([ - 'worker_type' => $workerType, - 'code' => $error->getCode(), - 'verbose_type' => \get_class($error), - ]); - - $log->addExtra('file', $error->getFile()); - $log->addExtra('line', $error->getLine()); - $log->addExtra('trace', $error->getTraceAsString()); - - $action = 'worker.' . $workerType . '.tearDown'; - $log->setAction($action); - - $isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; - $log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); - - $responseCode = $logger->addLog($log); - Console::info('Teardown log pushed with status code: '.$responseCode); + foreach ($this->errorCallbacks as $errorCallback) { + $errorCallback($error, "shutdown"); } throw $error; } } + + + /** + * Register callback. Will be executed when error occurs. + * @param callable $callback + * @param Throwable $error + * @return self + */ + public function error(callable $callback): self + { + \array_push($this->errorCallbacks, $callback); + return $this; + } + + // TODO: Implement this on init file using Worker->error(function() { HERE }) + //global $register; + //$logger = $register->get('logger'); + // + //if($logger) { + //$version = App::getEnv('_APP_VERSION', 'UNKNOWN'); + //$workerType = $this->getName(); + // + //$log = new Log(); + // + //$log->setNamespace("worker-" . $workerType); + //$log->setServer(\gethostname()); + //$log->setVersion($version); + //$log->setType(Log::TYPE_ERROR); + //$log->setMessage($error->getMessage()); + // + //$log->addTag('worker_type', $workerType); + //$log->addTag('code', $error->getCode()); + //$log->addTag('verbose_type', \get_class($error)); + // + //$log->addExtra('file', $error->getFile()); + //$log->addExtra('line', $error->getLine()); + //$log->addExtra('trace', $error->getTraceAsString()); + //$log->addExtra('args', $this->args); + // + //$action = 'worker.' . $workerType . '.setUp'; + //$log->setAction($action); + // + //$isProduction = App::getEnv('_APP_ENV', 'development') === 'production'; + //$log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING); + // + //$responseCode = $logger->addLog($log); + //Console::info('Setup log pushed with status code: '.$responseCode); + //} }