الملفات
ghaymah-exam--Momen-Lotfy--…/task5-mithal-dashboard
2026-07-28 20:41:37 +03:00
..
2026-07-28 20:41:37 +03:00
2026-07-28 20:41:37 +03:00
2026-07-28 20:41:37 +03:00
2026-07-28 20:41:37 +03:00

المهمة 5 — لوحة مراقبة mithal.space

الملفات

  • collector.py — يجمع المقاييس كل دقيقة (latency, uptime, SSL, DNS, search) ويخزنها في:
    • metrics.csv (سجل تاريخي كامل، صف لكل فحص)
    • latest.json (أحدث قراءة، يقرأها الـ dashboard)
    • history.json (آخر 1440 قراءة = 24 ساعة، يقرأها الـ dashboard للرسم البياني والجدول)
  • dashboard.html — يعرض uptime%، رسم بياني لزمن الاستجابة، حالة SSL، وسجل آخر 10 فحوصات
  • requirements.txt — اعتماديات بايثون (requests)

1) التشغيل محلياً

cd task5-mithal-dashboard
pip install -r requirements.txt

# فحص واحد للتجربة
python collector.py --once

# تشغيل مستمر (يفحص كل دقيقة)
python collector.py &

# تقديم الملفات (dashboard.html + json files) عبر خادم بسيط
python -m http.server 8000

افتح المتصفح على: http://localhost:8000/dashboard.html

ملاحظة: الـ dashboard يقرأ history.json وlatest.json عبر fetch()، لذلك يجب تشغيله من خادم HTTP (مثل http.server) وليس بفتح الملف مباشرة (file://) لتفادي قيود CORS في المتصفح.

2) النشر على Ghaymah

نفس نمط النشر في المهمة 1: نضع collector.py وdashboard.html خلف سيرفر بسيط (مثال: Flask/http.server) داخل حاوية واحدة، وننشرها كتطبيق Ghaymah:

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY collector.py dashboard.html ./
EXPOSE 8000
# يشغّل التجميع في الخلفية + خادم استضافة الملفات في الواجهة
CMD sh -c "python collector.py & python -m http.server 8000"
docker build -t mithal-monitor:v1 .
docker push registry.ghaymah.systems/<org>/mithal-monitor:v1
ghaymah deploy --app mithal-monitor \
  --image registry.ghaymah.systems/<org>/mithal-monitor:v1 \
  --port 8000

بعد النشر، الرابط الناتج (مثال: https://mithal-monitor.ghaymah.systems/dashboard.html) يعرض اللوحة الحية، وتُحدَّث القراءات تلقائياً كل دقيقة عبر collector.py الذي يعمل باستمرار داخل نفس الحاوية.

3) ملاحظة حول رابط البحث (Search Response)

عدّل المتغير SEARCH_URL داخل collector.py ليطابق مسار البحث الفعلي في موقع mithal.space (حالياً موضوع كمثال mithal.space/search?q=test)، حسب البنية الفعلية للموقع.