Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 16 additions & 36 deletions lib/Controller/ApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
namespace OCA\ServerInfo\Controller;

use OCA\ServerInfo\DatabaseStatistics;
use OCA\ServerInfo\FpmStatistics;
use OCA\ServerInfo\Os;
use OCA\ServerInfo\PhpStatistics;
use OCA\ServerInfo\SessionStatistics;
Expand All @@ -25,44 +26,22 @@
use OCP\IUserSession;

class ApiController extends OCSController {
private Os $os;
private IConfig $config;
private IGroupManager $groupManager;
private ?IUserSession $userSession;
private SystemStatistics $systemStatistics;
private StorageStatistics $storageStatistics;
private PhpStatistics $phpStatistics;
private DatabaseStatistics $databaseStatistics;
private ShareStatistics $shareStatistics;
private SessionStatistics $sessionStatistics;

/**
* ApiController constructor.
*/
public function __construct(string $appName,
public function __construct(
string $appName,
IRequest $request,
IConfig $config,
IGroupManager $groupManager,
?IUserSession $userSession,
Os $os,
SystemStatistics $systemStatistics,
StorageStatistics $storageStatistics,
PhpStatistics $phpStatistics,
DatabaseStatistics $databaseStatistics,
ShareStatistics $shareStatistics,
SessionStatistics $sessionStatistics) {
private IConfig $config,
private IGroupManager $groupManager,
private ?IUserSession $userSession,
private Os $os,
private SystemStatistics $systemStatistics,
private StorageStatistics $storageStatistics,
private PhpStatistics $phpStatistics,
private FpmStatistics $fpmStatistics,
private DatabaseStatistics $databaseStatistics,
private ShareStatistics $shareStatistics,
private SessionStatistics $sessionStatistics,
) {
parent::__construct($appName, $request);

$this->config = $config;
$this->groupManager = $groupManager;
$this->userSession = $userSession;
$this->os = $os;
$this->systemStatistics = $systemStatistics;
$this->storageStatistics = $storageStatistics;
$this->phpStatistics = $phpStatistics;
$this->databaseStatistics = $databaseStatistics;
$this->shareStatistics = $shareStatistics;
$this->sessionStatistics = $sessionStatistics;
}

/**
Expand Down Expand Up @@ -114,6 +93,7 @@ public function info(bool $skipApps = true, bool $skipUpdate = true): DataRespon
'server' => [
'webserver' => $this->getWebserver(),
'php' => $this->phpStatistics->getPhpStatistics(),
'fpm' => $this->fpmStatistics->getFpmStatistics(),
'database' => $this->databaseStatistics->getDatabaseStatistics()
],
'activeUsers' => $this->sessionStatistics->getSessionStatistics()
Expand Down
47 changes: 47 additions & 0 deletions lib/FpmStatistics.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

declare(strict_types=1);

/**
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

namespace OCA\ServerInfo;

use OCP\IDateTimeFormatter;

class FpmStatistics {
public function __construct(
private IDateTimeFormatter $dateTimeFormatter,
) {
}

/**
* Returns FPM statistics, with these keys:
* "pool"
* "process-manager"
* "start-time"
* "start-since"
* "accepted-conn"
* "listen-queue"
* "max-listen-queue"
* "listen-queue-len"
* "idle-processes"
* "active-processes"
* "total-processes"
* "max-active-processes"
* "max-children-reached"
* "slow-requests"
*
*/
public function getFpmStatistics(): array|false {
if (!function_exists('fpm_get_status')) {
return false;
}
$status = fpm_get_status();
$status['start-time'] = $this->dateTimeFormatter->formatDateTime($status['start-time']);
unset($status['procs']);
return $status;
}
}
40 changes: 12 additions & 28 deletions lib/Settings/AdminSettings.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
namespace OCA\ServerInfo\Settings;

use OCA\ServerInfo\DatabaseStatistics;
use OCA\ServerInfo\FpmStatistics;
use OCA\ServerInfo\Os;
use OCA\ServerInfo\PhpStatistics;
use OCA\ServerInfo\SessionStatistics;
Expand All @@ -24,37 +25,19 @@
use OCP\Settings\ISettings;

class AdminSettings implements ISettings {
private Os $os;
private IL10N $l;
private IURLGenerator $urlGenerator;
private StorageStatistics $storageStatistics;
private PhpStatistics $phpStatistics;
private DatabaseStatistics $databaseStatistics;
private ShareStatistics $shareStatistics;
private SessionStatistics $sessionStatistics;
private SystemStatistics $systemStatistics;

public function __construct(
Os $os,
IL10N $l,
IURLGenerator $urlGenerator,
StorageStatistics $storageStatistics,
PhpStatistics $phpStatistics,
DatabaseStatistics $databaseStatistics,
ShareStatistics $shareStatistics,
SessionStatistics $sessionStatistics,
SystemStatistics $systemStatistics,
private Os $os,
private IL10N $l,
private IURLGenerator $urlGenerator,
private StorageStatistics $storageStatistics,
private PhpStatistics $phpStatistics,
private FpmStatistics $fpmStatistics,
private DatabaseStatistics $databaseStatistics,
private ShareStatistics $shareStatistics,
private SessionStatistics $sessionStatistics,
private SystemStatistics $systemStatistics,
private IConfig $config,
) {
$this->os = $os;
$this->l = $l;
$this->urlGenerator = $urlGenerator;
$this->storageStatistics = $storageStatistics;
$this->phpStatistics = $phpStatistics;
$this->databaseStatistics = $databaseStatistics;
$this->shareStatistics = $shareStatistics;
$this->sessionStatistics = $sessionStatistics;
$this->systemStatistics = $systemStatistics;
}

public function getForm(): TemplateResponse {
Expand All @@ -71,6 +54,7 @@ public function getForm(): TemplateResponse {
'storage' => $this->storageStatistics->getStorageStatistics(),
'shares' => $this->shareStatistics->getShareStatistics(),
'php' => $this->phpStatistics->getPhpStatistics(),
'fpm' => $this->fpmStatistics->getFpmStatistics(),
'database' => $this->databaseStatistics->getDatabaseStatistics(),
'activeUsers' => $this->sessionStatistics->getSessionStatistics(),
'system' => $this->systemStatistics->getSystemStatistics(true, true),
Expand Down
55 changes: 55 additions & 0 deletions templates/settings-admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,61 @@ function FormatMegabytes(int $byte): string {
<?php endif; ?>
</div>
</div>
<?php if ($_['fpm'] !== false): ?>
<h2><?php p($l->t('FPM worker pool')); ?></h2>
<div class="infobox">
<div class="fpm-wrapper">
<p>
<?php p($l->t('Pool name:')); ?>
<em id="fpmPool"><?php p($_['fpm']['pool']); ?></em>
</p>
<p>
<?php p($l->t('Pool type:')); ?>
<em id="fpmType"><?php p($_['fpm']['process-manager']); ?></em>
</p>
<p>
<?php p($l->t('Start time:')); ?>
<em id="fpmStartTime"><?php p($_['fpm']['start-time']); ?></em>
</p>
<p>
<?php p($l->t('Accepted connections:')); ?>
<em id="fpmAcceptedConn"><?php p($_['fpm']['accepted-conn']); ?></em>
</p>
<p>
<?php p($l->t('Total processes:')); ?>
<em id="fpmTotalProcesses"><?php p($_['fpm']['total-processes']); ?></em>
</p>
<p>
<?php p($l->t('Active processes:')); ?>
<em id="fpmActiveProcesses"><?php p($_['fpm']['active-processes']); ?></em>
</p>
<p>
<?php p($l->t('Idle processes:')); ?>
<em id="fpmIdleProcesses"><?php p($_['fpm']['idle-processes']); ?></em>
</p>
<p>
<?php p($l->t('Listen queue:')); ?>
<em id="fpmListenQueue"><?php p($_['fpm']['listen-queue']); ?></em>
</p>
<p>
<?php p($l->t('Slow requests:')); ?>
<em id="fpmSlowRequests"><?php p($_['fpm']['slow-requests']); ?></em>
</p>
<p>
<?php p($l->t('Max listen queue:')); ?>
<em id="fpmMaxListenQueue"><?php p($_['fpm']['max-listen-queue']); ?></em>
</p>
<p>
<?php p($l->t('Max active processes:')); ?>
<em id="fpmMaxActiveProcesses"><?php p($_['fpm']['max-active-processes']); ?></em>
</p>
<p>
<?php p($l->t('Max children reached:')); ?>
<em id="fpmMaxChildrenReached"><?php p($_['fpm']['max-children-reached']); ?></em>
</p>
</div>
</div>
<?php endif; ?>
</div>

<div class="col col-6 col-m-12">
Expand Down
48 changes: 19 additions & 29 deletions tests/lib/ApiControllerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

use OCA\ServerInfo\Controller\ApiController;
use OCA\ServerInfo\DatabaseStatistics;
use OCA\ServerInfo\FpmStatistics;
use OCA\ServerInfo\Os;
use OCA\ServerInfo\PhpStatistics;
use OCA\ServerInfo\SessionStatistics;
Expand All @@ -23,37 +24,20 @@
use OCP\IRequest;
use OCP\IUser;
use OCP\IUserSession;
use PHPUnit\Framework\MockObject\MockObject;

class ApiControllerTest extends \Test\TestCase {
/** @var Os|\PHPUnit\Framework\MockObject\MockObject */
private $os;

/** @var IRequest|\PHPUnit\Framework\MockObject\MockObject */
private $request;

/** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
private $config;

/** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */
private $groupManager;

/** @var SystemStatistics|\PHPUnit\Framework\MockObject\MockObject */
private $systemStatistics;

/** @var StorageStatistics|\PHPUnit\Framework\MockObject\MockObject */
private $storageStatistics;

/** @var PhpStatistics|\PHPUnit\Framework\MockObject\MockObject */
private $phpStatistics;

/** @var DatabaseStatistics|\PHPUnit\Framework\MockObject\MockObject */
private $databaseStatistics;

/** @var ShareStatistics|\PHPUnit\Framework\MockObject\MockObject */
private $shareStatistics;

/** @var SessionStatistics|\PHPUnit\Framework\MockObject\MockObject */
private $sessionStatistics;
private Os&MockObject $os;
private IRequest&MockObject $request;
private IConfig&MockObject $config;
private IGroupManager&MockObject $groupManager;
private SystemStatistics&MockObject $systemStatistics;
private StorageStatistics&MockObject $storageStatistics;
private PhpStatistics&MockObject $phpStatistics;
private FpmStatistics&MockObject $fpmStatistics;
private DatabaseStatistics&MockObject $databaseStatistics;
private ShareStatistics&MockObject $shareStatistics;
private SessionStatistics&MockObject $sessionStatistics;

protected function setUp(): void {
parent::setUp();
Expand All @@ -65,6 +49,7 @@ protected function setUp(): void {
$this->systemStatistics = $this->createMock(SystemStatistics::class);
$this->storageStatistics = $this->createMock(StorageStatistics::class);
$this->phpStatistics = $this->createMock(PhpStatistics::class);
$this->fpmStatistics = $this->createMock(FpmStatistics::class);
$this->databaseStatistics = $this->createMock(DatabaseStatistics::class);
$this->shareStatistics = $this->createMock(ShareStatistics::class);
$this->sessionStatistics = $this->createMock(SessionStatistics::class);
Expand All @@ -81,6 +66,7 @@ private function getController($userSession) {
$this->systemStatistics,
$this->storageStatistics,
$this->phpStatistics,
$this->fpmStatistics,
$this->databaseStatistics,
$this->shareStatistics,
$this->sessionStatistics
Expand Down Expand Up @@ -203,6 +189,9 @@ public function testInfo() {
$this->phpStatistics->expects($this->once())
->method('getPhpStatistics')
->willReturn(['some_php' => 'some_value']);
$this->fpmStatistics->expects($this->once())
->method('getFpmStatistics')
->willReturn(['some_fpm' => 'some_value']);
$this->databaseStatistics->expects($this->once())
->method('getDatabaseStatistics')
->willReturn(['some_database' => 'some_value']);
Expand All @@ -223,6 +212,7 @@ public function testInfo() {
'server' => [
'webserver' => 'unknown',
'php' => ['some_php' => 'some_value'],
'fpm' => ['some_fpm' => 'some_value'],
'database' => ['some_database' => 'some_value'],
],
'activeUsers' => ['some_user' => 'some_value'],
Expand Down
Loading