Files
fuel-price/app/Services/ApiLogger.php
Ovidiu U 097f1b0529
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
apilogs
2026-04-04 08:41:21 +01:00

46 lines
1.1 KiB
PHP

<?php
namespace App\Services;
use App\Models\ApiLog;
use Illuminate\Http\Client\Response;
use Throwable;
class ApiLogger
{
/**
* Execute an HTTP request and log it to api_logs.
*
* The callable must return an Illuminate\Http\Client\Response.
* Exceptions are logged and re-thrown so the caller handles them.
*
* @param callable(): Response $request
*/
public function send(string $service, string $method, string $url, callable $request): Response
{
$start = microtime(true);
$statusCode = null;
$error = null;
try {
$response = $request();
$statusCode = $response->status();
return $response;
} catch (Throwable $e) {
$error = $e->getMessage();
throw $e;
} finally {
ApiLog::create([
'service' => $service,
'method' => strtoupper($method),
'url' => $url,
'status_code' => $statusCode,
'duration_ms' => (int) round((microtime(true) - $start) * 1000),
'error' => $error,
]);
}
}
}