نسخه:

پالس لاراول

معرفی

Laravel Pulse در یک نگاه بینش هایی را در مورد عملکرد و استفاده برنامه شما ارائه می دهد. با Pulse، می‌توانید گلوگاه‌هایی مانند کارهای کند و نقاط پایانی را ردیابی کنید، فعال‌ترین کاربران خود را پیدا کنید و موارد دیگر.

برای اشکال زدایی عمیق رویدادهای فردی، تلسکوپ لاراول را بررسی کنید .

نصب و راه اندازی

پیاده سازی ذخیره سازی شخص اول Pulse در حال حاضر به یک پایگاه داده MySQL یا PostgreSQL نیاز دارد. اگر از موتور پایگاه داده دیگری استفاده می کنید، برای داده های پالس خود به یک پایگاه داده MySQL یا PostgreSQL جداگانه نیاز دارید.

از آنجایی که Pulse در حال حاضر در مرحله بتا است، ممکن است لازم باشد فایل برنامه خود را composer.json طوری تنظیم کنید که بسته‌های بتا نصب شوند:

"minimum-stability": "beta",
"prefer-stable": true

سپس، می توانید از مدیر بسته Composer برای نصب پالس در پروژه لاراول خود استفاده کنید:

composer require laravel/pulse

در مرحله بعد، باید فایل های پیکربندی و انتقال پالس را با استفاده از vendor:publish دستور Artisan منتشر کنید:

php artisan vendor:publish --provider="Laravel\Pulse\PulseServiceProvider"

migrate در نهایت، برای ایجاد جداول مورد نیاز برای ذخیره داده های پالس، باید دستور را اجرا کنید :

php artisan migrate

هنگامی که انتقال پایگاه داده پالس اجرا شد، می توانید از طریق /pulse مسیر به داشبورد پالس دسترسی داشته باشید.

اگر نمی خواهید داده های پالس را در پایگاه داده اصلی برنامه خود ذخیره کنید، می توانید یک اتصال پایگاه داده اختصاصی را مشخص کنید .

پیکربندی

بسیاری از گزینه های پیکربندی پالس را می توان با استفاده از متغیرهای محیطی کنترل کرد. برای مشاهده گزینه های موجود، ثبت ضبط کننده های جدید، یا پیکربندی گزینه های پیشرفته، می توانید config/pulse.php فایل پیکربندی را منتشر کنید:

php artisan vendor:publish --tag=pulse-config

داشبورد

مجوز

داشبورد پالس ممکن است از طریق /pulse مسیر قابل دسترسی باشد. به‌طور پیش‌فرض، شما فقط می‌توانید به این داشبورد در local محیط دسترسی داشته باشید، بنابراین باید مجوز را برای محیط‌های تولیدی خود با سفارشی کردن 'viewPulse' دروازه مجوز پیکربندی کنید. شما می توانید این کار را در فایل برنامه خود انجام دهید app/Providers/AppServiceProvider.php :

use App\Models\User;
use Illuminate\Support\Facades\Gate;
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Gate::define('viewPulse', function (User $user) {
return $user->isAdmin();
});
 
// ...
}

سفارشی سازی

کارت‌ها و طرح‌بندی داشبورد پالس ممکن است با انتشار نمای داشبورد پیکربندی شود. نمای داشبورد به آدرس زیر منتشر خواهد شد resources/views/vendor/pulse/dashboard.blade.php :

php artisan vendor:publish --tag=pulse-dashboard

داشبورد توسط Livewire پشتیبانی می‌شود و به شما امکان می‌دهد کارت‌ها و طرح‌بندی را بدون نیاز به بازسازی هیچ گونه دارایی جاوا اسکریپت سفارشی کنید.

در این فایل، <x-pulse> کامپوننت وظیفه رندر کردن داشبورد را بر عهده دارد و یک طرح بندی شبکه ای برای کارت ها ارائه می کند. اگر می‌خواهید داشبورد تمام عرض صفحه را بپوشاند، می‌توانید پایه‌ای را full-width برای مؤلفه فراهم کنید:

<x-pulse full-width>
...
</x-pulse>

به طور پیش‌فرض، <x-pulse> کامپوننت یک شبکه ۱۲ ستونی ایجاد می‌کند، اما می‌توانید با استفاده از cols پروپوزال آن را سفارشی کنید:

<x-pulse cols="16">
...
</x-pulse>

هر کارت برای کنترل فضا و موقعیت یابی یک cols و پایه می پذیرد: rows

<livewire:pulse.usage cols="4" rows="2" />

بیشتر کارت‌ها expand به جای اسکرول کردن، یک پایه برای نمایش کارت کامل می‌پذیرند:

<livewire:pulse.slow-queries expand />

حل و فصل کاربران

برای کارت‌هایی که اطلاعات کاربران شما را نشان می‌دهند، مانند کارت استفاده از برنامه، Pulse فقط شناسه کاربر را ثبت می‌کند. هنگام رندر کردن داشبورد، Pulse فیلدهای name و email را از Authenticatable مدل پیش‌فرض شما حل می‌کند و آواتارها را با استفاده از وب سرویس Gravatar نمایش می‌دهد.

می توانید فیلدها و آواتار را با فراخوانی Pulse::user متد در کلاس برنامه خود سفارشی کنید App\Providers\AppServiceProvider .

این user روش یک بسته را می پذیرد که مدل نمایش داده شده را دریافت می کند Authenticatable و باید یک آرایه حاوی name ، extra و avatar اطلاعات را برای کاربر برگرداند:

use Laravel\Pulse\Facades\Pulse;
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Pulse::user(fn ($user) => [
'name' => $user->name,
'extra' => $user->email,
'avatar' => $user->avatar_url,
]);
 
// ...
}

شما می‌توانید با پیاده‌سازی قرارداد و اتصال آن در کانتینر سرویس Laravel\Pulse\Contracts\ResolvesUsers لاراول، نحوه ضبط و بازیابی کاربر احراز هویت شده را کاملاً سفارشی کنید .

کارت ها

سرورها

کارت <livewire:pulse.servers /> استفاده از منابع سیستم را برای همه سرورهایی که pulse:check فرمان را اجرا می کنند نشان می دهد. لطفاً برای اطلاعات بیشتر در مورد گزارش منابع سیستم به مستندات مربوط به ضبط کننده سرورها مراجعه کنید .

استفاده از برنامه

این <livewire:pulse.usage /> کارت 10 کاربر برتر را نشان می دهد که درخواست هایی را برای برنامه شما ارسال می کنند، کارها را ارسال می کنند و درخواست های کندی را تجربه می کنند.

اگر می‌خواهید همه معیارهای استفاده را همزمان روی صفحه مشاهده کنید، می‌توانید کارت را چندین بار اضافه کنید و type ویژگی را مشخص کنید:

<livewire:pulse.usage type="requests" />
<livewire:pulse.usage type="slow_requests" />
<livewire:pulse.usage type="jobs" />

برای یادگیری نحوه سفارشی کردن نحوه بازیابی و نمایش اطلاعات کاربر Pulse، به مستندات ما در مورد حل کردن کاربران مراجعه کنید .

اگر برنامه شما درخواست های زیادی دریافت می کند یا کارهای زیادی را ارسال می کند، ممکن است بخواهید نمونه برداری را فعال کنید . برای اطلاعات بیشتر به مستندات ضبط کننده درخواست های کاربر ، ضبط کننده مشاغل کاربر و ضبط کننده مشاغل آهسته مراجعه کنید .

استثناها

کارت <livewire:pulse.exceptions /> فراوانی و تازگی استثناهایی را که در برنامه شما رخ می دهد را نشان می دهد. به طور پیش فرض، استثناها بر اساس کلاس استثنا و مکانی که در آن رخ داده است، گروه بندی می شوند. برای اطلاعات بیشتر به مستندات ضبط استثناها مراجعه کنید .

صف ها

این <livewire:pulse.queues /> کارت ظرفیت صف‌های موجود در برنامه شما را نشان می‌دهد، از جمله تعداد مشاغل در صف، پردازش، پردازش، انتشار و ناموفق. برای اطلاعات بیشتر به مستندات ضبط صف مراجعه کنید .

درخواست های آهسته

کارت <livewire:pulse.slow-requests /> درخواست‌های ورودی را به برنامه شما نشان می‌دهد که از آستانه پیکربندی‌شده که به‌طور پیش‌فرض 1000 میلی‌ثانیه است، فراتر می‌رود. برای اطلاعات بیشتر به مستندات ضبط کننده درخواست های کند مراجعه کنید .

مشاغل آهسته

این <livewire:pulse.slow-jobs /> کارت کارهای صف در برنامه شما را نشان می دهد که از آستانه پیکربندی شده که به طور پیش فرض 1000 میلی ثانیه است بیشتر است. برای اطلاعات بیشتر به مستندات ضبط مشاغل کند مراجعه کنید .

پرس و جوهای آهسته

کارت <livewire:pulse.slow-queries /> درخواست های پایگاه داده را در برنامه شما نشان می دهد که از آستانه پیکربندی شده که به طور پیش فرض 1000 میلی ثانیه است بیشتر است.

به طور پیش فرض، پرس و جوهای کند بر اساس پرس و جوی SQL (بدون پیوند) و مکانی که در آن رخ داده است گروه بندی می شوند، اما اگر می خواهید صرفاً در پرس و جوی SQL گروه بندی کنید، ممکن است انتخاب کنید که مکان را ضبط نکنید.

برای اطلاعات بیشتر به مستندات ضبط پرس و جوهای کند مراجعه کنید .

درخواست های خروجی کند

این کارت درخواست‌های خروجی را که با استفاده از کلاینت HTTP <livewire:pulse.slow-outgoing-requests /> لاراول انجام شده است را نشان می‌دهد که از آستانه پیکربندی شده که به‌طور پیش‌فرض 1000 میلی‌ثانیه است، فراتر می‌رود.

به طور پیش فرض، ورودی ها بر اساس URL کامل گروه بندی می شوند. با این حال، ممکن است بخواهید درخواست های خروجی مشابه را با استفاده از عبارات منظم عادی یا گروه بندی کنید. برای اطلاعات بیشتر به مستندات ضبط کننده درخواست های خروجی آهسته مراجعه کنید .

حافظه پنهان

کارت <livewire:pulse.cache /> آمار ضربه و عدم دسترسی به حافظه پنهان را برای برنامه شما، چه در سطح جهانی و چه برای کلیدهای جداگانه، نشان می دهد.

به طور پیش فرض، ورودی ها بر اساس کلید گروه بندی می شوند. با این حال، ممکن است بخواهید کلیدهای مشابه را با استفاده از عبارات منظم عادی یا گروه بندی کنید. برای اطلاعات بیشتر به مستندات ضبط کننده تعاملات حافظه پنهان مراجعه کنید .

ثبت ورودی ها

اکثر ضبط کننده های پالس به طور خودکار ورودی ها را بر اساس رویدادهای چارچوب ارسال شده توسط لاراول ضبط می کنند. با این حال، ضبط کننده سرور و برخی از کارت های شخص ثالث باید به طور منظم برای اطلاعات نظرسنجی کنند. برای استفاده از این کارت‌ها، باید pulse:check دیمون را روی همه سرورهای برنامه شخصی خود اجرا کنید:

php artisan pulse:check

برای pulse:check اجرای دائمی فرآیند در پس‌زمینه، باید از یک مانیتور فرآیند مانند Supervisor استفاده کنید تا اطمینان حاصل کنید که اجرای دستور متوقف نمی‌شود.

از آنجایی که pulse:check فرمان یک فرآیند طولانی مدت است، بدون راه اندازی مجدد، تغییراتی را در پایگاه کد شما مشاهده نخواهد کرد. شما باید با فراخوانی دستور pulse:restart در طول فرآیند استقرار برنامه خود، فرمان را مجدداً راه اندازی کنید:

php artisan pulse:restart

Pulse از حافظه پنهان برای ذخیره سیگنال‌های راه‌اندازی مجدد استفاده می‌کند، بنابراین قبل از استفاده از این ویژگی باید بررسی کنید که درایور حافظه پنهان برای برنامه شما به درستی پیکربندی شده است.

ضبط کننده ها

ضبط‌کننده‌ها مسئول ثبت ورودی‌های برنامه شما هستند تا در پایگاه داده پالس ثبت شوند. ضبط کننده ها در recorders بخش فایل پیکربندی پالس ثبت و پیکربندی می شوند .

تعاملات حافظه پنهان

ضبط CacheInteractions کننده اطلاعات مربوط به بازدیدها و عدم دسترسی به حافظه پنهان در برنامه شما را برای نمایش در کارت حافظه ذخیره می کند .

می توانید به صورت اختیاری نرخ نمونه را تنظیم کنید و الگوهای کلیدی را نادیده بگیرید.

همچنین می توانید گروه بندی کلیدها را طوری پیکربندی کنید که کلیدهای مشابه به عنوان یک ورودی گروه بندی شوند. برای مثال، ممکن است بخواهید شناسه‌های منحصربه‌فرد را از کلیدهایی که همان نوع اطلاعات را در حافظه پنهان ذخیره می‌کنند حذف کنید. گروه ها با استفاده از یک عبارت منظم برای "یافتن و جایگزینی" بخش هایی از کلید پیکربندی می شوند. یک مثال در فایل پیکربندی موجود است:

Recorders\CacheInteractions::class => [
// ...
'groups' => [
// '/:\d+/' => ':*',
],
],

اولین الگویی که مطابقت دارد استفاده خواهد شد. اگر هیچ الگوی مطابقت نداشته باشد، کلید همانطور که هست گرفته می شود.

استثناها

ضبط Exceptions کننده اطلاعاتی را در مورد استثناهای قابل گزارشی که در برنامه شما رخ می دهد را برای نمایش در کارت استثنا ضبط می کند .

می‌توانید به صورت اختیاری نرخ نمونه و الگوهای استثنا را نادیده بگیرید. همچنین می‌توانید پیکربندی کنید که آیا مکانی که استثنا از آن منشأ گرفته است را ضبط کنید. مکان ضبط شده در داشبورد Pulse نمایش داده می شود که می تواند به ردیابی منشاء استثنا کمک کند. با این حال، اگر یک استثنا در چندین مکان رخ دهد، برای هر مکان منحصر به فرد چندین بار ظاهر می شود.

صف ها

ضبط Queues کننده اطلاعاتی را در مورد صف های برنامه های شما برای نمایش در صف ضبط می کند .

می توانید به صورت اختیاری نرخ نمونه و الگوهای مشاغل نادیده گرفته شده را تنظیم کنید.

مشاغل آهسته

ضبط SlowJobs کننده اطلاعات مربوط به کارهای آهسته در برنامه شما را برای نمایش در کارت Slow Jobs ضبط می کند .

می توانید به صورت اختیاری آستانه کار آهسته، نرخ نمونه و الگوهای شغل نادیده گرفته شده را تنظیم کنید.

درخواست های خروجی کند

ضبط کننده اطلاعاتی را در مورد درخواست های HTTP خروجی که با استفاده از کلاینت HTTP SlowOutgoingRequests لاراول انجام شده است، ضبط می کند که از آستانه پیکربندی شده برای نمایش در کارت درخواست های آهسته خروجی فراتر می رود .

می‌توانید به صورت اختیاری آستانه درخواست خروجی کند، نرخ نمونه و الگوهای URL نادیده گرفته شده را تنظیم کنید.

همچنین می توانید گروه بندی URL را طوری پیکربندی کنید که URL های مشابه به عنوان یک ورودی گروه بندی شوند. به عنوان مثال، ممکن است بخواهید شناسه های منحصر به فرد را از مسیرهای URL یا گروه بر اساس دامنه حذف کنید. گروه ها با استفاده از یک عبارت معمولی برای "یافتن و جایگزینی" بخش هایی از URL پیکربندی می شوند. چند نمونه در فایل پیکربندی موجود است:

Recorders\OutgoingRequests::class => [
// ...
'groups' => [
// '#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*',
// '#^https?://([^/]*).*$#' => '\1',
// '#/\d+#' => '/*',
],
],

اولین الگویی که مطابقت دارد استفاده خواهد شد. اگر هیچ الگوی مطابقت نداشته باشد، URL همانطور که هست ثبت می شود.

پرس و جوهای آهسته

ضبط SlowQueries کننده هر درخواست پایگاه داده در برنامه شما را که از آستانه پیکربندی شده برای نمایش در کارت Slow Queries فراتر می رود، ضبط می کند .

می توانید به صورت اختیاری آستانه پرس و جو کند، نرخ نمونه و الگوهای پرس و جو نادیده گرفته شده را تنظیم کنید. همچنین می‌توانید پیکربندی کنید که آیا مکان پرس و جو گرفته شود یا خیر. مکان ضبط شده در داشبورد Pulse نمایش داده می شود که می تواند به ردیابی منشاء پرس و جو کمک کند. با این حال، اگر یک پرس و جو در چندین مکان انجام شود، برای هر مکان منحصر به فرد چندین بار ظاهر می شود.

درخواست های آهسته

ضبط Requests کننده اطلاعات درخواست‌هایی را که به برنامه شما برای نمایش در کارت‌های درخواست‌های آهسته و استفاده از برنامه ارسال شده است، ضبط می‌کند .

می‌توانید به صورت اختیاری آستانه مسیر کند، نرخ نمونه و مسیرهای نادیده گرفته شده را تنظیم کنید.

سرورها

ضبط Servers کننده استفاده از CPU، حافظه و ذخیره سازی سرورهایی را که برنامه شما را برای نمایش روی کارت سرور نیرو می دهند، ضبط می کند . این ضبط کننده نیاز دارد که pulse:check دستور روی هر یک از سرورهایی که می خواهید نظارت کنید اجرا شود.

هر سرور گزارشگر باید یک نام منحصر به فرد داشته باشد. به طور پیش فرض، Pulse از مقدار بازگردانده شده توسط gethostname تابع PHP استفاده می کند. اگر می خواهید این را سفارشی کنید، می توانید PULSE_SERVER_NAME متغیر محیط را تنظیم کنید:

PULSE_SERVER_NAME=load-balancer

فایل پیکربندی Pulse همچنین به شما اجازه می‌دهد تا دایرکتوری‌هایی را که نظارت می‌شوند سفارشی کنید.

مشاغل کاربر

ضبط UserJobs کننده اطلاعات مربوط به کاربرانی را که کارها را در برنامه شما ارسال می کنند برای نمایش در کارت استفاده از برنامه ضبط می کند .

می توانید به صورت اختیاری نرخ نمونه و الگوهای شغلی نادیده گرفته شده را تنظیم کنید.

درخواست های کاربر

ضبط UserRequests کننده اطلاعات مربوط به کاربرانی را که از برنامه شما درخواست می کنند برای نمایش در کارت استفاده از برنامه ضبط می کند .

می توانید به صورت اختیاری نرخ نمونه و الگوهای شغلی نادیده گرفته شده را تنظیم کنید.

فیلتر کردن

همانطور که دیدیم، بسیاری از ضبط‌کننده‌ها توانایی «نادیده گرفتن» ورودی‌های ورودی را بر اساس مقدارشان، مانند URL درخواست، از طریق پیکربندی ارائه می‌کنند. اما، گاهی اوقات ممکن است فیلتر کردن رکوردها بر اساس عوامل دیگر مانند کاربر تأیید شده فعلی مفید باشد. برای فیلتر کردن این رکوردها، ممکن است روش Pulse را ببندید filter . به طور معمول، روش باید در متد برنامه شما filter فراخوانی شود : boot AppServiceProvider

use Illuminate\Support\Facades\Auth;
use Laravel\Pulse\Entry;
use Laravel\Pulse\Facades\Pulse;
use Laravel\Pulse\Value;
 
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Pulse::filter(function (Entry|Value $entry) {
return Auth::user()->isNotAdmin();
});
 
// ...
}

کارایی

Pulse به گونه ای طراحی شده است که بدون نیاز به زیرساخت های اضافی وارد یک برنامه کاربردی موجود شود. با این حال، برای برنامه‌های پرترافیک، راه‌های مختلفی برای از بین بردن هرگونه تأثیری که پالس ممکن است بر عملکرد برنامه شما داشته باشد، وجود دارد.

استفاده از یک پایگاه داده متفاوت

برای برنامه های پرترافیک، ممکن است ترجیح دهید از یک اتصال پایگاه داده اختصاصی برای Pulse استفاده کنید تا از تأثیرگذاری بر پایگاه داده برنامه خود جلوگیری کنید.

می توانید اتصال پایگاه داده مورد استفاده توسط پالس را با تنظیم PULSE_DB_CONNECTION متغیر محیطی سفارشی کنید.

PULSE_DB_CONNECTION=pulse

Redis Ingest

Redis Ingest به Redis 6.2 یا بالاتر و phpredis یا predis به عنوان درایور مشتری Redis پیکربندی شده برنامه نیاز دارد.

به طور پیش فرض، Pulse ورودی ها را مستقیماً به اتصال پایگاه داده پیکربندی شده پس از ارسال پاسخ HTTP به مشتری یا پردازش یک کار ذخیره می کند. با این حال، می‌توانید از درایور دریافت Redis پالس برای ارسال ورودی‌ها به یک جریان Redis استفاده کنید. این را می توان با پیکربندی PULSE_INGEST_DRIVER متغیر محیط فعال کرد:

PULSE_INGEST_DRIVER=redis

Pulse به طور پیش‌فرض از اتصال Redis پیش‌فرض شما استفاده می‌کند ، اما می‌توانید آن را از طریق PULSE_REDIS_CONNECTION متغیر محیطی سفارشی کنید:

PULSE_REDIS_CONNECTION=pulse

هنگام استفاده از Redis ingest، باید pulse:work دستور نظارت بر جریان و انتقال ورودی‌ها از Redis به جداول پایگاه داده Pulse را اجرا کنید.

php artisan pulse:work

برای اینکه pulse:work فرآیند به‌طور دائم در پس‌زمینه اجرا شود، باید از یک مانیتور فرآیند مانند Supervisor استفاده کنید تا مطمئن شوید که Pulse worker از کار کردن متوقف نمی‌شود.

از آنجایی که pulse:work فرمان یک فرآیند طولانی مدت است، بدون راه اندازی مجدد، تغییراتی را در پایگاه کد شما مشاهده نخواهد کرد. شما باید با فراخوانی دستور pulse:restart در طول فرآیند استقرار برنامه خود، فرمان را مجدداً راه اندازی کنید:

php artisan pulse:restart

Pulse از حافظه پنهان برای ذخیره سیگنال‌های راه‌اندازی مجدد استفاده می‌کند، بنابراین قبل از استفاده از این ویژگی باید بررسی کنید که درایور حافظه پنهان برای برنامه شما به درستی پیکربندی شده است.

نمونه برداری

به طور پیش‌فرض، Pulse هر رویداد مرتبطی را که در برنامه شما رخ می‌دهد، ثبت می‌کند. برای برنامه های پرترافیک، این امر می تواند منجر به نیاز به جمع آوری میلیون ها ردیف پایگاه داده در داشبورد شود، به خصوص برای دوره های زمانی طولانی تر.

در عوض، می‌توانید «نمونه‌گیری» را در برخی از ضبط‌کننده‌های داده پالس فعال کنید. به عنوان مثال، تنظیم نرخ نمونه بر 0.1 روی User Requests ضبط کننده به این معنی است که شما فقط 10٪ از درخواست ها را به برنامه خود ضبط می کنید. در داشبورد، مقادیر بزرگ‌تر می‌شوند و با پیشوند a ~ نشان می‌دهند که تقریبی هستند.

به طور کلی، هرچه تعداد ورودی‌های بیشتری برای یک معیار خاص داشته باشید، می‌توانید با خیال راحت نرخ نمونه را بدون کاهش دقت زیاد تنظیم کنید.

پیرایش

هنگامی که Pulse در خارج از پنجره داشبورد قرار گرفت، ورودی های ذخیره شده خود را به طور خودکار برش می دهد. برش زمانی اتفاق می‌افتد که داده‌ها را با استفاده از یک سیستم قرعه‌کشی که ممکن است در فایل پیکربندی Pulse سفارشی‌سازی شود، مصرف می‌کند .

رسیدگی به موارد استثنای پالس

اگر هنگام گرفتن داده‌های Pulse استثنایی رخ دهد، مانند عدم اتصال به پایگاه داده ذخیره‌سازی، Pulse بی‌صدا نمی‌تواند از تأثیرگذاری بر برنامه شما جلوگیری کند.

اگر می‌خواهید نحوه رسیدگی به این استثنائات را سفارشی کنید، می‌توانید روش را بسته کنید handleExceptionsUsing :

use Laravel\Pulse\Facades\Pulse;
use Illuminate\Support\Facades\Log;
 
Pulse::handleExceptionsUsing(function ($e) {
Log::debug('An exception happened in Pulse', [
'message' => $e->getMessage(),
'stack' => $e->getTraceAsString(),
]);
});

کارت های سفارشی

پالس به شما امکان می دهد کارت های سفارشی بسازید تا داده های مربوط به نیازهای خاص برنامه خود را نمایش دهید. Pulse از Livewire استفاده می کند ، بنابراین ممکن است بخواهید اسناد آن را قبل از ساخت اولین کارت سفارشی خود مرور کنید.

اجزای کارت

ایجاد یک کارت سفارشی در Laravel Pulse با گسترش Card کامپوننت Livewire پایه و تعریف نمای مربوطه شروع می شود:

namespace App\Livewire\Pulse;
 
use Laravel\Pulse\Livewire\Card;
use Livewire\Attributes\Lazy;
 
#[Lazy]
class TopSellers extends Card
{
public function render()
{
return view('livewire.pulse.top-sellers');
}
}

هنگام استفاده از ویژگی بارگذاری تنبل Livewire ، Card کامپوننت به طور خودکار یک مکان نگهدار ارائه می دهد که به ویژگی ها cols و rows ویژگی های ارسال شده به مؤلفه شما احترام می گذارد.

هنگام نوشتن نمای متناظر کارت پالس خود، می توانید از اجزای Pulse's Blade برای ظاهر و احساس ثابت استفاده کنید:

<x-pulse::card :cols="$cols" :rows="$rows" :class="$class" wire:poll.5s="">
<x-pulse::card-header name="Top Sellers">
<x-slot:icon>
...
</x-slot:icon>
</x-pulse::card-header>
 
<x-pulse::scroll :expand="$expand">
...
</x-pulse::scroll>
</x-pulse::card>

متغیرها $cols ،،، و باید به اجزای Blade مربوطه $rows خود منتقل شوند تا طرح بندی کارت از نمای داشبورد سفارشی شود. همچنین ممکن است بخواهید ویژگی را در نمای خود قرار دهید تا کارت به طور خودکار به روز شود. $class $expand wire:poll.5s=""

هنگامی که جزء و الگوی Livewire خود را تعریف کردید، کارت ممکن است در نمای داشبورد شما قرار گیرد :

<x-pulse>
...
 
<livewire:pulse.top-sellers cols="4" />
</x-pulse>

اگر کارت شما در یک بسته گنجانده شده است، باید با استفاده از Livewire::component روش، کامپوننت را در Livewire ثبت کنید.

طراحی ظاهر

اگر کارت شما به استایل اضافی فراتر از کلاس ها و اجزای موجود در Pulse نیاز دارد، چند گزینه برای گنجاندن CSS سفارشی برای کارت های شما وجود دارد.

ادغام لاراول وایت

اگر کارت سفارشی شما در پایه کد برنامه شما زندگی می کند و از ادغام لاراول Vite استفاده می کنید ، می توانید vite.config.js فایل خود را به روز کنید تا یک نقطه ورودی CSS اختصاصی برای کارت خود داشته باشید:

laravel({
input: [
'resources/css/pulse/top-sellers.css',
// ...
],
}),

سپس می توانید از @vite دستورالعمل Blade در نمای داشبورد خود استفاده کنید و نقطه ورودی CSS را برای کارت خود مشخص کنید:

<x-pulse>
@vite('resources/css/pulse/top-sellers.css')
 
...
</x-pulse>

فایل های CSS

برای موارد استفاده دیگر، از جمله کارت‌های Pulse موجود در یک بسته، می‌توانید به Pulse دستور دهید تا با تعریف روشی css در مؤلفه Livewire، به Pulse دستور دهید که شیوه نامه‌های اضافی را بارگیری کند.

class TopSellers extends Card
{
// ...
 
protected function css()
{
return __DIR__.'/../../dist/top-sellers.css';
}
}

هنگامی که این کارت در داشبورد قرار می گیرد، Pulse به طور خودکار محتویات این فایل را در یک <style> برچسب قرار می دهد، بنابراین نیازی به انتشار آن در فهرست نیست public .

Tailwind CSS

هنگام استفاده از Tailwind CSS، باید یک فایل پیکربندی اختصاصی Tailwind ایجاد کنید تا از بارگیری CSS غیرضروری یا تضاد با کلاس‌های Tailwind Pulse جلوگیری کنید:

export default {
darkMode: 'class',
important: '#top-sellers',
content: [
'./resources/views/livewire/pulse/top-sellers.blade.php',
],
corePlugins: {
preflight: false,
},
};

سپس می توانید فایل پیکربندی را در نقطه ورودی CSS خود مشخص کنید:

@config "../../tailwind.top-sellers.config.js";
@tailwind base;
@tailwind components;
@tailwind utilities;

همچنین باید یک id یا ویژگی را در نمای کارت خود بگنجانید که با انتخابگر ارسال شده به استراتژی انتخابگر class Tailwind مطابقت دارد : important

<x-pulse::card id="top-sellers" :cols="$cols" :rows="$rows" class="$class">
...
</x-pulse::card>

جمع آوری و جمع آوری داده ها

کارت های سفارشی ممکن است داده ها را از هر کجا واکشی و نمایش دهند. با این حال، ممکن است بخواهید از سیستم ضبط و تجمیع داده قدرتمند و کارآمد Pulse استفاده کنید.

ثبت ورودی ها

Pulse به شما اجازه می دهد تا با استفاده از روش زیر "ورودی ها" را ضبط کنید Pulse::record :

use Laravel\Pulse\Facades\Pulse;
 
Pulse::record('user_sale', $user->id, $sale->amount)
->sum()
->count();

اولین آرگومان ارائه شده به روش برای ورودیی record است که ثبت می کنید، در حالی که آرگومان دوم تعیین می کند که چگونه داده های انبوه باید گروه بندی شوند. برای بیشتر روش‌های تجمیع، باید a را نیز مشخص کنید تا انباشته شود. در مثال بالا، مقدار جمع آوری شده برابر است . سپس می‌توانید یک یا چند روش تجمیع (مانند ) را فراخوانی کنید تا Pulse بتواند مقادیر از پیش تجمیع‌شده را در «سطل‌ها» برای بازیابی کارآمد بعداً جمع‌آوری کند. type key value $sale->amount sum

روش های تجمیع موجود عبارتند از:

  • avg
  • count
  • max
  • min
  • sum

هنگام ساخت یک بسته کارتی که شناسه کاربری تأیید شده فعلی را ضبط می کند، باید از روشی استفاده کنید Pulse::resolveAuthenticatedUserId() که به هر گونه سفارشی سازی حل کننده کاربر در برنامه کاربردی احترام می گذارد.

بازیابی داده های کل

Card هنگام گسترش مؤلفه Livewire Pulse ، می‌توانید از aggregate روش برای بازیابی داده‌های انبوه برای دوره‌ای که در داشبورد مشاهده می‌شود استفاده کنید:

class TopSellers extends Card
{
public function render()
{
return view('livewire.pulse.top-sellers', [
'topSellers' => $this->aggregate('user_sale', ['sum', 'count']);
]);
}
}

متد aggregate مجموعه ای از stdClass اشیاء PHP را برمی گرداند. هر شی شامل key ویژگی ثبت شده قبلی، همراه با کلیدهای هر یک از مجموعه های درخواستی می شود:

@foreach ($topSellers as $seller)
{{ $seller->key }}
{{ $seller->sum }}
{{ $seller->count }}
@endforeach

پالس در وهله اول داده ها را از سطل های از پیش تجمیع شده بازیابی می کند. بنابراین، سنگدانه های مشخص شده باید با استفاده از این روش از قبل گرفته شده باشند Pulse::record . قدیمی‌ترین سطل معمولاً تا حدی خارج از دوره قرار می‌گیرد، بنابراین Pulse قدیمی‌ترین ورودی‌ها را برای پر کردن شکاف جمع‌آوری می‌کند و مقدار دقیقی را برای کل دوره ارائه می‌کند، بدون اینکه نیازی به تجمیع کل دوره در هر درخواست نظرسنجی باشد.

همچنین می توانید با استفاده از روش، مقدار کل را برای یک نوع معین بازیابی کنید aggregateTotal . به عنوان مثال، روش زیر به جای گروه‌بندی آن‌ها بر اساس کاربر، کل فروش‌های کاربران را بازیابی می‌کند.

$total = $this->aggregateTotal('user_sale', 'sum');

نمایش کاربران

هنگام کار با مجموعه هایی که شناسه کاربری را به عنوان کلید ثبت می کنند، می توانید کلیدهای سوابق کاربر را با استفاده از Pulse::resolveUsers روش زیر حل کنید:

$aggregates = $this->aggregate('user_sale', ['sum', 'count']);
 
$users = Pulse::resolveUsers($aggregates->pluck('key'));
 
return view('livewire.pulse.top-sellers', [
'sellers' => $aggregates->map(fn ($aggregate) => (object) [
'user' => $users->find($aggregate->key),
'sum' => $aggregate->sum,
'count' => $aggregate->count,
])
]);

این find روش یک شی شامل، و کلیدها را برمی گرداند name که extra می avatar توانید به صورت اختیاری آنها را مستقیماً به <x-pulse::user-card> جزء Blade ارسال کنید:

<x-pulse::user-card :user="{{ $seller->user }}" :stats="{{ $seller->sum }}" />

ضبط کننده های سفارشی

نویسندگان بسته ممکن است بخواهند کلاس های ضبط کننده را ارائه دهند تا به کاربران اجازه دهند تا ضبط داده ها را پیکربندی کنند.

ضبط کننده ها در recorders بخش فایل پیکربندی برنامه ثبت می شوند config/pulse.php :

[
// ...
'recorders' => [
Acme\Recorders\Deployments::class => [
// ...
],
 
// ...
],
]

ضبط کننده ها ممکن است با مشخص کردن یک $listen ویژگی به رویدادها گوش دهند. Pulse به طور خودکار شنوندگان را ثبت می کند و record روش ضبط کننده را فراخوانی می کند:

<?php
 
namespace Acme\Recorders;
 
use Acme\Events\Deployment;
use Illuminate\Support\Facades\Config;
use Laravel\Pulse\Facades\Pulse;
 
class Deployments
{
/**
* The events to listen for.
*
* @var array<int, class-string>
*/
public array $listen = [
Deployment::class,
];
 
/**
* Record the deployment.
*/
public function record(Deployment $event): void
{
$config = Config::get('pulse.recorders.'.static::class);
 
Pulse::record(
// ...
);
}
}