Skip to content

Commit 4c83b3e

Browse files
committed
Fix #51
1 parent 68befc1 commit 4c83b3e

File tree

7 files changed

+83
-59
lines changed

7 files changed

+83
-59
lines changed

src/Admin.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use RobiNN\Pca\Dashboards\DashboardInterface;
1212

1313
class Admin {
14-
public const VERSION = '2.3.0';
14+
public const VERSION = '2.3.1';
1515

1616
/**
1717
* @var array<string, DashboardInterface>

src/Dashboards/APCu/APCuTrait.php

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
namespace RobiNN\Pca\Dashboards\APCu;
1010

11+
use APCUIterator;
1112
use RobiNN\Pca\Config;
1213
use RobiNN\Pca\Format;
1314
use RobiNN\Pca\Helpers;
@@ -185,30 +186,30 @@ public function getAllKeys(): array {
185186
$search = Http::get('s', '');
186187
$this->template->addGlobal('search_value', $search);
187188

188-
$info = apcu_cache_info();
189189
$keys = [];
190190
$time = time();
191191

192-
foreach ($info['cache_list'] as $key_data) {
193-
$key = $key_data['info'];
194-
195-
if (stripos($key, $search) !== false) {
196-
$keys[] = [
197-
'key' => $key,
198-
'mem_size' => $key_data['mem_size'],
199-
'num_hits' => $key_data['num_hits'],
200-
'access_time' => $key_data['access_time'],
201-
'creation_time' => $key_data['creation_time'],
202-
'ttl' => $key_data['ttl'] === 0 ? 'Doesn\'t expire' : $key_data['creation_time'] + $key_data['ttl'] - $time,
203-
];
192+
$iterator = new APCUIterator('/.*/', APC_ITER_ALL, 0, APC_LIST_ACTIVE);
193+
194+
foreach ($iterator as $item) {
195+
$key = $item['key'];
196+
197+
if ($search !== '' && stripos($key, $search) === false) {
198+
continue;
204199
}
205-
}
206200

207-
if (Http::get('view', Config::get('list-view', 'table')) === 'tree') {
208-
return $this->keysTreeView($keys);
201+
$ttl = $item['ttl'];
202+
$keys[] = [
203+
'key' => $key,
204+
'mem_size' => $item['mem_size'] ?? 0,
205+
'num_hits' => $item['num_hits'] ?? 0,
206+
'access_time' => $item['access_time'] ?? 0,
207+
'creation_time' => $item['creation_time'] ?? 0,
208+
'ttl' => $ttl === 0 ? 'Doesn\'t expire' : ($item['creation_time'] + $ttl - $time),
209+
];
209210
}
210211

211-
return $this->keysTableView($keys);
212+
return $keys;
212213
}
213214

214215
/**
@@ -295,8 +296,6 @@ private function keysTreeView(array $keys): array {
295296
}
296297

297298
private function mainDashboard(): string {
298-
$keys = $this->getAllKeys();
299-
300299
if (isset($_POST['submit_import_key'])) {
301300
Helpers::import(
302301
static fn (string $key): bool => apcu_exists($key),
@@ -306,16 +305,29 @@ static function (string $key, string $value, int $ttl): bool {
306305
);
307306
}
308307

308+
$keys = $this->getAllKeys();
309+
309310
if (isset($_GET['export_btn'])) {
310311
Helpers::export($keys, 'apcu_backup', static fn (string $key): string => base64_encode(serialize(apcu_fetch($key))));
311312
}
312313

313314
$paginator = new Paginator($this->template, $keys);
315+
$paginated_keys = $paginator->getPaginated();
316+
317+
318+
319+
if (Http::get('view', Config::get('list-view', 'table')) === 'tree') {
320+
$keys_to_display = $this->keysTreeView($paginated_keys);
321+
} else {
322+
$keys_to_display = $this->keysTableView($paginated_keys);
323+
}
324+
325+
unset($keys, $paginated_keys);
314326

315327
$info = apcu_cache_info(true);
316328

317329
return $this->template->render('dashboards/apcu', [
318-
'keys' => $paginator->getPaginated(),
330+
'keys' => $keys_to_display,
319331
'all_keys' => (int) $info['num_entries'],
320332
'paginator' => $paginator->render(),
321333
'view_key' => Http::queryString([], ['view' => 'key', 'key' => '__key__']),

src/Dashboards/Memcached/MemcachedTrait.php

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,11 +229,7 @@ public function getAllKeys(): array {
229229
}
230230
}
231231

232-
if (Http::get('view', Config::get('list-view', 'table')) === 'tree') {
233-
return $this->keysTreeView($keys);
234-
}
235-
236-
return $this->keysTableView($keys);
232+
return $keys;
237233
}
238234

239235
/**
@@ -523,9 +519,16 @@ private function mainDashboard(): string {
523519
}
524520

525521
$paginator = new Paginator($this->template, $keys);
522+
$paginated_keys = $paginator->getPaginated();
523+
524+
if (Http::get('view', Config::get('list-view', 'table')) === 'tree') {
525+
$keys_to_display = $this->keysTreeView($paginated_keys);
526+
} else {
527+
$keys_to_display = $this->keysTableView($paginated_keys);
528+
}
526529

527530
return $this->template->render('dashboards/memcached/memcached', [
528-
'keys' => $paginator->getPaginated(),
531+
'keys' => $keys_to_display,
529532
'all_keys' => $this->memcached->getServerStats()['curr_items'],
530533
'paginator' => $paginator->render(),
531534
'view_key' => Http::queryString([], ['view' => 'key', 'key' => '__key__']),

src/Dashboards/OPCache/OPCacheTrait.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ private function moreInfo(): string {
115115
* @return array<int, array<string, string|int>>
116116
*/
117117
private function getCachedScripts(): array {
118-
static $cached_scripts = [];
118+
$cached_scripts = [];
119119
$search = Http::get('s', '');
120120

121121
$this->template->addGlobal('search_value', $search);
@@ -149,6 +149,8 @@ private function getCachedScripts(): array {
149149
}
150150
}
151151

152+
unset($status);
153+
152154
return Helpers::sortKeys($this->template, $cached_scripts);
153155
}
154156

src/Dashboards/Redis/RedisMetrics.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ public function __construct(
5151

5252
public function collectAndRespond(): string {
5353
$info = $this->redis->getInfo(null, [
54-
'used_memory',
55-
'used_memory_peak',
56-
'mem_fragmentation_ratio',
57-
'keyspace_hits',
58-
'keyspace_misses',
59-
'connected_clients',
60-
'instantaneous_ops_per_sec',
61-
]);
54+
'used_memory',
55+
'used_memory_peak',
56+
'mem_fragmentation_ratio',
57+
'keyspace_hits',
58+
'keyspace_misses',
59+
'connected_clients',
60+
'instantaneous_ops_per_sec',
61+
]);
6262

6363
$metrics = $this->calculateMetrics($info);
6464
$this->insertMetrics($metrics);

src/Dashboards/Redis/RedisTrait.php

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -420,13 +420,7 @@ public function getAllKeys(): array {
420420
$keys_array = $this->redis->keys($filter);
421421
}
422422

423-
$keys = array_map(static fn ($key): array => ['key' => $key], $keys_array);
424-
425-
if (Http::get('view', Config::get('list-view', 'table')) === 'tree') {
426-
return $this->keysTreeView($keys);
427-
}
428-
429-
return $this->keysTableView($keys);
423+
return array_map(static fn ($key): array => ['key' => $key], $keys_array);
430424
}
431425

432426
public function isCommandSupported(string $command): bool {
@@ -633,10 +627,17 @@ function (string $key, string $value, int $ttl): bool {
633627
Helpers::export($keys, 'redis_backup', fn (string $key): string => bin2hex($this->redis->dump($key)));
634628
}
635629

636-
$paginator = new Paginator($this->template, $keys, [['s', 'pp'], ['p' => '']]);
630+
$paginator = new Paginator($this->template, $keys);
631+
$paginated_keys = $paginator->getPaginated();
632+
633+
if (Http::get('view', Config::get('list-view', 'table')) === 'tree') {
634+
$keys_to_display = $this->keysTreeView($paginated_keys);
635+
} else {
636+
$keys_to_display = $this->keysTableView($paginated_keys);
637+
}
637638

638639
return $this->template->render('dashboards/redis/redis', [
639-
'keys' => $paginator->getPaginated(),
640+
'keys' => $keys_to_display,
640641
'all_keys' => $this->redis->databaseSize(),
641642
'paginator' => $paginator->render(),
642643
'view_key' => Http::queryString(['s'], ['view' => 'key', 'key' => '__key__']),

src/Paginator.php

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public function getPaginated(): array {
4343
}
4444

4545
/**
46-
* @return array<int, int>
46+
* @return array<int, int|string>
4747
*/
4848
public function getPages(): array {
4949
$pages = [];
@@ -52,25 +52,31 @@ public function getPages(): array {
5252
$show_pages = 3; // number of pages displayed before and after the current page
5353

5454
if ($total_pages > 1 && $this->page <= $total_pages) {
55-
$pages[] = 1; // always show the first page
55+
if ($total_pages > ($show_pages * 2) + 2) {
56+
$pages[] = 1; // always show the first page
5657

57-
$i = max(2, $this->page - $show_pages);
58+
$i = max(2, $this->page - $show_pages);
5859

59-
if ($i > 2) {
60-
$pages[] = '..';
61-
}
60+
if ($i > 2) {
61+
$pages[] = '..';
62+
}
6263

63-
$min = min($this->page + ($show_pages + 1), $total_pages);
64+
$min = min($this->page + $show_pages, $total_pages - 1);
6465

65-
for (; $i < $min; $i++) {
66-
$pages[] = $i;
67-
}
66+
for (; $i <= $min; $i++) {
67+
$pages[] = $i;
68+
}
6869

69-
if ($i !== $total_pages) {
70-
$pages[] = '..';
71-
}
70+
if ($i < $total_pages) {
71+
$pages[] = '..';
72+
}
7273

73-
$pages[] = $total_pages; // always show the last page
74+
$pages[] = $total_pages; // always show the last page
75+
} else {
76+
for ($i = 1; $i <= $total_pages; $i++) {
77+
$pages[] = $i;
78+
}
79+
}
7480
}
7581

7682
return $pages;

0 commit comments

Comments
 (0)