error logger in resources
This commit is contained in:
parent
e7a7267c9f
commit
4acd10f2e1
3 changed files with 45 additions and 44 deletions
38
app/cli.php
38
app/cli.php
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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");
|
||||||
|
|
|
@ -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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue