WIP: Better worker error logging
This commit is contained in:
parent
7bed9aed5b
commit
970936c93d
1 changed files with 61 additions and 102 deletions
|
@ -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);
|
||||
//}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue