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
6 changes: 6 additions & 0 deletions config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
<service id="PabloK\CacheStatsBundle\Application\StatsProvider\RealPathProvider" public="false" />
<service id="PabloK\CacheStatsBundle\Application\StatsProvider\OpcacheProvider" public="false" />
<service id="PabloK\CacheStatsBundle\Application\StatsProvider\ApcuProvider" public="false" />
<service id="PabloK\CacheStatsBundle\Application\StatsProvider\JitProvider" public="false" />

<service
id="PabloK\CacheStatsBundle\DataCollector\CacheStatsDataCollector"
Expand All @@ -28,6 +29,11 @@
key="$apcuProvider"
type="service"
/>
<argument
id="PabloK\CacheStatsBundle\Application\StatsProvider\JitProvider"
key="$jitProvider"
type="service"
/>

<tag
name="data_collector"
Expand Down
36 changes: 36 additions & 0 deletions src/Application/StatsProvider/JitProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

declare(strict_types=1);

namespace PabloK\CacheStatsBundle\Application\StatsProvider;

use PabloK\CacheStatsBundle\Application\Size;

final class JitProvider
{
public function provide(): JitStats
{
$opcacheEnabled = \filter_var(\ini_get('opcache.enable'), \FILTER_VALIDATE_BOOLEAN);
$jitEnabled = false;
$jitOn = false;
$bufferSize = Size::nullSize();
$bufferFree = Size::nullSize();

if ($opcacheEnabled) {
$jitStatus = \opcache_get_status(false)['jit'] ?? [];
$jitEnabled = \filter_var($jitStatus['enabled'] ?? false, \FILTER_VALIDATE_BOOLEAN);
$jitOn = \filter_var($jitStatus['on'] ?? false, \FILTER_VALIDATE_BOOLEAN);

if ($jitEnabled && $jitOn) {
$bufferSize = Size::fromBytes($jitStatus['buffer_size'] ?? 0);
$bufferFree = Size::fromBytes($jitStatus['buffer_free'] ?? 0);
}
}

return new JitStats(
$jitEnabled && $jitOn,
$bufferSize,
$bufferFree,
);
}
}
39 changes: 39 additions & 0 deletions src/Application/StatsProvider/JitStats.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<?php

declare(strict_types=1);

namespace PabloK\CacheStatsBundle\Application\StatsProvider;

use PabloK\CacheStatsBundle\Application\Size;

final class JitStats
{
private bool $enabled;
private Size $bufferSize;
private Size $bufferUsage;

public function __construct(
bool $enabled,
Size $bufferSize,
Size $bufferFree
) {
$this->enabled = $enabled;
$this->bufferSize = $bufferSize;
$this->bufferUsage = $bufferSize->subtract($bufferFree);
}

public function enabled(): bool
{
return $this->enabled;
}

public function bufferSize(): Size
{
return $this->bufferSize;
}

public function bufferUsage(): Size
{
return $this->bufferUsage;
}
}
31 changes: 21 additions & 10 deletions src/DataCollector/CacheStatsDataCollector.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

use PabloK\CacheStatsBundle\Application\StatsProvider\ApcuProvider;
use PabloK\CacheStatsBundle\Application\StatsProvider\ApcuStats;
use PabloK\CacheStatsBundle\Application\StatsProvider\JitProvider;
use PabloK\CacheStatsBundle\Application\StatsProvider\JitStats;
use PabloK\CacheStatsBundle\Application\StatsProvider\OpcacheProvider;
use PabloK\CacheStatsBundle\Application\StatsProvider\OpcacheStats;
use PabloK\CacheStatsBundle\Application\StatsProvider\RealPathProvider;
Expand All @@ -19,45 +21,49 @@ final class CacheStatsDataCollector extends DataCollector
private const REAL_PATH_KEY = 'realpath';
private const OPCACHE_KEY = 'opcache';
private const APCU_KEY = 'apcu';
private const JIT_KEY = 'jit';

/** @var RealPathProvider */
private $realPathProvider;
/** @var OpcacheProvider */
private $opcacheProvider;
/** @var ApcuProvider */
private $apcuProvider;
private RealPathProvider $realPathProvider;
private OpcacheProvider $opcacheProvider;
private ApcuProvider $apcuProvider;
private JitProvider $jitProvider;

public function __construct(
RealPathProvider $realPathProvider,
OpcacheProvider $opcacheProvider,
ApcuProvider $apcuProvider
ApcuProvider $apcuProvider,
JitProvider $jitProvider
) {
$this->realPathProvider = $realPathProvider;
$this->opcacheProvider = $opcacheProvider;
$this->apcuProvider = $apcuProvider;
$this->jitProvider = $jitProvider;
}

/**
* @inheritDoc
* @param null|\Throwable $exception
*/
public function collect(Request $request, Response $response, $exception = null)
public function collect(Request $request, Response $response, $exception = null): void
{
$this->data[self::REAL_PATH_KEY] = $this->realPathProvider
->provide();
$this->data[self::OPCACHE_KEY] = $this->opcacheProvider
->provide();
$this->data[self::APCU_KEY] = $this->apcuProvider
->provide();
$this->data[self::JIT_KEY] = $this->jitProvider
->provide()
;
}

/** @inheritDoc */
public function getName()
public function getName(): string
{
return 'pablok.cache_stats_bundle.cache_stats_collector';
}

public function reset()
public function reset(): void
{
$this->data = [];
}
Expand All @@ -76,4 +82,9 @@ public function apcuStats(): ApcuStats
{
return $this->data[self::APCU_KEY];
}

public function jitStats(): JitStats
{
return $this->data[self::JIT_KEY];
}
}
2 changes: 1 addition & 1 deletion src/DependencyInjection/PabloKCacheStatsExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

final class PabloKCacheStatsExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
public function load(array $configs, ContainerBuilder $container): void
{
$directory = \dirname(__DIR__, 2);
$fileLocator = new FileLocator("{$directory}/config");
Expand Down
15 changes: 15 additions & 0 deletions src/Resources/views/cache_stats.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,21 @@
{% endif %}
</div>

{% set jitEnabled = collector.jitStats.enabled %}
<div class="sf-toolbar-info-group">
{{ macros.toolbar_Header('JIT cache', jitEnabled) }}

{% if jitEnabled %}
{{
macros.megabytes_row(
'Cache usage',
collector.jitStats.bufferUsage.asMegabytes,
collector.jitStats.bufferSize.asMegabytes
)
}}
{% endif %}
</div>

{% set realPathEnabled = collector.realPathStats.enabled %}
<div class="sf-toolbar-info-group">
{{ macros.toolbar_Header('Realpath', realPathEnabled) }}
Expand Down