آشنائی با Logging  و Profiling در نرم افزار JIRA

در علوم کامپیوتر به فرایندی که رویداد های اتفاق افتاده یا پیغام های ارسال شده بین کاربران در سیستم را ثبت می کند فرایند Logging و به فایلی که این اطلاعات در ان ثبت می شود Log File می گوئیم. در مقابل Profiling به عملیاتی گفته می شود که در آن میزان منابع مورد استفاده سیستم، زمان اجرای تراکنش های مختلف و … در سیستم کامپیوتری ثبت می شود تا برای اهداف بهینه سازی سیستم از ان استفاده شود. در این پست به معرفی این دو مورد می پردازیم: در نرم افزار JIRA لاگ سیستم در یک فایل در JIRA Home سیستم شما نوشته می شود. این فایل با نام atlassian-jira.log در مسیر JIRA Home قابل دستیابی است. چنانچه مسیر JIRA Home سیستم خود را نمی دانید، می توانید با مراجعه به System Info در منوی مدیریت JIRA در بخش File Path آن را مشاهده کنید. برای مثال مسیر JIRA Home سیستم من به صورت زیر است:   نرم افزار JIRA برای ثبت لاگ های خود از ماژول قدرتمند Log4j استفاده می کند. در این ماژول ۵ سطح برای ثبت لاگ های سیستم در نظر گرفته شده است. این سطوح شامل DEBUG، INFO، WARN ،ERROR و FATAL هستند. هر سطح از این لاگ ها، اطلاعات بیشتری را نسبت به سطح قبل فراهم می کند. DEBUG بیشترین سطح اطلاعات و FATAL کمترین سطح اطلاعات را در Logfile فراهم خواهد کرد. سطح پیشفرض برای ثبت لاگ ها WARN هست. گاهی اوقات لازم هست این سطح را به INFO یا DEBUG افزایش دهیم تا بتوانیم اطلاعات بیشتری را از لاگ استخراجی فراهم کنیم. این مقدار Default می تواند به صورت دائم یا موقت به سطح دیگری تغییر کند. برای مثال مواقعی که به دنبال حل یک مشکل در JIRA هستیم بهتر است که مقدار آن را از WARN به INFO تغییر دهیم تا بتوانیم اطلاعات بیشتر ی ار از فایل خود استخراج کنیم. برای مشاهده Logger های پیش فرض JIRA و سایر گزینه های موجود می توانید به بخش مدیریت JIRA، منوی System و سپس TROUBLESHOOTING AND SUPPORT مراجعه کرده و از آنجا وارد Logging & Profiling شوید. از آنجائی که حجم لاگ تولیدی توسط JIRA و البته سایر برنامه ها خیلی زیاد هست، معمولا مشاهده لاگ فایل ها کاری خسته کننده است، من برای تسهیل این کار به جای استفاده از Notepad ویندوز، از Notepad++ استفاده می کنم. خوبی این برنامه این هست که به صورت پیش فرض امکان این رو داره که فایل های مختلف رو با فرمت های مختلف مشاهده کرد. برای مثال چنانچه یک XML رو مشاهده می کنید، با تنظیم زبان مورد نظر از منوی Language می توانید فایل خود را بهتر مشاهده کنید. برای حل مشکل مشاهده لاگ جیرا، من یک زبان مخصوص لاگ JIRA تنظیم کردم که هر کدام از این سطوح لاگ را با یک رنگ خاص نمایش میده و اگه دوس داشتین می تونین از اینجا دانلود کنین و از بخش Define Your Language در منوی Language، به داخل برنامه Import کنین. بعد از اضافه کردن این فایل، لاگ فایل JIRA به صورت زیر قابل مشاهده است: در ادامه مطلب به معرفی Profiling می پردازم. چنانچه حس کردیم JIRA نسبت به قبل عملکردش کاهش یافته و کاربران از سرعت کم بارگزاری آن در سیستم خود شکایت دارند، شاید بهتر باشد حالت Profiling را فعال کنیم و دلیل کاهش سرعت آن را مشاهده کنیم. برای فعال سازی حالت Profiling از همان منوی Logging & Profiling که در مرحله قبل به ان اشاره شد اقدام کرده و بر روی ENABLE همانند تصویر زیر عمل می کنیم:نمونه ای از ردیابی Profiling در پایین نمایش داده شده است: امیدوارم از این مطلب استفاده لازم را برده باشید.  

معرفی پلاگین Lookup Manager و نحوه استفاده از آن JIRA

یک از ویژگی های خوب و کار راه اندازی که قبلا در جداول اکسل استفاده می کردم تابع Lookup بود. این تابع یک مقدار ورودی می گیرد، آن مقدار را در یکی از ستون های جدولی که به عنوان رفرنس معرفی می کنیم جستجو می کند و مقدار نتیجه را در همان سطر و از ستونی دیگر به عنوان خروجی تابع بر می گرداند. برای روشن تر شدن موضوع مثال زیر را با هم می بینیم. در این مثال می خواهیم با وارد کردن شماره پرسنلی هر نفر (ورودی تابع)، سمت شخص مورد نظر را از جدول بگیریم(خروجی تابع). در این حالت تابع مورد نظر را به صورتی که در تصویر مشخص شده است در اکسل وارد کردیم و همانطور که مشاهده می کنید، با وارد کردن شماره پرسنلی آقای روح الله شمس الدینی، سمت وی که سرشیفت بوده است در فیلد L10 نمایش داده شده است. حال که با این ویژگی آشنا شدید، نحوه استفاده و کاربرد آن را در JIRA با هم بررسی خواهیم کرد. مثالی که در اینجا معرفی می شود، سناریوئی کاربردی است که برای دموی جیرا به یکی از مشتریان پارس دانی سان ارائه شده است. سیستم پشتیبانی مشتریان سازمان خود را در نظر بگیرید. فرض کنید براساس انواع درخواست هائی (منظورم Issue Type نیست) که وارد سازمان می شوند، می توان هر درخواست را به صورت اتوماتیک به شخص مورد نظر هدایت کرد. پیشنهاد قبلی که معمولا در جلسات آموزشی به همکاران آموزش داده می شد و در پارس دانی سان هم از این روش استفاده می شود به این صورت هست که شما پروژه مورد نظر خود را بر اساس همین نوع درخواست ها به یک سری زیرپروژه یا Component تقسیم می کنید و شخص مورد نظر رو به عنوان Component Lead انتخاب می کنید. در این حالت هر Issue که به داخل کامپوننت مورد نظر هدایت شود، اتوماتیک به کاربر Component Lead تخصیص داده خواهد شد. به طور مثال درخواست های مربوط به کلاس های آموزشی که از طریق درگاه پشتیبانی پارس دانی سان دریافت می شوند، به کاربر پشتیبان راهبری تخصیص داده خواهد شد. اما بخش اصلی که در این پست می خواستم به آن بپردازم، ترکیب دو ویژگی معرفی شده در بالا با استفاده از پلاگین Lookup Manager هست. این پلاگین به من اجازه می دهد که  – از طریق Post Function تعریف شده در یک Transition از Workflow مورد نظرم، مقادیر یکی از فیلد های JIRA را به عنوان ورودی تابع Lookup در نظر بگیرم،  – آن را در جدولی که مد نظر دارم جستجو کنم،  – مقدار فیلد مقصد را از جدول از پیش تعریف شده توسط خودم استخراج کنم،  – با آن فیلد مقصد را آپدیت کنم. اجازه دهید ادامه پست را با یک مثال ادامه دهم. فرض کنید در سازمان من ۵ نوع درخواست وجود دارد که از طریق یک کاستوم فیلد از نوع Select List از کاربر درخواست می شود و هر درخواست مشخصا توسط یک نفر انجام می شود(مفهوم Assignee). همچنین در نظر بگیرید که مدیریت سازمان مایل هست قبل از شروع به صرف زمان بر روی کارها، لازم است عنوان کار توسط تعدادی سرپرست تائید شود. در اینجا فرض می کنیم از این ۵ نوع درخواست، ۲ نوع اول توسط آقای خلیلی و ۳ نوع دیگر توسط آقای احمدی باید ابتدا تائید و سپس به Assignee ها تخصیص داده شود. این اطلاعات رو به صورت خلاصه در جدول زیر درج کرده ام: پس از نصب پلاگین Lookup Manager از طریق بخش تعریف Table می توان به هر تعدادی که مورد نیاز هست، جدول تعریف کرده و در گردش کارهای مختلف از آن استفاده کرد. جدولی که برای سناریو بالا من ایجاد کرده ام به صورت زیر است: دقت شود که در اینجا چون من قصد دارم مقدار فیلد Assignee رو مشخص کنم، لازم هست دقیقا مطابق نام کاربری هر شخص را در فیلد مربوطه درج کنم. برای ادامه کار بر روی Transition مربوطه کلیک می کنم و Post Function مربوطه را انتخاب می کنم. در این مثال من به Transition “ایجاد” مطابق تصویر زیر یک Post Function اضافه می کنم: در مرحله بعد transition را مطابق تصویر زیر انتخاب می کنم: در ادامه پارامتر های Transition را مطابق تصویر زیر انتخاب می کنم. همانطور که مشخص است فیلد ها به صورت زیر تنظیم شده اند:  – Source Filed را بر روی فیلد نوع کار که شامل همان مقادیر پشتیبانی، آموزش، خرید محصول، فروش محصول و بازاریابی هست،  – در فیلد Lookup Table اسم جدول،  – در Search Column نام جدولی که مقدار فیلد نوع کار باید مطابقت داده شود،  – در فیلد Matched Column ستون حاوی مقدار خروجی تابع،  – در فیلد Destination Field فیلدی که خروجی تابع در ان قرار می گیرد انتخاب شده است،  – فیلد post Function هم که با نام Action if No Records Matched هم مشخص می کند که اگر هیچ رکوردی با مقدار ورودی تابع متناسب نبود، چه اتفاقی بیفتد. برای مثال گزینه فعلی به این معنی است که Transition مربوطه انجام نشود. پس از اتمام کار بر روی دکمه Add کلیک کرده و گردش کار خود را به پروژه ی مربوطه تخصیص دهید. چنانچه سوالی دارید، خوشحال میشیم که با ما در میان بگذارید.