Watchtower؛ داشبورد یکجای صفها و خطاهای لاراول
خلاصهٔ کاملتر
به گفتهٔ نویسنده، Watchtower یه پکیج لاراوله که سهتا از دردسرهای همیشگی مانیتورینگ یعنی زمانبندی، صفها و خطاها رو تو یه داشبورد واحد جمع میکنه؛ داشبوردی که برای روشنموندن تو پروداکشن ساخته شده. برخلاف ابزارایی که فقط وضعیت رو نشون میدن، اینجا میتونی خودت هم دست به کار بشی: یه تسک رو دستی اجرا کنی، جابهای فیلشده رو دستهای ریترای کنی و خطاها رو رفعشده علامت بزنی.
داشبورد سهتا تب داره. تب Schedule هر تسک زمانبندیشده رو با عبارت cron به زبون ساده، تاریخچهٔ اجرا، مدتزمان و تشخیص اجراهای ازدسترفته نشون میده و یه دکمهٔ «Run now» هم برای اجرای فوری داره. تب Queues & Jobs متریکهای زندهٔ صف رو کنار جدول جابهای فیلشده میذاره، جایی که میتونی یه جاب رو تکی یا بر اساس نوع خطا و بازهٔ زمانی دستهای ریترای کنی. تب Errors هم خطاها رو بر اساس نوع و تعداد گروهبندی میکنه و استکتریس کامل و کنترلهای resolve/reopen رو میده.
هیچکدوم از اینا به یه درایور خاص گره نخورده؛ صفها میتونن روی دیتابیس، Redis یا SQS بچرخن و وقتی اپت چند دیتابیس یا چند tenant داره، Watchtower از یه کانکشن جدا میخونه. یعنی نیازی به Redis نداری و ستاپهای multi-tenant هم پشتیبانی میشن.
نویسنده تأکید میکنه که ثبت فعالیت تو هر ریکوئست و جاب میتونه خودش به یه بار اضافه رو اپ تبدیل شه، برای همین Watchtower نوشتن رو به کالبک terminating() لاراول موکول میکنه تا از مسیر ریکوئست کنار بمونه. اپهای پرترافیک میتونن با یه نرخ نمونهگیری فقط بخشی از فعالیت رو ثبت کنن ولی همچنان هر فیل و هر اجرای زمانبندی گرفته میشه، و فیلدهای ذخیرهشده هم برای محدودموندن حجم رکورد بریده میشن.
بیشتر این تنظیمات از طریق متغیرهای محیطی کنترل میشن. مثلاً میشه کانکشن دیتابیس مانیتورینگ، نرخ نمونهگیری و بازهٔ نگهداری رکوردها رو اینجوری ست کرد:
WATCHTOWER_DB_CONNECTION=monitoring
WATCHTOWER_SAMPLING_RATE=0.25
WATCHTOWER_RETAIN_EXCEPTIONS=30
یه دستور روزانهٔ watchtower:prune هم رکوردهای قدیمی رو بر اساس بازهٔ نگهداری هر نوع پاک میکنه؛ بهصورت پیشفرض ۳۰ روز برای اجراهای زمانبندی و خطاها و ۷ روز برای رکوردهای صف. با WATCHTOWER_ENABLED=false هم میتونی مثل یه کلید قطع، ثبت رو فوری متوقف کنی.
دسترسی به داشبورد بهصورت پیشفرض فقط تو محیط لوکاله و برای بازکردنش جای دیگه باید gate به اسم viewWatchtower تعریف کنی؛ سبکش هم مثل Horizon و Telescopeئه. علاوهبر این، Watchtower میتونه موقع فیلشدن یه تسک، ازدسترفتن یه اجرا یا عبور جابهای فیلشده از یه آستانه (پیشفرض ۲۵ تا تو ۶۰ دقیقه) از طریق Slack، وبهوک یا ایمیل بهت هشدار بده. این پکیج به PHP 8.2+ و لاراول ۱۱ یا ۱۲ نیاز داره و تحت لایسنس MIT منتشر شده.
نکات کلیدی:
- یه داشبورد واحد برای تسکهای زمانبندیشده، صفها، جابها و خطاها، با امکان اجرا، ریترای دستهای و رفع خطا
- کار با هر درایور صفی (دیتابیس، Redis، SQS) و پشتیبانی از ستاپهای single/multi-database و multi-tenant
- امن برای پروداکشن: نوشتن معوق با terminating()، نمونهگیری، بریدن فیلدها و پاکسازی خودکار با watchtower:prune
- کنترل دسترسی با gate به سبک Horizon و Telescope و هشدارهای اختیاری روی Slack، وبهوک یا ایمیل
- نیاز به PHP 8.2+ و لاراول ۱۱ یا ۱۲، لایسنس MIT




