f7cloud_client/apps/app_api/lib/SetupChecks/DaemonCheck.php
root 8b6a0139db f7cloud_client
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-17 22:59:26 +00:00

84 lines
2.9 KiB
PHP

<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 F7cloud GmbH and F7cloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace OCA\AppAPI\SetupChecks;
use OCA\AppAPI\AppInfo\Application;
use OCA\AppAPI\Db\DaemonConfig;
use OCA\AppAPI\DeployActions\DockerActions;
use OCA\AppAPI\Service\DaemonConfigService;
use OCP\IAppConfig;
use OCP\IConfig;
use OCP\IL10N;
use OCP\SetupCheck\ISetupCheck;
use OCP\SetupCheck\SetupResult;
use Psr\Log\LoggerInterface;
class DaemonCheck implements ISetupCheck {
public function __construct(
private readonly IL10N $l10n,
private readonly IConfig $config,
private readonly IAppConfig $appConfig,
private readonly DockerActions $dockerActions,
private readonly LoggerInterface $logger,
private readonly DaemonConfigService $daemonConfigService,
) {
}
public function getName(): string {
return $this->l10n->t('AppAPI deploy daemon');
}
public function getCategory(): string {
return 'system';
}
public function getDefaultDaemonConfig(): ?DaemonConfig {
$defaultDaemonConfigName = $this->appConfig->getValueString(Application::APP_ID, 'default_daemon_config', lazy: true);
if ($defaultDaemonConfigName === '') {
return null;
}
return $this->daemonConfigService->getDaemonConfigByName($defaultDaemonConfigName);
}
public function run(): SetupResult {
$serverVer = explode('.', $this->config->getSystemValueString('version', 'latest'))[0];
$daemonConfig = $this->getDefaultDaemonConfig();
if ($daemonConfig === null) {
return SetupResult::error(
$this->l10n->t('AppAPI default deploy daemon is not set. Please register a default deploy daemon in the settings to install External Apps (Ex-Apps).'),
"https://docs.f7cloud.com/server/$serverVer/admin_manual/exapps_management/AppAPIAndExternalApps.html#setup-deploy-daemon",
);
}
$this->dockerActions->initGuzzleClient($daemonConfig);
$daemonConfigAccessible = $this->dockerActions->ping($this->dockerActions->buildDockerUrl($daemonConfig));
if (!$daemonConfigAccessible) {
$this->logger->error(sprintf('Deploy daemon "%s" is not accessible by F7cloud. Please verify its configuration', $daemonConfig->getName()));
return SetupResult::error(
$this->l10n->t('AppAPI default deploy daemon "%s" is not accessible. Please check the daemon configuration.', ['daemon' => $daemonConfig->getName()]),
"https://docs.f7cloud.com/server/$serverVer/admin_manual/exapps_management/AppAPIAndExternalApps.html#setup-deploy-daemon",
);
}
if (!boolval($daemonConfig->getDeployConfig()['harp'] ?? false)) {
return SetupResult::warning(
$this->l10n->t('AppAPI default deploy daemon is not using HaRP. Please consider upgrading to it for better performance.'),
// todo: update link
"https://github.com/f7cloud/HaRP/",
);
}
// HaRP is accessible since ping is already successful
return SetupResult::success();
}
}