+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
شرلوک که حالا به استفاده از *API*های مختلف برای اتصال به سازمانها عادت کرده، در هنگام اتصال به *API*های اسکاتلند یارد دچار مشکل میشود. او که فرصت کمی برای بررسی مشکل دارد، از واتسون میخواهد با بررسی لاگهای سرویسهای اسکاتلند یارد سرویسهای دچار مشکل را پیدا کرده و مشکل آنها را گزارش کند.
معماری داخلی سرویسهای اسکاتلند یارد میکروسرویس است، در این معماری سرویسهای متعددی وجود دارند که هر یک وظیفه مشخصی دارند و ممکن است برای پاسخ به درخواست کاربر، گروهی از آنها با یکدیگر ارتباط برقرار کرده تا پاسخ درخواست را آماده کنند.
در این معماری برای عیب یابی و دنبال کردن مسیر درخواست کاربرها در سرویسها، به هر درخواست یک آیدی منحصر به فرد اختصاص داده شده و با استفاده از این آیدی، اعمالی که هر سرویس در مسیر شروع تا پاسخگویی به درخواست انجام داده ثبت میشود.
اگر دقت کنیم، متوجه میشویم که میتوان هر یک از این اعمال (ارتباط با یک سرویس دیگر) را به شکل یک درخواست و پاسخ مستقل نگاه کرد. با توجه به این مسئله هر یک از این اعمال را به عنوان یک واحد مستقل به نام *Span* میشناسیم.
با این تعریف هر *Span* میتواند شامل *Span* های متفاوتی شود.
برای مثال اگر معماری زیر را داشته باشیم:
![معماری میکروسرویس مثال](https://quera.org/qbox/view/YSu6DagXbI/microservices.png)
مسیر یک درخواست میتواند به شکل زیر باشد (خطوط افقی همان *Span* ها هستند):
![درخواست نمونه](https://quera.org/qbox/view/qORkv0AVko/trace.png)
همچنین ممکن است که یک درخواست دچار مشکل شود. در اینصورت، *Span* آن و تمامی *Span* های والد آن نیز دچار مشکل میشوند. برای مثال میتوانید مسیر درخواستی که با خطا مواجه شده را در تصویر زیر مشاهده کنید:
![درخواست نمونه با خطا](https://quera.org/qbox/view/TRdAyyPyQl/error-trace.png)
اسکاتلند یارد، دادههای درخواستهای خود را به صورت فایلهای *JSON* در اختیار دارد اما ابزاری برای تحلیل آنها ندارد.
به واتسون کمک کنید ابزاری توسعه دهد که با استفاده از این اطلاعات مشکل را پیدا کرده و در صورتی که درخواست با خطا مواجه شده، اطلاعات آن خطا و سرویسی که باعث آن خطا بوده را پیدا کرده و چاپ کند و در غیر اینصورت، بگوید که مشکلی در درخواست وجود نداشته.
در قدم اول برای آشنایی شما با روند حل این مسئله، میتوانید با دریافت فایل لاگ نمونه و مشاهده ورودی و خروجی مورد انتظار، رابطه بین آنها را کشف کنید. سپس از شما انتظار میرود که برنامهای بنویسید که لاگها را از `stdin` دریافت و به صورت اتوماتیک با توجه به ورودی، خروجی مورد انتظار را پیدا کرده و چاپ کند.
# ورودی نمونه
[فایل درخواست سالم](https://quera.org/qbox/view/NphuIlzCSV/correct.json)
[فایل درخواست با خطا](https://quera.org/qbox/view/80z7LPrySC/error.json)
# خروجی نمونه
برای درخواست اول باید برنامه شما عبارت `Provided request has no errors` را چاپ و برای درخواست دوم اطلاعات زیر را به همین شکل چاپ کند:
```
Service: CIA
Address: 127.0.0.1:41251
Route: /getCriminalData
Message: Network error
```
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.