1
0
Fork 0
mirror of synced 2024-09-30 09:18:14 +13:00
appwrite/src/Appwrite/Resque/Worker.php

153 lines
4.6 KiB
PHP
Raw Normal View History

2021-03-10 21:08:17 +13:00
<?php
namespace Appwrite\Resque;
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
{
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-03-10 21:08:17 +13:00
abstract public function init(): void;
abstract public function run(): void;
2021-03-10 21:08:17 +13:00
abstract public function shutdown(): void;
public function setUp(): void
{
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();
$log = new Log();
$log->setNamespace("worker-" . $workerType);
2021-11-24 22:38:32 +13:00
$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),
]);
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);
$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
}
public function perform(): void
2021-03-10 21:08:17 +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();
$log = new Log();
$log->setNamespace("worker-" . $workerType);
2021-11-24 22:38:32 +13:00
$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),
]);
2021-11-24 22:38:32 +13:00
$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);
$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
{
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();
$log = new Log();
$log->setNamespace("worker-" . $workerType);
2021-11-24 22:38:32 +13:00
$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),
]);
2021-11-24 22:38:32 +13:00
$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);
$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
}
}