feat: Add health endpoint
This commit is contained in:
parent
11257a272e
commit
751b23a5e4
58
app/Http/Controllers/HealthController.php
Normal file
58
app/Http/Controllers/HealthController.php
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Item;
|
||||||
|
use App\User;
|
||||||
|
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use Illuminate\Support\Facades\RateLimiter;
|
||||||
|
|
||||||
|
class HealthController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
private static function getUsers(): int
|
||||||
|
{
|
||||||
|
return User::count();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
private static function getItems(): int
|
||||||
|
{
|
||||||
|
return Item::select('id')
|
||||||
|
->where('deleted_at', null)
|
||||||
|
->where('type', '0')
|
||||||
|
->count();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle the incoming request.
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse|Response
|
||||||
|
* @throws BindingResolutionException
|
||||||
|
*/
|
||||||
|
public function __invoke(Request $request)
|
||||||
|
{
|
||||||
|
$REQUESTS_MAX_PER_MIN = 30;
|
||||||
|
$STATUS_TOO_MANY_REQUESTS = 429;
|
||||||
|
|
||||||
|
if (RateLimiter::remaining('health', $REQUESTS_MAX_PER_MIN) < 1) {
|
||||||
|
return response()->make('Too many attempts.', $STATUS_TOO_MANY_REQUESTS);
|
||||||
|
}
|
||||||
|
|
||||||
|
RateLimiter::hit('health');
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'status' => 'ok',
|
||||||
|
'items' => self::getItems(),
|
||||||
|
'users' => self::getUsers(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
use App\Application;
|
use App\Application;
|
||||||
use App\Http\Controllers\Auth\LoginController;
|
use App\Http\Controllers\Auth\LoginController;
|
||||||
|
use App\Http\Controllers\HealthController;
|
||||||
use App\Http\Controllers\HomeController;
|
use App\Http\Controllers\HomeController;
|
||||||
use App\Http\Controllers\ImportController;
|
use App\Http\Controllers\ImportController;
|
||||||
use App\Http\Controllers\ItemController;
|
use App\Http\Controllers\ItemController;
|
||||||
|
@ -111,3 +112,5 @@ Route::get('/home', [HomeController::class,'index'])->name('home');
|
||||||
|
|
||||||
Route::resource('api/item', ItemRestController::class);
|
Route::resource('api/item', ItemRestController::class);
|
||||||
Route::get('import', ImportController::class)->name('items.import');
|
Route::get('import', ImportController::class)->name('items.import');
|
||||||
|
|
||||||
|
Route::get('/health', HealthController::class)->name('health');
|
||||||
|
|
Loading…
Reference in a new issue