%PDF- %PDF-
| Direktori : /www/varak.net/nextcloud.varak.net/apps/app_api/lib/BackgroundJob/ |
| Current File : //www/varak.net/nextcloud.varak.net/apps/app_api/lib/BackgroundJob/ExAppInitStatusCheckJob.php |
<?php
declare(strict_types=1);
namespace OCA\AppAPI\BackgroundJob;
use OCA\AppAPI\AppInfo\Application;
use OCA\AppAPI\Db\ExAppMapper;
use OCA\AppAPI\Service\AppAPIService;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\BackgroundJob\TimedJob;
use OCP\DB\Exception;
use OCP\IConfig;
class ExAppInitStatusCheckJob extends TimedJob {
private const everyMinuteInterval = 60;
public function __construct(
ITimeFactory $time,
private readonly ExAppMapper $mapper,
private readonly AppAPIService $service,
private readonly IConfig $config,
) {
parent::__construct($time);
$this->setInterval(self::everyMinuteInterval);
}
protected function run($argument): void {
// Iterate over all ExApp and check for status.init_start_time if it is older than init_timeout minutes
// set status.progress=0 and status.error message with timeout error
try {
$exApps = $this->mapper->findAll();
$initTimeoutMinutesSetting = intval($this->config->getAppValue(Application::APP_ID, 'init_timeout', '40'));
foreach ($exApps as $exApp) {
$status = $exApp->getStatus();
if (isset($status['init']) && $status['init'] !== 100) {
if (!isset($status['init_start_time'])) {
continue;
}
if ($exApp->getAppid() === Application::TEST_DEPLOY_APPID) {
// Check for smaller timeout for test deploy app
$initTimeoutMinutes = 0.5;
} else {
$initTimeoutMinutes = $initTimeoutMinutesSetting;
}
if ((time() >= ($status['init_start_time'] + $initTimeoutMinutes * 60)) && (empty($status['error']))) {
$this->service->setAppInitProgress(
$exApp, 0, sprintf('ExApp %s initialization timed out (%sm)', $exApp->getAppid(), $initTimeoutMinutes * 60)
);
}
}
}
} catch (Exception) {
}
}
}