mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-21 09:35:49 +02:00
Make update checking mechanism more resilient against connection errors
This commit is contained in:
parent
99ee05a90f
commit
eb46ea19e3
1 changed files with 30 additions and 10 deletions
|
@ -23,7 +23,9 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Services\System;
|
namespace App\Services\System;
|
||||||
|
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
use Shivas\VersioningBundle\Service\VersionManagerInterface;
|
use Shivas\VersioningBundle\Service\VersionManagerInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\Attribute\Autowire;
|
||||||
use Symfony\Contracts\Cache\CacheInterface;
|
use Symfony\Contracts\Cache\CacheInterface;
|
||||||
use Symfony\Contracts\Cache\ItemInterface;
|
use Symfony\Contracts\Cache\ItemInterface;
|
||||||
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
use Symfony\Contracts\HttpClient\HttpClientInterface;
|
||||||
|
@ -41,7 +43,8 @@ class UpdateAvailableManager
|
||||||
|
|
||||||
public function __construct(private readonly HttpClientInterface $httpClient,
|
public function __construct(private readonly HttpClientInterface $httpClient,
|
||||||
private readonly CacheInterface $updateCache, private readonly VersionManagerInterface $versionManager,
|
private readonly CacheInterface $updateCache, private readonly VersionManagerInterface $versionManager,
|
||||||
private readonly bool $check_for_updates)
|
private readonly bool $check_for_updates, private readonly LoggerInterface $logger,
|
||||||
|
#[Autowire(param: 'kernel.debug')] private readonly bool $is_dev_mode)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -107,17 +110,34 @@ class UpdateAvailableManager
|
||||||
|
|
||||||
return $this->updateCache->get(self::CACHE_KEY, function (ItemInterface $item) {
|
return $this->updateCache->get(self::CACHE_KEY, function (ItemInterface $item) {
|
||||||
$item->expiresAfter(self::CACHE_TTL);
|
$item->expiresAfter(self::CACHE_TTL);
|
||||||
$response = $this->httpClient->request('GET', self::API_URL);
|
try {
|
||||||
$result = $response->toArray();
|
$response = $this->httpClient->request('GET', self::API_URL);
|
||||||
$tag_name = $result['tag_name'];
|
$result = $response->toArray();
|
||||||
|
$tag_name = $result['tag_name'];
|
||||||
|
|
||||||
// Remove the leading 'v' from the tag name
|
// Remove the leading 'v' from the tag name
|
||||||
$version = substr($tag_name, 1);
|
$version = substr($tag_name, 1);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'version' => $version,
|
'version' => $version,
|
||||||
'url' => $result['html_url'],
|
'url' => $result['html_url'],
|
||||||
];
|
];
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
//When we are in dev mode, throw the exception, otherwise just silently log it
|
||||||
|
if ($this->is_dev_mode) {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
|
||||||
|
//In the case of an error, try it again after half of the cache time
|
||||||
|
$item->expiresAfter(self::CACHE_TTL / 2);
|
||||||
|
|
||||||
|
$this->logger->error('Checking for updates failed: ' . $e->getMessage());
|
||||||
|
|
||||||
|
return [
|
||||||
|
'version' => '0.0.1',
|
||||||
|
'url' => 'update-checking-error'
|
||||||
|
];
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue