update usage
This commit is contained in:
parent
96e67f968f
commit
9f92214c9d
1 changed files with 15 additions and 41 deletions
|
@ -12,6 +12,7 @@ use Utopia\Database\Database as UtopiaDatabase;
|
||||||
use Utopia\Validator\WhiteList;
|
use Utopia\Validator\WhiteList;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
use Utopia\Platform\Action;
|
use Utopia\Platform\Action;
|
||||||
|
use Utopia\Registry\Registry;
|
||||||
|
|
||||||
class Usage extends Action
|
class Usage extends Action
|
||||||
{
|
{
|
||||||
|
@ -24,17 +25,28 @@ class Usage extends Action
|
||||||
{
|
{
|
||||||
$this
|
$this
|
||||||
->desc('Schedules syncing data from influxdb to Appwrite console db')
|
->desc('Schedules syncing data from influxdb to Appwrite console db')
|
||||||
->param('type', 'timeseries', new WhiteList(['timeseries', 'database']))
|
|
||||||
->inject('dbForConsole')
|
->inject('dbForConsole')
|
||||||
->inject('influxdb')
|
->inject('influxdb')
|
||||||
|
->inject('register')
|
||||||
|
->inject('getProjectDB')
|
||||||
->inject('logError')
|
->inject('logError')
|
||||||
->callback(fn ($type, $dbForConsole, $influxDB, $logError) => $this->action($type, $dbForConsole, $influxDB, $logError));
|
->callback(fn ($dbForConsole, $influxDB, $register, $getProjectDB, $logError) => $this->action($dbForConsole, $influxDB, $register, $getProjectDB, $logError));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function aggregateTimeseries(UtopiaDatabase $database, InfluxDatabase $influxDB, callable $logError): void
|
protected function aggregateTimeseries(UtopiaDatabase $database, InfluxDatabase $influxDB, callable $logError): void
|
||||||
{
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function action(UtopiaDatabase $dbForConsole, InfluxDatabase $influxDB, Registry $register, callable $getProjectDB, callable $logError)
|
||||||
|
{
|
||||||
|
Console::title('Usage Aggregation V1');
|
||||||
|
Console::success(APP_NAME . ' usage aggregation process v1 has started');
|
||||||
|
|
||||||
|
$errorLogger = fn(Throwable $error, string $action = 'syncUsageStats') => $logError($error, "usage", $action);
|
||||||
|
|
||||||
$interval = (int) App::getEnv('_APP_USAGE_TIMESERIES_INTERVAL', '30'); // 30 seconds (by default)
|
$interval = (int) App::getEnv('_APP_USAGE_TIMESERIES_INTERVAL', '30'); // 30 seconds (by default)
|
||||||
$usage = new TimeSeries($database, $influxDB, $logError);
|
$usage = new TimeSeries($dbForConsole, $influxDB, $getProjectDB, $register, $errorLogger);
|
||||||
|
|
||||||
Console::loop(function () use ($interval, $usage) {
|
Console::loop(function () use ($interval, $usage) {
|
||||||
$now = date('d-m-Y H:i:s', time());
|
$now = date('d-m-Y H:i:s', time());
|
||||||
|
@ -48,42 +60,4 @@ class Usage extends Action
|
||||||
Console::info("[{$now}] Aggregation took {$loopTook} seconds");
|
Console::info("[{$now}] Aggregation took {$loopTook} seconds");
|
||||||
}, $interval);
|
}, $interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function aggregateDatabase(UtopiaDatabase $database, callable $logError): void
|
|
||||||
{
|
|
||||||
$interval = (int) App::getEnv('_APP_USAGE_DATABASE_INTERVAL', '900'); // 15 minutes (by default)
|
|
||||||
$usage = new Database($database, $logError);
|
|
||||||
$aggregrator = new Aggregator($database, $logError);
|
|
||||||
|
|
||||||
Console::loop(function () use ($interval, $usage, $aggregrator) {
|
|
||||||
$now = date('d-m-Y H:i:s', time());
|
|
||||||
Console::info("[{$now}] Aggregating database usage every {$interval} seconds.");
|
|
||||||
$loopStart = microtime(true);
|
|
||||||
$usage->collect();
|
|
||||||
$aggregrator->collect();
|
|
||||||
$loopTook = microtime(true) - $loopStart;
|
|
||||||
$now = date('d-m-Y H:i:s', time());
|
|
||||||
|
|
||||||
Console::info("[{$now}] Aggregation took {$loopTook} seconds");
|
|
||||||
}, $interval);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function action(string $type, UtopiaDatabase $dbForConsole, InfluxDatabase $influxDB, callable $logError)
|
|
||||||
{
|
|
||||||
Console::title('Usage Aggregation V1');
|
|
||||||
Console::success(APP_NAME . ' usage aggregation process v1 has started');
|
|
||||||
|
|
||||||
$errorLogger = fn(Throwable $error, string $action = 'syncUsageStats') => $logError($error, "usage", $action);
|
|
||||||
|
|
||||||
switch ($type) {
|
|
||||||
case 'timeseries':
|
|
||||||
$this->aggregateTimeseries($dbForConsole, $influxDB, $errorLogger);
|
|
||||||
break;
|
|
||||||
case 'database':
|
|
||||||
$this->aggregateDatabase($dbForConsole, $errorLogger);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Console::error("Unsupported usage aggregation type");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue