Laravel покращив свою систему Context новими методами increment та decrement, які пропонують елегантні рішення для відстеження лічильників і метрик у вашій аплікації без складного управління станом
Тепер система Context дозволяє розробникам легко підтримувати числові значення, використовуючи простий та зрозумілий синтаксис:
// Ініціалізація або збільшення лічильника
Context::increment('downloads'); // 1
Context::increment('downloads'); // 2
// Збільшення на певну величину
Context::increment('downloads', 5); // 7
// Зменшення лічильників
Context::decrement('active_sessions'); // -1
Context::decrement('available_tokens', 3); // -3
Ці методи особливо корисні для моніторингу метрик аплікації або споживання ресурсів:
class DocumentController extends Controller
{
public function download(Request $request, $id)
{
// Збільшення загальної кількості спроб завантаження
Context::increment('metrics.download_attempts');
try {
// Перевірка прав користувача
$request->validate([
'subscription' => 'required|active',
]);
$document = Document::findOrFail($id);
// Збільшення кількості успішних завантажень
Context::increment('metrics.successful_downloads');
// Відстеження використання пропускної здатності
$size = $document->size;
Context::increment('metrics.total_bandwidth', $size);
return Storage::download($document->path);
} catch (ValidationException $e) {
// Збільшення лічильника відмов через відсутність прав
Context::increment('metrics.permission_rejections');
throw $e;
} catch (\Exception $e) {
// Збільшення лічильника помилок
Context::increment('metrics.download_errors');
throw $e;
}
}
}
Мідлвар може захоплювати та фіксувати ці метрики по завершенню запиту:
class MetricsLoggerMiddleware
{
public function handle($request, $next)
{
$response = $next($request);
// Фіксація метрик по завершенню запиту
$this->logMetrics();
return $response;
}
protected function logMetrics()
{
// Збір метрик з контексту
$downloadAttempts = Context::get('metrics.download_attempts', 0);
$successfulDownloads = Context::get('metrics.successful_downloads', 0);
$permissionRejections = Context::get('metrics.permission_rejections', 0);
$downloadErrors = Context::get('metrics.download_errors', 0);
$totalBandwidth = Context::get('metrics.total_bandwidth', 0);
// Логування зібраних метрик
Log::info('Download Metrics', [
'attempts' => $downloadAttempts,
'successful' => $successfulDownloads,
'permission_denied' => $permissionRejections,
'errors' => $downloadErrors,
'bandwidth_used' => $totalBandwidth,
]);
}
}
Ці нові методи Context забезпечують чисту та зручну імплементацію лічильників у системах Laravel без потреби у глобальних змінних або складних схемах трекінгу стану