Легко відстежувати метрики за допомогою методів Context Increment та Decrement у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 10 травня, 2025
Laravel вдосконалює свою систему контексту новими методами інкременту та декременту, які спрощують відстеження лічильників та метрик у вашій програмі. Дізнайтеся, як використання цих методів дозволяє розробникам легко керувати числовими значеннями і зберігати чистоту коду без ускладнень

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 без потреби у глобальних змінних або складних схемах трекінгу стану