1
0
Fork 0
mirror of synced 2024-07-06 07:00:56 +12:00

error logger in resources

This commit is contained in:
Damodar Lohani 2022-10-28 08:56:45 +00:00
parent e7a7267c9f
commit 4acd10f2e1
3 changed files with 45 additions and 44 deletions

View file

@ -13,6 +13,7 @@ use Utopia\Cache\Adapter\Redis as RedisCache;
use Utopia\Cache\Cache; use Utopia\Cache\Cache;
use Utopia\Database\Adapter\MariaDB; use Utopia\Database\Adapter\MariaDB;
use Utopia\Database\Database; use Utopia\Database\Database;
use Utopia\Logger\Log;
use Utopia\Registry\Registry; use Utopia\Registry\Registry;
Authorization::disable(); Authorization::disable();
@ -77,6 +78,43 @@ CLI::setResource('influxdb', function(Registry $register){
return $database; return $database;
}, ['register']); }, ['register']);
CLI::setResource('logError', function(Registry $register){
return function(Throwable $error, string $namespace, string $action) use($register)
{
$logger = $register->get('logger');
if ($logger) {
$version = App::getEnv('_APP_VERSION', 'UNKNOWN');
$log = new Log();
$log->setNamespace($namespace);
$log->setServer(\gethostname());
$log->setVersion($version);
$log->setType(Log::TYPE_ERROR);
$log->setMessage($error->getMessage());
$log->addTag('code', $error->getCode());
$log->addTag('verboseType', get_class($error));
$log->addExtra('file', $error->getFile());
$log->addExtra('line', $error->getLine());
$log->addExtra('trace', $error->getTraceAsString());
$log->addExtra('detailedTrace', $error->getTrace());
$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('Usage stats log pushed with status code: ' . $responseCode);
}
Console::warning("Failed: {$error->getMessage()}");
Console::warning($error->getTraceAsString());
};
});
$cliPlatform = new Tasks(); $cliPlatform = new Tasks();
$cliPlatform->init(Service::TYPE_CLI); $cliPlatform->init(Service::TYPE_CLI);

View file

@ -29,7 +29,8 @@ class Usage extends Task
->inject('dbForConsole') ->inject('dbForConsole')
->inject('influxdb') ->inject('influxdb')
->inject('register') ->inject('register')
->callback(fn ($type, $dbForConsole, $influxDB, $register) => $this->action($type, $dbForConsole, $influxDB, $register)); ->inject('logError')
->callback(fn ($type, $dbForConsole, $influxDB, $register, $logError) => $this->action($type, $dbForConsole, $influxDB, $register, $logError));
} }
@ -70,19 +71,19 @@ class Usage extends Task
}, $interval); }, $interval);
} }
public function action(string $type, UtopiaDatabase $dbForConsole, InfluxDatabase $influxDB, Registry $register) public function action(string $type, UtopiaDatabase $dbForConsole, InfluxDatabase $influxDB, Registry $register, callable $logError)
{ {
Console::title('Usage Aggregation V1'); Console::title('Usage Aggregation V1');
Console::success(APP_NAME . ' usage aggregation process v1 has started'); Console::success(APP_NAME . ' usage aggregation process v1 has started');
$logError = fn(Throwable $error, string $action = 'syncUsageStats') => $this->logError($register, $error, "usage", $action); $errorLogger = fn(Throwable $error, string $action = 'syncUsageStats') => $logError($register, $error, "usage", $action);
switch ($type) { switch ($type) {
case 'timeseries': case 'timeseries':
$this->aggregateTimeseries($dbForConsole, $influxDB, $logError); $this->aggregateTimeseries($dbForConsole, $influxDB, $errorLogger);
break; break;
case 'database': case 'database':
$this->aggregateDatabase($dbForConsole, $logError); $this->aggregateDatabase($dbForConsole, $errorLogger);
break; break;
default: default:
Console::error("Unsupported usage aggregation type"); Console::error("Unsupported usage aggregation type");

View file

@ -2,53 +2,15 @@
namespace Appwrite\Platform; namespace Appwrite\Platform;
use Utopia\Database\Database;
use Utopia\Platform\Action; use Utopia\Platform\Action;
use Exception; use Exception;
use InfluxDB\Database as InfluxDatabase;
use Utopia\App; use Utopia\App;
use Utopia\Cache\Adapter\Redis as RedisCache;
use Utopia\Cache\Cache;
use Utopia\CLI\Console; use Utopia\CLI\Console;
use Utopia\Database\Adapter\MariaDB;
use Utopia\Registry\Registry; use Utopia\Registry\Registry;
use Utopia\Logger\Log; use Utopia\Logger\Log;
use Throwable; use Throwable;
abstract class Task extends Action abstract class Task extends Action
{ {
protected function logError(Registry $register, Throwable $error, string $namespace, string $action)
{
$logger = $register->get('logger');
if ($logger) {
$version = App::getEnv('_APP_VERSION', 'UNKNOWN');
$log = new Log();
$log->setNamespace($namespace);
$log->setServer(\gethostname());
$log->setVersion($version);
$log->setType(Log::TYPE_ERROR);
$log->setMessage($error->getMessage());
$log->addTag('code', $error->getCode());
$log->addTag('verboseType', get_class($error));
$log->addExtra('file', $error->getFile());
$log->addExtra('line', $error->getLine());
$log->addExtra('trace', $error->getTraceAsString());
$log->addExtra('detailedTrace', $error->getTrace());
$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('Usage stats log pushed with status code: ' . $responseCode);
}
Console::warning("Failed: {$error->getMessage()}");
Console::warning($error->getTraceAsString());
}
} }