Skip to content

Commit 53acadb

Browse files
committed
fix for #755
1 parent 0a5f3b9 commit 53acadb

File tree

5 files changed

+311
-47
lines changed

5 files changed

+311
-47
lines changed

api.include.php

Lines changed: 116 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3226,6 +3226,41 @@ public static function getHeadersFromServer(array $server): array;
32263226
}
32273227
}
32283228

3229+
// file: src/Tqdev/PhpCrudApi/Cache/Base/BaseCache.php
3230+
namespace Tqdev\PhpCrudApi\Cache\Base {
3231+
3232+
use Tqdev\PhpCrudApi\Cache\Cache;
3233+
3234+
class BaseCache implements Cache
3235+
{
3236+
public function __construct()
3237+
{
3238+
}
3239+
3240+
public function set(string $key, string $value, int $ttl = 0): bool
3241+
{
3242+
return true;
3243+
}
3244+
3245+
public function get(string $key): string
3246+
{
3247+
return '';
3248+
}
3249+
3250+
public function clear(): bool
3251+
{
3252+
return true;
3253+
}
3254+
3255+
public function ping(): int
3256+
{
3257+
$start = microtime(true);
3258+
$this->get('__ping__');
3259+
return intval((microtime(true)-$start)*1000000);
3260+
}
3261+
}
3262+
}
3263+
32293264
// file: src/Tqdev/PhpCrudApi/Cache/Cache.php
32303265
namespace Tqdev\PhpCrudApi\Cache {
32313266

@@ -3234,6 +3269,7 @@ interface Cache
32343269
public function set(string $key, string $value, int $ttl = 0): bool;
32353270
public function get(string $key): string;
32363271
public function clear(): bool;
3272+
public function ping(): int;
32373273
}
32383274
}
32393275

@@ -3268,7 +3304,9 @@ public static function create(string $type, string $prefix, string $config): Cac
32683304
// file: src/Tqdev/PhpCrudApi/Cache/MemcacheCache.php
32693305
namespace Tqdev\PhpCrudApi\Cache {
32703306

3271-
class MemcacheCache implements Cache
3307+
use Tqdev\PhpCrudApi\Cache\Base\BaseCache;
3308+
3309+
class MemcacheCache extends BaseCache implements Cache
32723310
{
32733311
protected $prefix;
32743312
protected $memcache;
@@ -3331,33 +3369,19 @@ public function set(string $key, string $value, int $ttl = 0): bool
33313369
// file: src/Tqdev/PhpCrudApi/Cache/NoCache.php
33323370
namespace Tqdev\PhpCrudApi\Cache {
33333371

3334-
class NoCache implements Cache
3335-
{
3336-
public function __construct()
3337-
{
3338-
}
3339-
3340-
public function set(string $key, string $value, int $ttl = 0): bool
3341-
{
3342-
return true;
3343-
}
3372+
use Tqdev\PhpCrudApi\Cache\Base\BaseCache;
33443373

3345-
public function get(string $key): string
3346-
{
3347-
return '';
3348-
}
3349-
3350-
public function clear(): bool
3351-
{
3352-
return true;
3353-
}
3374+
class NoCache extends BaseCache implements Cache
3375+
{
33543376
}
33553377
}
33563378

33573379
// file: src/Tqdev/PhpCrudApi/Cache/RedisCache.php
33583380
namespace Tqdev\PhpCrudApi\Cache {
33593381

3360-
class RedisCache implements Cache
3382+
use Tqdev\PhpCrudApi\Cache\Base\BaseCache;
3383+
3384+
class RedisCache extends BaseCache implements Cache
33613385
{
33623386
protected $prefix;
33633387
protected $redis;
@@ -3396,7 +3420,9 @@ public function clear(): bool
33963420
// file: src/Tqdev/PhpCrudApi/Cache/TempFileCache.php
33973421
namespace Tqdev\PhpCrudApi\Cache {
33983422

3399-
class TempFileCache implements Cache
3423+
use Tqdev\PhpCrudApi\Cache\Base\BaseCache;
3424+
3425+
class TempFileCache extends BaseCache implements Cache
34003426
{
34013427
const SUFFIX = 'cache';
34023428

@@ -4820,6 +4846,56 @@ interface Responder
48204846
public function error(int $error, string $argument, $details = null): ResponseInterface;
48214847

48224848
public function success($result): ResponseInterface;
4849+
4850+
public function multi($results): ResponseInterface;
4851+
4852+
public function exception($exception): ResponseInterface;
4853+
4854+
}
4855+
}
4856+
4857+
// file: src/Tqdev/PhpCrudApi/Controller/StatusController.php
4858+
namespace Tqdev\PhpCrudApi\Controller {
4859+
4860+
use Psr\Http\Message\ResponseInterface;
4861+
use Psr\Http\Message\ServerRequestInterface;
4862+
use Tqdev\PhpCrudApi\Cache\Cache;
4863+
use Tqdev\PhpCrudApi\Database\GenericDB;
4864+
use Tqdev\PhpCrudApi\Middleware\Router\Router;
4865+
4866+
class StatusController
4867+
{
4868+
private $db;
4869+
private $cache;
4870+
private $responder;
4871+
4872+
public function __construct(Router $router, Responder $responder, Cache $cache, GenericDB $db)
4873+
{
4874+
$router->register('GET', '/status/up', array($this, 'up'));
4875+
$router->register('GET', '/status/ping', array($this, 'ping'));
4876+
$this->db = $db;
4877+
$this->cache = $cache;
4878+
$this->responder = $responder;
4879+
}
4880+
4881+
public function up(ServerRequestInterface $request): ResponseInterface
4882+
{
4883+
$result = [
4884+
'db' => $this->db->ping()<1000000,
4885+
'cache' => $this->cache->ping()<1000000,
4886+
];
4887+
return $this->responder->success($result);
4888+
}
4889+
4890+
public function ping(ServerRequestInterface $request): ResponseInterface
4891+
{
4892+
$result = [
4893+
'db' => $this->db->ping(),
4894+
'cache' => $this->cache->ping(),
4895+
];
4896+
return $this->responder->success($result);
4897+
}
4898+
48234899
}
48244900
}
48254901

@@ -5682,6 +5758,14 @@ private function query(string $sql, array $parameters): \PDOStatement
56825758
return $stmt;
56835759
}
56845760

5761+
public function ping(): int
5762+
{
5763+
$start = microtime(true);
5764+
$stmt = $this->pdo->prepare('SELECT 1');
5765+
$stmt->execute();
5766+
return intval((microtime(true)-$start)*1000000);
5767+
}
5768+
56855769
public function getCacheKey(): string
56865770
{
56875771
return md5(json_encode([
@@ -10519,6 +10603,11 @@ public function _list(string $tableName, array $params): ListDocument
1051910603
$this->joiner->addJoins($table, $records, $params, $this->db);
1052010604
return new ListDocument($records, $count);
1052110605
}
10606+
10607+
public function ping(): int
10608+
{
10609+
return $this->db->ping();
10610+
}
1052210611
}
1052310612
}
1052410613

@@ -10834,6 +10923,7 @@ private function setHabtmValues(ReflectedTable $t1, ReflectedTable $t2, array &$
1083410923
use Tqdev\PhpCrudApi\Controller\JsonResponder;
1083510924
use Tqdev\PhpCrudApi\Controller\OpenApiController;
1083610925
use Tqdev\PhpCrudApi\Controller\RecordController;
10926+
use Tqdev\PhpCrudApi\Controller\StatusController;
1083710927
use Tqdev\PhpCrudApi\Database\GenericDB;
1083810928
use Tqdev\PhpCrudApi\GeoJson\GeoJsonService;
1083910929
use Tqdev\PhpCrudApi\Middleware\AuthorizationMiddleware;
@@ -10958,6 +11048,9 @@ public function __construct(Config $config)
1095811048
$geoJson = new GeoJsonService($reflection, $records);
1095911049
new GeoJsonController($router, $responder, $geoJson);
1096011050
break;
11051+
case 'status':
11052+
new StatusController($router, $responder, $cache, $db);
11053+
break;
1096111054
}
1096211055
}
1096311056
foreach ($config->getCustomControllers() as $className) {
@@ -11049,7 +11142,7 @@ class Config
1104911142
'database' => null,
1105011143
'tables' => '',
1105111144
'middlewares' => 'cors,errors',
11052-
'controllers' => 'records,geojson,openapi',
11145+
'controllers' => 'records,geojson,openapi,status',
1105311146
'customControllers' => '',
1105411147
'customOpenApiBuilders' => '',
1105511148
'cacheType' => 'TempFile',

0 commit comments

Comments
 (0)