<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های amir.shirazi</title>
        <link>https://virgool.io/feed/@amir.shirazi</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-18 02:52:12</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/135779/avatar/2tb1rx.png?height=120&amp;width=120</url>
            <title>amir.shirazi</title>
            <link>https://virgool.io/@amir.shirazi</link>
        </image>

                    <item>
                <title>Scraping imdb top 100 with help of Cheerio and Nightmare.js</title>
                <link>https://virgool.io/@amir.shirazi/scraping-imdb-top-100-with-help-of-cheerio-and-nightmarejs-x8dof5ajr9lb</link>
                <description>در این پست با استفاده از nightmare.js یک اسکریپر که آموزشش رو در اینترنت دیدم و برام جالب بود رو گذاشتم. قرار هست که سایت imdb و لیست صد تا فیلم که بالاترین امتیاز رو دارند رو استخراج کنیم:اطلاعاتی که قرار هست بگیریم: title,rank, rating, descriptionUrl, posterUrlبرای گرفتن عنوان ها، با استفاده از inspect روی عنوان کلیک میکنیم و با استفاده از copy selector به این میرسیم: #main &gt; div &gt; span &gt; div &gt; div &gt; div.lister &gt; table &gt; tbody &gt; tr:nth-child(1) &gt; td.titleColumn &gt; aنحوه گرفتن مسیر title برای گرفتن همه عنوانها از دو قسمت آخر &quot;td.titleColumn &gt; a&quot; استفاده میکنیم:حالا نوبت گرفتن rank  هست: #main &gt; div &gt; span &gt; div &gt; div &gt; div.lister &gt; table &gt; tbody &gt; tr:nth-child(1) &gt; td.ratingColumn.imdbRating &gt; strongکه td.ratingColumn.imdbRating کفایت میکنه. تو console هم میتونید نتیجه رو ببینید:کد اولیه رو تغییر میدیم که از tr شروع کنیم به جای td.title.column چون rank بیرونتر هست و باید یک سطح بالاتر بریم (خط ۸) :برای rank همون ایندکس i و برای urlDescription هم به روش مشابه بدست می آید:حالا نوبت به باز کردن لینکهای descrptionUrl هست و استخراج لینک عکسهای مربوطه. یک فانکشن دیگه داریم که خروجی فانکشن قبلی رو که یک آرایه از آبجکتهای هر فیلم هست رو میگیره، بعد لینک های هر فیلم رو میگیره و لینک عکس رو استخراج میکنه و به آبجکت مربوط به اون فیلم اضافه میکنه:حالا نوبت میرسه به nightmare.js که محتوای لینک عکس که در postUrl داریم، و محتواش کد جاوااسکریپت هست رو با اون رندر کنیم و بعد لینک مورد نظر رو بدست بیاریم:حال میتونیم فانکشن savePosterImageToDisk رو اضافه کنیم که عکس ها رو دانلود و روی دیسک در فولدر posters ذخیره کنه که در خط ۵۹ استفاده شده:همینطور که در قسمت سمت چپ میشه دید، عکسها در فولدر posters ذخیره میشوند.قصدم از این پست نشان دادن یک نمونه از کار اسکریپینگ با جاوااسکریپت بود. کدهای این پست را میتوانید از اینجا پیدا کنید.تا پست بعدی... </description>
                <category>amir.shirazi</category>
                <author>amir.shirazi</author>
                <pubDate>Mon, 17 Feb 2020 17:56:16 +0330</pubDate>
            </item>
                    <item>
                <title>مانیتور کردن زمان اجرای rest api در apm</title>
                <link>https://virgool.io/@amir.shirazi/apm-rest-api-mon-rzifzvfebjqc</link>
                <description>یکبار دنبال راهی برای گرفتن الرت در صورت طولانی شدن زمان پاسخ گویی رست هام بودم و در نهایت تبدیل به این کویری الستیک شد:به زبان ساده، در قسمت source اطلاعات url, duration, timestamp, client IP رو در خروجی خواهم داشت. بعد تعداد با size مشخص میشود که باید جایگزین result_size کنیم، در قسمت کویری هم url.path به صورت regex مشخص میشود. range-transaction.duration.us مقدارهای بالاتر از این مقدار باید در خروجی بیایند با واحد میکرو ثانیه. در بلاک بعدی مدت زمان، مثلا سی دقیقه یا یک ساعت قبل مشخص میشود و method هم get, post, ... در نهایت اسم سرویس که در apm agent در اپلیکیشن تعیین کردیم. اگریگیشن در نهایت مقدار مینیمم و ماکزیمم تمام موارد را به ما میدهد.خروجی نمونه:با کمک یک اسکریپت میتونید تک تک موارد رو چک کنید و یا اگر max_duration بیشتر از زمان مورد نظر هست یک الرت کلی بدید برای بازه مورد نظر حالا در اسلک یا زبیکس . یک ایده دیگه هم اینه یک وب سرویس بنویسیم که اگر زمان از حدی بیشتر شد رسپانس کدی غیر از ۲۰۰ بده و از یک سایت مانیتورینگ رست کال کنیم و مثلا اگر غیر از ۲۰۰ گرفتیم الرت بده. امیدوارم با این پست و پست قبلی با قابلیتهای apm و الستیک بیشتر آشنا شده باشید.</description>
                <category>amir.shirazi</category>
                <author>amir.shirazi</author>
                <pubDate>Sun, 16 Feb 2020 14:38:17 +0330</pubDate>
            </item>
                    <item>
                <title>Get APM errors into Slack</title>
                <link>https://virgool.io/@amir.shirazi/httpsvirgoolioamirshiraziget-apm-errors-in-slack-zsqvrurdrjyw</link>
                <description>اگر با اگریگیشن های مانگو یا الستیک آشنا باشید کارهای جالبی میشه انجام داد. مثلا اگر از Elasticsearch APM برای مانیتورینگ api استفاده میکنید و از سنتری به هر دلیلی استفاده نمیکنید و هزینه لیسانس اکس پک هم زیاده، برای گرفتن آگاهی از error های APM که به ایندکس مخصوص خودش در الستیک میره، میتونید یا یک اسکریپت مستقیم به الستیک http get ریکوست بزنید و نتایج رو بررسی کنید و با زبیکس یا اسلک ارور ها رو ببینید. کاری که اینجا توضیح دادم به طور خلاصه این هست که هر نیم ساعت با دستور curl به ایندکس های apm error در الستیک کویری میزنیم و هر بار سرچ میکنیم که در نیم ساعت گذشته آیا اروری ثبت شده و اگر شده باشه، لینکش رو استخراج میکنیم و به اسلک میفرستیم که با کلیک روی اون لینک مستقیم به صفحه اون ارور میریم. APM میتونه ارورهای کاستم یا unhandled exception ها رو با کمک agent بگیره و در پنل کیبانا نمایش بده. برای استفاده دوستان اسکریپتم رو در گیت هابم گذاشتم. لب مطلب این کویری هست:curl  -s -XGET &amp;quothttp://127.0.0.1:9200/apm-*-error*/_search&amp;quot 
        -H &#039;Content-Type: application/json&#039; 
        -d &#039;{  &amp;quotquery&amp;quot : 
                   { &amp;quotbool&amp;quot : 
                        {  &amp;quotmust&amp;quot:  [ 
                                            {  &amp;quotrange&amp;quot: {  &amp;quot@timestamp&amp;quot:  { &amp;quotgte&amp;quot: &amp;quotnow-30m&amp;quot,  &amp;quotlt&amp;quot: &amp;quotnow&amp;quot } }  }     
                                          ]    
                        }  
                  }  
            }&#039;Output sample(truncated):{&quot;took&quot;:8,&quot;timed_out&quot;:false,&quot;_shards&quot;:{&quot;total&quot;:47,&quot;successful&quot;:47,&quot;skipped&quot;:0,&quot;failed&quot;:0},&quot;hits&quot;:{&quot;total&quot;:{&quot;value&quot;:16,&quot;relation&quot;:&quot;eq&quot;},&quot;max_score&quot;:1.0,&quot;hits&quot;:[{&quot;_index&quot;:&quot;apm-7.2.1-error-2020.02.16&quot;,&quot;_type&quot;:&quot;_doc&quot;,&quot;_id&quot;:&quot;_L3_THABUP6M4b493oYn&quot;,&quot;_score&quot;:1.0,&quot;_source&quot;:{&quot;@timestamp&quot;:&quot;2020-02-16T07:56:40.828Z&quot;,...query: bool : must : با استفاده از این فرمت یک کویری AND ساختیم که البته یک سر نداره ولی بدون این هم نتونستم جوابی بگیرم و با استفاده از بازه now منهای زمان بین کویری ها که میتونه به m, h, d باشه میتونید بازه رو به دلخواه تنظیم کنید.اسکریپت کامل هم در گیت هاب هست و بعد از گرفتن api key از اسلک و استفاده در این اسکریپت میتونید نتایج رو در اسلک ببینید. این اسکریپت تست شده و البته گاهی لینک بر اساس ورژن apm کمی تغییر کرده. نمونه ای از خروجی اسکریپت دز اسلکدر پست های بعدی یک راهکار هست که میتونیم اگر طول مدت انجام یک رست بیشتر شد الرت بگیرم پس تا پست بعدی...</description>
                <category>amir.shirazi</category>
                <author>amir.shirazi</author>
                <pubDate>Sat, 15 Feb 2020 19:34:33 +0330</pubDate>
            </item>
            </channel>
</rss>