1
0
Fork 0
mirror of https://github.com/Findus23/matomo-DiagnosticsExtended.git synced 2024-09-19 16:03:46 +02:00
matomo-DiagnosticsExtended/Diagnostic/OpcacheCheck.php
2021-04-12 17:28:42 +02:00

111 lines
3.9 KiB
PHP

<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\DiagnosticsExtended\Diagnostic;
use Piwik\Piwik;
use Piwik\Plugins\Diagnostics\Diagnostic\Diagnostic;
use Piwik\Plugins\Diagnostics\Diagnostic\DiagnosticResult;
use Piwik\Plugins\Diagnostics\Diagnostic\DiagnosticResultItem;
use Piwik\Plugins\DiagnosticsExtended\Utils;
use Psr\Log\LoggerInterface;
class OpcacheCheck implements Diagnostic
{
private const MEGABYTE = 1024 * 1024;
/**
* @var LoggerInterface
*/
private $logger;
/**
* @var string
*/
private $label;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
$this->label = "🧪 " . "OPcache";
}
/**
* @return DiagnosticResult[]
*/
public function execute()
{
$result = new DiagnosticResult($this->label);
if (!Utils::booleanIni("opcache.enable")) {
$result->addItem(new DiagnosticResultItem(
DiagnosticResult::STATUS_WARNING,
Piwik::translate("DiagnosticsExtended_OpcacheCheckOpcacheDisabled")
));
return [$result];
} else {
$status = opcache_get_status();
$memoryUsage = $status["memory_usage"];
$interned = $status["interned_strings_usage"];
$statistics = $status["opcache_statistics"];
$result->addItem(new DiagnosticResultItem(
DiagnosticResult::STATUS_OK,
Piwik::translate("DiagnosticsExtended_OpcacheCheckOpcacheEnabled", [
round($memoryUsage["used_memory"] / self::MEGABYTE),
round(($memoryUsage["used_memory"] + $memoryUsage["free_memory"]) / self::MEGABYTE),
round($memoryUsage["current_wasted_percentage"] * 100, 2),
round($interned["used_memory"] / self::MEGABYTE),
round($interned["buffer_size"] / self::MEGABYTE),
round($statistics["opcache_hit_rate"])
])
));
}
if (!Utils::booleanIni("opcache.save_comments")) {
$result->addItem(new DiagnosticResultItem(
DiagnosticResult::STATUS_ERROR,
Piwik::translate("DiagnosticsExtended_OpcacheCheckSaveComments")
));
}
$minimum_files = 7963;
if (Utils::intIni("opcache.max_accelerated_files") <= $minimum_files) {
$result->addItem(new DiagnosticResultItem(
DiagnosticResult::STATUS_WARNING,
Piwik::translate("DiagnosticsExtended_OpcacheCheckMaxFiles", [$minimum_files])
));
}
if (Utils::intIni("opcache.memory_consumption") < 128) {
$result->addItem(new DiagnosticResultItem(
DiagnosticResult::STATUS_WARNING,
Piwik::translate("DiagnosticsExtended_OpcacheCheckMemory")
));
}
if (Utils::intIni("opcache.interned_strings_buffer") < 8) {
$result->addItem(new DiagnosticResultItem(
DiagnosticResult::STATUS_WARNING,
Piwik::translate("DiagnosticsExtended_OpcacheCheckInternedStrings")
));
}
if (!Utils::intIni("opcache.validate_timestamps")) {
$result->addItem(new DiagnosticResultItem(
DiagnosticResult::STATUS_INFORMATIONAL,
Piwik::translate("DiagnosticsExtended_OpcacheCheckValidateTimestamps")
));
}
$jit = ini_get("opcache.jit");
if (PHP_MAJOR_VERSION >= 8 && (!$jit || $jit == "0" || $jit == "off")) {
$result->addItem(new DiagnosticResultItem(
DiagnosticResult::STATUS_INFORMATIONAL,
Piwik::translate("DiagnosticsExtended_OpcacheCheckJIT")
));
}
return [$result];
}
}