- محدودیت زمان: ۱ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
شرلوک که حالا به استفاده از APIهای مختلف برای اتصال به سازمانها عادت کرده، در هنگام اتصال به APIهای اسکاتلند یارد دچار مشکل میشود. او که فرصت کمی برای بررسی مشکل دارد، از واتسون میخواهد با بررسی لاگهای سرویسهای اسکاتلند یارد سرویسهای دچار مشکل را پیدا کرده و مشکل آنها را گزارش کند.
معماری داخلی سرویسهای اسکاتلند یارد میکروسرویس است، در این معماری سرویسهای متعددی وجود دارند که هر یک وظیفه مشخصی دارند و ممکن است برای پاسخ به درخواست کاربر، گروهی از آنها با یکدیگر ارتباط برقرار کرده تا پاسخ درخواست را آماده کنند.
در این معماری برای عیب یابی و دنبال کردن مسیر درخواست کاربرها در سرویسها، به هر درخواست یک آیدی منحصر به فرد اختصاص داده شده و با استفاده از این آیدی، اعمالی که هر سرویس در مسیر شروع تا پاسخگویی به درخواست انجام داده ثبت میشود.
اگر دقت کنیم، متوجه میشویم که میتوان هر یک از این اعمال (ارتباط با یک سرویس دیگر) را به شکل یک درخواست و پاسخ مستقل نگاه کرد. با توجه به این مسئله هر یک از این اعمال را به عنوان یک واحد مستقل به نام Span میشناسیم.
با این تعریف هر Span میتواند شامل Span های متفاوتی شود.
برای مثال اگر معماری زیر را داشته باشیم:
مسیر یک درخواست میتواند به شکل زیر باشد (خطوط افقی همان Span ها هستند):
همچنین ممکن است که یک درخواست دچار مشکل شود. در اینصورت، Span آن و تمامی Span های والد آن نیز دچار مشکل میشوند. برای مثال میتوانید مسیر درخواستی که با خطا مواجه شده را در تصویر زیر مشاهده کنید:
اسکاتلند یارد، دادههای درخواستهای خود را به صورت فایلهای JSON در اختیار دارد اما ابزاری برای تحلیل آنها ندارد.
به واتسون کمک کنید ابزاری توسعه دهد که با استفاده از این اطلاعات مشکل را پیدا کرده و در صورتی که درخواست با خطا مواجه شده، اطلاعات آن خطا و سرویسی که باعث آن خطا بوده را پیدا کرده و چاپ کند و در غیر اینصورت، بگوید که مشکلی در درخواست وجود نداشته.
در قدم اول برای آشنایی شما با روند حل این مسئله، میتوانید با دریافت فایل لاگ نمونه و مشاهده ورودی و خروجی مورد انتظار، رابطه بین آنها را کشف کنید. سپس از شما انتظار میرود که برنامهای بنویسید که لاگها را از stdin
دریافت و به صورت اتوماتیک با توجه به ورودی، خروجی مورد انتظار را پیدا کرده و چاپ کند.
ورودی نمونه
خروجی نمونه
برای درخواست اول باید برنامه شما عبارت Provided request has no errors
را چاپ و برای درخواست دوم اطلاعات زیر را به همین شکل چاپ کند:
Service: CIA
Address: 127.0.0.1:41251
Route: /getCriminalData
Message: Network error
ارسال پاسخ برای این سؤال