appwrite/src/Appwrite/Platform/Tasks/StatsResources.php

82 lines
2.2 KiB
PHP
Raw Normal View History

2025-01-27 04:33:33 +00:00
<?php
namespace Appwrite\Platform\Tasks;
use Appwrite\Event\StatsResources as EventStatsResources;
2025-01-27 04:33:33 +00:00
use Appwrite\Platform\Action;
use Utopia\CLI\Console;
use Utopia\Database\Database;
use Utopia\Database\DateTime;
use Utopia\Database\Query;
use Utopia\Database\Validator\Authorization;
use Utopia\System\System;
/**
* Usage count
*
* Runs every hour, schedules project
* for aggregating resource count
*/
class StatsResources extends Action
2025-01-27 04:33:33 +00:00
{
/**
* Log Error Callback
*
* @var callable
*/
protected mixed $logError;
/**
* Console DB
*
* @var Database
*/
protected Database $dbForPlatform;
public static function getName()
{
return 'stats-resources';
2025-01-27 04:33:33 +00:00
}
public function __construct()
{
$this
->desc('Schedules projects for usage count')
->inject('dbForPlatform')
->inject('logError')
->inject('queueForStatsResources')
->callback([$this, 'action']);
2025-01-27 04:33:33 +00:00
}
2025-02-05 09:27:36 +00:00
public function action(Database $dbForPlatform, callable $logError, EventStatsResources $queue): void
2025-01-27 04:33:33 +00:00
{
$this->logError = $logError;
$this->dbForPlatform = $dbForPlatform;
2025-01-30 04:15:03 +00:00
Console::title("Stats resources V1");
2025-01-27 04:33:33 +00:00
2025-01-30 04:15:03 +00:00
Console::success('Stats resources: started');
2025-01-27 04:33:33 +00:00
2025-01-30 04:15:03 +00:00
$interval = (int) System::getEnv('_APP_STATS_RESOURCES_INTERVAL', '3600');
2025-02-05 09:27:36 +00:00
Console::loop(function () use ($queue) {
Authorization::disable();
Authorization::setDefaultStatus(false);
2025-02-06 03:58:46 +00:00
$last24Hours = (new \DateTime())->sub(\DateInterval::createFromDateString('24 hours'));
2025-02-05 09:27:36 +00:00
/**
* For each project that were accessed in last 24 hours
*/
$this->foreachDocument($this->dbForPlatform, 'projects', [
Query::greaterThanEqual('accessedAt', DateTime::format($last24Hours))
], function ($project) use ($queue) {
$queue
->setProject($project)
->trigger();
Console::success('project: ' . $project->getId() . '(' . $project->getInternalId() . ')' . ' queued');
});
2025-01-27 04:33:33 +00:00
}, $interval);
2025-01-30 04:15:03 +00:00
Console::log("Stats resources: exited");
2025-01-27 04:33:33 +00:00
}
}