mirror of
https://github.com/nextcloud/server.git
synced 2026-05-14 09:29:52 -04:00
Merge pull request #39524 from nextcloud/backport/39264/stable25
[stable25] Add instance category while checking new updates
This commit is contained in:
commit
23dbc96ffe
4 changed files with 85 additions and 77 deletions
|
|
@ -30,7 +30,6 @@ use OC\BackgroundJob\TimedJob;
|
|||
use OC\Installer;
|
||||
use OC\Updater\VersionCheck;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\Http\Client\IClientService;
|
||||
use OCP\IConfig;
|
||||
use OCP\IGroup;
|
||||
use OCP\IGroupManager;
|
||||
|
|
@ -39,33 +38,24 @@ use OCP\Notification\IManager;
|
|||
class BackgroundJob extends TimedJob {
|
||||
protected $connectionNotifications = [3, 7, 14, 30];
|
||||
|
||||
/** @var IConfig */
|
||||
protected $config;
|
||||
|
||||
/** @var IManager */
|
||||
protected $notificationManager;
|
||||
|
||||
/** @var IGroupManager */
|
||||
protected $groupManager;
|
||||
|
||||
/** @var IAppManager */
|
||||
protected $appManager;
|
||||
|
||||
/** @var IClientService */
|
||||
protected $client;
|
||||
|
||||
/** @var Installer */
|
||||
protected $installer;
|
||||
protected IConfig $config;
|
||||
protected IManager $notificationManager;
|
||||
protected IGroupManager $groupManager;
|
||||
protected IAppManager $appManager;
|
||||
protected Installer $installer;
|
||||
protected VersionCheck $versionCheck;
|
||||
|
||||
/** @var string[] */
|
||||
protected $users;
|
||||
|
||||
public function __construct(IConfig $config,
|
||||
IManager $notificationManager,
|
||||
IGroupManager $groupManager,
|
||||
IAppManager $appManager,
|
||||
IClientService $client,
|
||||
Installer $installer) {
|
||||
public function __construct(
|
||||
IConfig $config,
|
||||
IManager $notificationManager,
|
||||
IGroupManager $groupManager,
|
||||
IAppManager $appManager,
|
||||
Installer $installer,
|
||||
VersionCheck $versionCheck
|
||||
) {
|
||||
// Run once a day
|
||||
$this->setInterval(60 * 60 * 24);
|
||||
|
||||
|
|
@ -73,8 +63,8 @@ class BackgroundJob extends TimedJob {
|
|||
$this->notificationManager = $notificationManager;
|
||||
$this->groupManager = $groupManager;
|
||||
$this->appManager = $appManager;
|
||||
$this->client = $client;
|
||||
$this->installer = $installer;
|
||||
$this->versionCheck = $versionCheck;
|
||||
}
|
||||
|
||||
protected function run($argument) {
|
||||
|
|
@ -101,12 +91,10 @@ class BackgroundJob extends TimedJob {
|
|||
return;
|
||||
}
|
||||
|
||||
$updater = $this->createVersionCheck();
|
||||
|
||||
$status = $updater->check();
|
||||
$status = $this->versionCheck->check();
|
||||
if ($status === false) {
|
||||
$errors = 1 + (int) $this->config->getAppValue('updatenotification', 'update_check_errors', 0);
|
||||
$this->config->setAppValue('updatenotification', 'update_check_errors', $errors);
|
||||
$errors = 1 + (int) $this->config->getAppValue('updatenotification', 'update_check_errors', '0');
|
||||
$this->config->setAppValue('updatenotification', 'update_check_errors', (string) $errors);
|
||||
|
||||
if (\in_array($errors, $this->connectionNotifications, true)) {
|
||||
$this->sendErrorNotifications($errors);
|
||||
|
|
@ -255,16 +243,6 @@ class BackgroundJob extends TimedJob {
|
|||
$this->notificationManager->markProcessed($notification);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return VersionCheck
|
||||
*/
|
||||
protected function createVersionCheck(): VersionCheck {
|
||||
return new VersionCheck(
|
||||
$this->client,
|
||||
$this->config
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ use OC\Installer;
|
|||
use OC\Updater\VersionCheck;
|
||||
use OCA\UpdateNotification\Notification\BackgroundJob;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\Http\Client\IClientService;
|
||||
use OCP\IConfig;
|
||||
use OCP\IGroup;
|
||||
use OCP\IGroupManager;
|
||||
|
|
@ -50,10 +49,10 @@ class BackgroundJobTest extends TestCase {
|
|||
protected $groupManager;
|
||||
/** @var IAppManager|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $appManager;
|
||||
/** @var IClientService|\PHPUnit\Framework\MockObject\MockObject */
|
||||
protected $client;
|
||||
/** @var Installer|\PHPUnit\Framework\MockObject\MockObject */
|
||||
/** @var Installer|MockObject */
|
||||
protected $installer;
|
||||
/** @var VersionCheck|MockObject */
|
||||
protected $versionCheck;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
|
@ -62,8 +61,8 @@ class BackgroundJobTest extends TestCase {
|
|||
$this->notificationManager = $this->createMock(IManager::class);
|
||||
$this->groupManager = $this->createMock(IGroupManager::class);
|
||||
$this->appManager = $this->createMock(IAppManager::class);
|
||||
$this->client = $this->createMock(IClientService::class);
|
||||
$this->installer = $this->createMock(Installer::class);
|
||||
$this->versionCheck = $this->createMock(VersionCheck::class);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -77,8 +76,8 @@ class BackgroundJobTest extends TestCase {
|
|||
$this->notificationManager,
|
||||
$this->groupManager,
|
||||
$this->appManager,
|
||||
$this->client,
|
||||
$this->installer
|
||||
$this->installer,
|
||||
$this->versionCheck,
|
||||
);
|
||||
}
|
||||
{
|
||||
|
|
@ -88,8 +87,8 @@ class BackgroundJobTest extends TestCase {
|
|||
$this->notificationManager,
|
||||
$this->groupManager,
|
||||
$this->appManager,
|
||||
$this->client,
|
||||
$this->installer,
|
||||
$this->versionCheck,
|
||||
])
|
||||
->setMethods($methods)
|
||||
->getMock();
|
||||
|
|
@ -154,7 +153,6 @@ class BackgroundJobTest extends TestCase {
|
|||
public function testCheckCoreUpdate(string $channel, $versionCheck, $version, $readableVersion, $errorDays) {
|
||||
$job = $this->getJob([
|
||||
'getChannel',
|
||||
'createVersionCheck',
|
||||
'createNotifications',
|
||||
'clearErrorNotifications',
|
||||
'sendErrorNotifications',
|
||||
|
|
@ -165,17 +163,12 @@ class BackgroundJobTest extends TestCase {
|
|||
->willReturn($channel);
|
||||
|
||||
if ($versionCheck === null) {
|
||||
$job->expects($this->never())
|
||||
->method('createVersionCheck');
|
||||
$this->versionCheck->expects($this->never())
|
||||
->method('check');
|
||||
} else {
|
||||
$check = $this->createMock(VersionCheck::class);
|
||||
$check->expects($this->once())
|
||||
$this->versionCheck->expects($this->once())
|
||||
->method('check')
|
||||
->willReturn($versionCheck);
|
||||
|
||||
$job->expects($this->once())
|
||||
->method('createVersionCheck')
|
||||
->willReturn($check);
|
||||
}
|
||||
|
||||
if ($version === null) {
|
||||
|
|
|
|||
|
|
@ -28,27 +28,28 @@ namespace OC\Updater;
|
|||
|
||||
use OCP\Http\Client\IClientService;
|
||||
use OCP\IConfig;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Support\Subscription\IRegistry;
|
||||
use OCP\Util;
|
||||
|
||||
class VersionCheck {
|
||||
private IClientService $clientService;
|
||||
private IConfig $config;
|
||||
private IUserManager $userManager;
|
||||
private IRegistry $registry;
|
||||
|
||||
/** @var IClientService */
|
||||
private $clientService;
|
||||
|
||||
/** @var IConfig */
|
||||
private $config;
|
||||
|
||||
/**
|
||||
* @param IClientService $clientService
|
||||
* @param IConfig $config
|
||||
*/
|
||||
public function __construct(IClientService $clientService,
|
||||
IConfig $config) {
|
||||
public function __construct(
|
||||
IClientService $clientService,
|
||||
IConfig $config,
|
||||
IUserManager $userManager,
|
||||
IRegistry $registry
|
||||
) {
|
||||
$this->clientService = $clientService;
|
||||
$this->config = $config;
|
||||
$this->userManager = $userManager;
|
||||
$this->registry = $registry;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if a new version is available
|
||||
*
|
||||
|
|
@ -82,6 +83,8 @@ class VersionCheck {
|
|||
$version['php_major'] = PHP_MAJOR_VERSION;
|
||||
$version['php_minor'] = PHP_MINOR_VERSION;
|
||||
$version['php_release'] = PHP_RELEASE_VERSION;
|
||||
$version['category'] = $this->computeCategory();
|
||||
$version['isSubscriber'] = (int) $this->registry->delegateHasValidSubscription();
|
||||
$versionString = implode('x', $version);
|
||||
|
||||
//fetch xml data from updater
|
||||
|
|
@ -131,4 +134,25 @@ class VersionCheck {
|
|||
$response = $client->get($url);
|
||||
return $response->getBody();
|
||||
}
|
||||
|
||||
private function computeCategory(): int {
|
||||
$categoryBoundaries = [
|
||||
100,
|
||||
500,
|
||||
1000,
|
||||
5000,
|
||||
10000,
|
||||
100000,
|
||||
1000000,
|
||||
];
|
||||
|
||||
$nbUsers = $this->userManager->countSeenUsers();
|
||||
foreach ($categoryBoundaries as $categoryId => $boundary) {
|
||||
if ($nbUsers <= $boundary) {
|
||||
return $categoryId;
|
||||
}
|
||||
}
|
||||
|
||||
return count($categoryBoundaries);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ namespace Test\Updater;
|
|||
use OC\Updater\VersionCheck;
|
||||
use OCP\Http\Client\IClientService;
|
||||
use OCP\IConfig;
|
||||
use OCP\IUserManager;
|
||||
use OCP\Support\Subscription\IRegistry;
|
||||
use OCP\Util;
|
||||
|
||||
class VersionCheckTest extends \Test\TestCase {
|
||||
|
|
@ -32,6 +34,8 @@ class VersionCheckTest extends \Test\TestCase {
|
|||
private $config;
|
||||
/** @var VersionCheck | \PHPUnit\Framework\MockObject\MockObject*/
|
||||
private $updater;
|
||||
/** @var IRegistry | \PHPUnit\Framework\Mo2ckObject\MockObject*/
|
||||
private $registry;
|
||||
|
||||
protected function setUp(): void {
|
||||
parent::setUp();
|
||||
|
|
@ -42,9 +46,18 @@ class VersionCheckTest extends \Test\TestCase {
|
|||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->registry = $this->createMock(IRegistry::class);
|
||||
$this->registry
|
||||
->method('delegateHasValidSubscription')
|
||||
->willReturn(false);
|
||||
$this->updater = $this->getMockBuilder(VersionCheck::class)
|
||||
->setMethods(['getUrlContent'])
|
||||
->setConstructorArgs([$clientService, $this->config])
|
||||
->setConstructorArgs([
|
||||
$clientService,
|
||||
$this->config,
|
||||
$this->createMock(IUserManager::class),
|
||||
$this->registry,
|
||||
])
|
||||
->getMock();
|
||||
}
|
||||
|
||||
|
|
@ -53,7 +66,7 @@ class VersionCheckTest extends \Test\TestCase {
|
|||
* @return string
|
||||
*/
|
||||
private function buildUpdateUrl($baseUrl) {
|
||||
return $baseUrl . '?version='.implode('x', Util::getVersion()).'xinstalledatxlastupdatedatx'.\OC_Util::getChannel().'xxx'.PHP_MAJOR_VERSION.'x'.PHP_MINOR_VERSION.'x'.PHP_RELEASE_VERSION;
|
||||
return $baseUrl . '?version='.implode('x', Util::getVersion()).'xinstalledatxlastupdatedatx'.\OC_Util::getChannel().'xxx'.PHP_MAJOR_VERSION.'x'.PHP_MINOR_VERSION.'x'.PHP_RELEASE_VERSION.'x0x0';
|
||||
}
|
||||
|
||||
public function testCheckInCache() {
|
||||
|
|
@ -114,7 +127,7 @@ class VersionCheckTest extends \Test\TestCase {
|
|||
0,
|
||||
'installedat',
|
||||
'installedat',
|
||||
'lastupdatedat'
|
||||
'lastupdatedat',
|
||||
);
|
||||
$this->config
|
||||
->expects($this->once())
|
||||
|
|
@ -166,7 +179,7 @@ class VersionCheckTest extends \Test\TestCase {
|
|||
0,
|
||||
'installedat',
|
||||
'installedat',
|
||||
'lastupdatedat'
|
||||
'lastupdatedat',
|
||||
);
|
||||
$this->config
|
||||
->expects($this->once())
|
||||
|
|
@ -220,7 +233,7 @@ class VersionCheckTest extends \Test\TestCase {
|
|||
0,
|
||||
'installedat',
|
||||
'installedat',
|
||||
'lastupdatedat'
|
||||
'lastupdatedat',
|
||||
);
|
||||
$this->config
|
||||
->expects($this->once())
|
||||
|
|
@ -273,7 +286,7 @@ class VersionCheckTest extends \Test\TestCase {
|
|||
0,
|
||||
'installedat',
|
||||
'installedat',
|
||||
'lastupdatedat'
|
||||
'lastupdatedat',
|
||||
);
|
||||
$this->config
|
||||
->expects($this->once())
|
||||
|
|
@ -327,7 +340,7 @@ class VersionCheckTest extends \Test\TestCase {
|
|||
0,
|
||||
'installedat',
|
||||
'installedat',
|
||||
'lastupdatedat'
|
||||
'lastupdatedat',
|
||||
);
|
||||
$this->config
|
||||
->expects($this->once())
|
||||
|
|
|
|||
Loading…
Reference in a new issue