diff --git a/README.md b/README.md index 3475627..d1ceb30 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,7 @@ ## About Kamu -Kamu adalah PHP framework yang sangat sederhana. Saking sederhananya, serasa di localhost!!. -
-Dibantu dengan saya console untuk mempermudah dalam development aplikasi Anda. +"Kamu" merupakan PHP framework yang sangat simpel, memberikan pengalaman seolah-olah berada di localhost meskipun dalam mode production. Dibantu dengan "Saya" konsol yang membantu pengembangan aplikasi secara efisien. ## Get Started Project - Create a project with composer diff --git a/app/Middleware/CookieMiddleware.php b/app/Middleware/CookieMiddleware.php new file mode 100644 index 0000000..62e3340 --- /dev/null +++ b/app/Middleware/CookieMiddleware.php @@ -0,0 +1,24 @@ +server->get('REQUEST_URL'), RouteServiceProvider::$API_PREFIX) !== false + && $request->server->get('REQUEST_URL') !== RouteServiceProvider::$API_PREFIX + ) { + Env::set('COOKIE', 'false'); + } + + return $next($request); + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index ac38b65..4b812f7 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -2,13 +2,23 @@ namespace App\Providers; +use App\Middleware\CookieMiddleware; use App\Middleware\CsrfMiddleware; +use Core\Database\DB; use Core\Facades\Provider; use Core\Routing\Route; use Core\Routing\Router; +use Exception; class RouteServiceProvider extends Provider { + /** + * Prefix api. + * + * @var string $API_PREFIX + */ + public static $API_PREFIX = '/api'; + /** * Jalankan sewaktu aplikasi dinyalakan. * @@ -22,6 +32,100 @@ public function booting() Route::middleware(CsrfMiddleware::class)->group(function () { Route::setRouteFromFile(); }); + + Route::prefix(static::$API_PREFIX)->middleware(CookieMiddleware::class)->group(function () { + Route::get('/health', [static::class, 'health']); + require_once base_path('/routes/api.php'); + }); + } + } + + /** + * Get health this application. + * + * @return \Core\Http\Respond + */ + public function health(): \Core\Http\Respond + { + $data = [ + 'status' => true + ]; + + if (!hash_equals(hash('sha3-512', env('APP_KEY')), request()->get('hash', ''))) { + return respond()->setContent(json($data, 200)); + } + + $data['system'] = [ + 'php_version' => PHP_VERSION, + 'execute_time' => execute_time(), + 'memory_peak_usage' => format_bytes(memory_get_peak_usage(true)), + ]; + + $data['system']['opcache'] = [ + 'opcache_enabled' => false, + 'opcache_used_memory' => format_bytes(0), + 'opcache_free_memory' => format_bytes(0), + 'jit' => [ + 'enabled' => false, + 'buffer_size' => format_bytes(0), + 'buffer_free' => format_bytes(0), + ] + ]; + + if (function_exists('opcache_get_status')) { + $opcache = opcache_get_status(); + $data['system']['opcache'] = [ + 'opcache_enabled' => $opcache['opcache_enabled'], + 'opcache_used_memory' => format_bytes($opcache['memory_usage']['used_memory']), + 'opcache_free_memory' => format_bytes($opcache['memory_usage']['free_memory']), + 'jit' => [ + 'enabled' => $opcache['jit']['enabled'], + 'buffer_size' => format_bytes($opcache['jit']['buffer_size']), + 'buffer_free' => format_bytes($opcache['jit']['buffer_free']), + ], + ]; } + + $data['database'] = [ + 'server_version' => null, + 'client_version' => null, + 'connection_status' => null, + 'server_info' => null, + 'error' => null, + ]; + + if ( + env('DB_DRIV') && + env('DB_HOST') && + env('DB_NAME') && + env('DB_PORT') && + env('DB_USER') + ) { + try { + $database = DB::getInfoDriver(); + $data['database'] = [ + 'server_version' => $database['SERVER_VERSION'], + 'client_version' => $database['CLIENT_VERSION'], + 'connection_status' => $database['CONNECTION_STATUS'], + 'server_info' => $database['SERVER_INFO'], + 'error' => null, + ]; + + $data['system']['execute_time'] = execute_time(); + } catch (Exception $e) { + $data['status'] = false; + $data['database'] = [ + 'server_version' => null, + 'client_version' => null, + 'connection_status' => null, + 'server_info' => null, + 'error' => $e->getMessage(), + ]; + + return respond()->setContent(json($data, 500)); + } + } + + return respond()->setContent(json($data, 200)); } } diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..833533f --- /dev/null +++ b/routes/api.php @@ -0,0 +1,11 @@ +