مسیر اول: پروب بیرونی

گردش‌کار زمان‌بندی‌شده 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 یا رادار نیز پوشش کامل همه اپراتورها، شهرها و کاربران را تضمین نمی‌کند.
  • میانگین تأخیر فقط برای هدف‌های همان نمونه و همان زمان معتبر است؛ معیار عمومی کیفیت اینترنت نیست.