مسیر اول: پروب بیرونی
گردشکار زمانبندیشده GitHub Actions اسکریپت probe.py را اجرا میکند. اسکریپت هدفها را از observatory_targets.json میخواند، DNS را اندازه میگیرد و برای هر مقصد درخواست HTTPS میفرستد. مهلت هر درخواست ۱۰ ثانیه است و زمان پاسخ، زمان DNS، کد HTTP و وضعیت نتیجه ثبت میشود.
خروجی اصلی در docs/status.json نوشته میشود؛ تاریخچه محدود به ۷۲ نمونه اخیر در docs/history.json نگهداری میشود و badge.svg از خلاصه همان اجرا ساخته میشود.
مسیر دوم: دادههای داخل ایران
اسکریپت fetch_inside.py ابتدا API رادار آروان را برای چند اپراتور امتحان میکند و اگر داده قابل استفاده نگیرد، به دادههای OONI با probe_cc=IR رجوع میکند. خروجی در docs/inside.json جدا نگهداری میشود. اگر هر دو منبع در دسترس نباشند، داده قبلی با نشان stale حفظ میشود؛ بنابراین قدیمی بودن داده باید در تفسیر دیده شود.
اجرای دوباره و بررسی خروجی
در یک clone از مخزن، پروب بیرونی را میتوان با Python استاندارد اجرا کرد. دستور دوم ساختار JSON خروجی را بررسی میکند؛ اجرای fetch_inside.py به دسترسپذیری APIهای بیرونی وابسته است.
python3 probe.py
python3 -m json.tool docs/status.json > /dev/nullنمونه فیلدهای اصلی در status.json: generated_at، probe_from، scope، summary و targets. مقدار probe_from برابر github-actions است و محل اجرای پروب را روشن میکند.
چه چیزی را نباید نتیجه گرفت؟
- پروب GitHub Actions از بیرون ایران اجرا میشود؛ موفقیت آن به معنی دسترسی کاربران داخل ایران نیست.
- گزارش OONI یا رادار نیز پوشش کامل همه اپراتورها، شهرها و کاربران را تضمین نمیکند.
- میانگین تأخیر فقط برای هدفهای همان نمونه و همان زمان معتبر است؛ معیار عمومی کیفیت اینترنت نیست.