ایشوها و رخدادها (Issues & Events)
نحوه تمایز رخدادهای مجزا از خطاهای تجمیعشده، اثرانگشت هوشمند و چرخه حیات ایشوها.
تفاوت رخداد (Event) و ایشو (Issue)
تصور کنید یک خطای NullPointerException در صفحه تسویهحساب برای ۱۴۷ کاربر مختلف رخ میدهد. اگر داشبورد شما ۱۴۷ رکورد جداگانه و پراکنده به شما نشان دهد، مدیریت و بررسی آنها غیرممکن خواهد بود.
دیدبان این تمایز را با دو مفهوم اساسی حل میکند:
- رخداد (Event): یک رویداد کرش مشخص روی دستگاه یک کاربر در یک زمان خاص، به همراه کلیه مشخصات سختافزاری، نسخه سیستمعامل و ردپاهای متنی آن کاربر.
- ایشو (Issue): یک مشکل نرمافزاری ریشهای مشترک که تمام ۱۴۷ رخداد بالا را در خود جمعآوری کرده و امکان تعیین وضعیت، بررسی روند شیوع و حل آن را فراهم میسازد.
اثرانگشت و گروهبندی (Fingerprinting)
دیدبان چگونه تشخیص میدهد که کدام رخدادها متعلق به یک ایشوی مشترک هستند؟
هنگام دریافت هر رخداد، سرور دیدبان فریمهای استک را بررسی کرده و با صرفنظر از نویزهای متغیر (مانند آدرسهای حافظه گذرا یا خطوط داخلی رانتایم)، فریمهای پایدار کد برنامه و کلاس استثنا را نرمالسازی میکند. از این ترکیب، یک اثرانگشت پایدار (Fingerprint) تولید میشود. تمام رخدادهایی که اثرانگشت یکسانی تولید کنند، به همان ایشو ملحق میشوند.
چرخه حیات ایشو (Issue Lifecycle)
هر ایشو در دیدبان دارای یکی از سه وضعیت زیر است:
باز (Open)
وضعیت پیشفرض برای هر ایشوی جدید. نشان میدهد که این خطا فعال است و نیاز به بررسی تیم توسعه دارد.
حلشده (Resolved)
توسعهدهنده پس از اعمال اصلاحیه، ایشو را در داشبورد حلشده علامتگذاری میکند. این تصمیم نشاندهنده جریان کاری تیم است.
بازگشته (Regressed)
اگر پس از حل یک ایشو، رخداد جدیدی با همان اثرانگشت به دیدبان برسد، وضعیت ایشو بهطور خودکار به Regressed تغییر میکند.
تشخیص بازگشت بر اساس زمان رخداد
یک نکته کلیدی در معماری دیدبان: تشخیص بازگشت خطا (Regression) بر اساس زمان وقوع رخداد (occurred_at) و ترتیب دریافت رخداد در پایگاهداده انجام میشود، نه صرفاً بر اساس بزرگتر بودن کد نسخه (Version Code). این رفتار تضمین میکند که رخدادهای با تاخیر رسیدهشده از نسخههای قدیمی بهاشتباه باعث بازگشت یک ایشوی اصلاحشده در نسخه جدید نشوند.