2021-03-10 21:08:17 +13:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Appwrite\Resque;
|
|
|
|
|
2021-11-24 03:24:25 +13:00
|
|
|
use Utopia\App;
|
|
|
|
use Utopia\CLI\Console;
|
|
|
|
use Utopia\Logger\Log;
|
|
|
|
use function get_class;
|
|
|
|
|
2021-03-10 21:08:17 +13:00
|
|
|
abstract class Worker
|
|
|
|
{
|
2021-09-01 21:09:04 +12:00
|
|
|
public array $args = [];
|
2021-03-10 21:08:17 +13:00
|
|
|
|
2021-11-24 22:38:32 +13:00
|
|
|
abstract public function getName(): string;
|
2021-11-24 03:24:25 +13:00
|
|
|
|
2021-03-10 21:08:17 +13:00
|
|
|
abstract public function init(): void;
|
2021-06-12 02:20:18 +12:00
|
|
|
|
2021-03-25 03:21:19 +13:00
|
|
|
abstract public function run(): void;
|
2021-06-12 02:20:18 +12:00
|
|
|
|
2021-03-10 21:08:17 +13:00
|
|
|
abstract public function shutdown(): void;
|
|
|
|
|
|
|
|
public function setUp(): void
|
|
|
|
{
|
2021-11-24 03:24:25 +13:00
|
|
|
try {
|
|
|
|
$this->init();
|
|
|
|
} catch(\Throwable $error) {
|
|
|
|
global $register;
|
|
|
|
$logger = $register->get('logger');
|
|
|
|
|
|
|
|
$version = App::getEnv('_APP_VERSION', 'UNKNOWN');
|
2021-11-24 22:38:32 +13:00
|
|
|
$workerType = $this->getName();
|
2021-11-24 03:24:25 +13:00
|
|
|
|
|
|
|
$log = new Log();
|
|
|
|
|
|
|
|
$log->setNamespace("worker-" . $workerType);
|
2021-11-24 22:38:32 +13:00
|
|
|
$log->setServer(\gethostname());
|
2021-11-24 03:24:25 +13:00
|
|
|
$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),
|
|
|
|
]);
|
|
|
|
|
2021-11-24 22:38:32 +13:00
|
|
|
$log->addExtra('file', $error->getFile());
|
|
|
|
$log->addExtra('line', $error->getLine());
|
|
|
|
$log->addExtra('trace', $error->getTraceAsString());
|
|
|
|
$log->addExtra('args', $this->args);
|
2021-11-24 03:24:25 +13:00
|
|
|
|
|
|
|
$action = 'worker.' . $workerType . '.setUp';
|
|
|
|
$log->setAction($action);
|
|
|
|
|
|
|
|
$isProduction = App::getEnv('_APP_ENV', 'development') === 'production';
|
|
|
|
$log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING);
|
|
|
|
|
|
|
|
$log->setBreadcrumbs([]);
|
|
|
|
|
|
|
|
$responseCode = $logger->addLog($log);
|
|
|
|
Console::info('Setup log pushed with status code: '.$responseCode);
|
|
|
|
|
|
|
|
throw $error;
|
|
|
|
}
|
2021-03-10 21:08:17 +13:00
|
|
|
}
|
|
|
|
|
2021-09-01 21:09:04 +12:00
|
|
|
public function perform(): void
|
2021-03-10 21:08:17 +13:00
|
|
|
{
|
2021-11-24 03:24:25 +13:00
|
|
|
try {
|
|
|
|
$this->run();
|
|
|
|
} catch(\Throwable $error) {
|
|
|
|
global $register;
|
|
|
|
$logger = $register->get('logger');
|
|
|
|
$version = App::getEnv('_APP_VERSION', 'UNKNOWN');
|
2021-11-24 22:38:32 +13:00
|
|
|
$workerType = $this->getName();
|
2021-11-24 03:24:25 +13:00
|
|
|
|
|
|
|
$log = new Log();
|
|
|
|
|
|
|
|
$log->setNamespace("worker-" . $workerType);
|
2021-11-24 22:38:32 +13:00
|
|
|
$log->setServer(\gethostname());
|
2021-11-24 03:24:25 +13:00
|
|
|
$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),
|
|
|
|
]);
|
|
|
|
|
2021-11-24 22:38:32 +13:00
|
|
|
$log->addExtra('file', $error->getFile());
|
|
|
|
$log->addExtra('line', $error->getLine());
|
|
|
|
$log->addExtra('trace', $error->getTraceAsString());
|
2021-11-24 03:24:25 +13:00
|
|
|
|
|
|
|
$action = 'worker.' . $workerType . '.perform';
|
|
|
|
$log->setAction($action);
|
|
|
|
|
|
|
|
$isProduction = App::getEnv('_APP_ENV', 'development') === 'production';
|
|
|
|
$log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING);
|
|
|
|
|
|
|
|
$log->setBreadcrumbs([]);
|
|
|
|
|
|
|
|
$responseCode = $logger->addLog($log);
|
|
|
|
Console::info('Perform log pushed with status code: '.$responseCode);
|
|
|
|
|
|
|
|
throw $error;
|
|
|
|
}
|
2021-03-10 21:08:17 +13:00
|
|
|
}
|
|
|
|
|
|
|
|
public function tearDown(): void
|
|
|
|
{
|
2021-11-24 03:24:25 +13:00
|
|
|
try {
|
|
|
|
$this->shutdown();
|
|
|
|
} catch(\Throwable $error) {
|
|
|
|
global $register;
|
|
|
|
$logger = $register->get('logger');
|
|
|
|
$version = App::getEnv('_APP_VERSION', 'UNKNOWN');
|
2021-11-24 22:38:32 +13:00
|
|
|
$workerType = $this->getName();
|
2021-11-24 03:24:25 +13:00
|
|
|
|
|
|
|
$log = new Log();
|
|
|
|
|
|
|
|
$log->setNamespace("worker-" . $workerType);
|
2021-11-24 22:38:32 +13:00
|
|
|
$log->setServer(\gethostname());
|
2021-11-24 03:24:25 +13:00
|
|
|
$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),
|
|
|
|
]);
|
|
|
|
|
2021-11-24 22:38:32 +13:00
|
|
|
$log->addExtra('file', $error->getFile());
|
|
|
|
$log->addExtra('line', $error->getLine());
|
|
|
|
$log->addExtra('trace', $error->getTraceAsString());
|
2021-11-24 03:24:25 +13:00
|
|
|
|
|
|
|
$action = 'worker.' . $workerType . '.tearDown';
|
|
|
|
$log->setAction($action);
|
|
|
|
|
|
|
|
$isProduction = App::getEnv('_APP_ENV', 'development') === 'production';
|
|
|
|
$log->setEnvironment($isProduction ? Log::ENVIRONMENT_PRODUCTION : Log::ENVIRONMENT_STAGING);
|
|
|
|
|
|
|
|
$log->setBreadcrumbs([]);
|
|
|
|
|
|
|
|
$responseCode = $logger->addLog($log);
|
|
|
|
Console::info('Teardown log pushed with status code: '.$responseCode);
|
|
|
|
|
|
|
|
throw $error;
|
|
|
|
}
|
2021-03-10 21:08:17 +13:00
|
|
|
}
|
|
|
|
}
|