Skip to content

Commit

Permalink
feat: Add FPM statistics
Browse files Browse the repository at this point in the history
Signed-off-by: Côme Chilliet <[email protected]>
  • Loading branch information
come-nc committed Jan 23, 2025
1 parent 58d37b5 commit 3b3e25d
Show file tree
Hide file tree
Showing 4 changed files with 133 additions and 64 deletions.
52 changes: 16 additions & 36 deletions lib/Controller/ApiController.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
use OCA\ServerInfo\DatabaseStatistics;
use OCA\ServerInfo\Os;
use OCA\ServerInfo\PhpStatistics;
use OCA\ServerInfo\FpmStatistics;
use OCA\ServerInfo\SessionStatistics;
use OCA\ServerInfo\ShareStatistics;
use OCA\ServerInfo\StorageStatistics;
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
50 changes: 50 additions & 0 deletions lib/FpmStatistics.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?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;

/**
* @package OCA\Survey_Client\Categories
*/
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 @@ -13,6 +13,7 @@
use OCA\ServerInfo\DatabaseStatistics;
use OCA\ServerInfo\Os;
use OCA\ServerInfo\PhpStatistics;
use OCA\ServerInfo\FpmStatistics;
use OCA\ServerInfo\SessionStatistics;
use OCA\ServerInfo\ShareStatistics;
use OCA\ServerInfo\StorageStatistics;
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 @@ -369,6 +369,61 @@ function FormatMegabytes(int $byte): string {
</p>
<?php endif; ?>
</div>
<?php if ($_['fpm'] !== false): ?>
<div class="infobox">
<div class="fpm-wrapper">
<h3><?php p($l->t('FPM')); ?></h3>
<p>
<?php p($l->t('Pool:')); ?>
<em id="fpmPool"><?php p($_['fpm']['pool']); ?></em>
</p>
<p>
<?php p($l->t('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 reached:')); ?>
<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>

Expand Down

0 comments on commit 3b3e25d

Please sign in to comment.