دليل يوم المسابقة
قائمة مهام مرتبة لتشغيل يوم مسابقة بسلاسة. اطبعها واحتفظ بها بجانبك.
1 سحب آخر التحديثات على prod
في Plesk → Domains → bq.bsoj.org → Git → Pull updates.
يضمن أن آخر إصلاحات قبل المسابقة موجودة على الخادم.
2 أخذ نسخة احتياطية
/admin/backup.html
شبكة الأمان لو حدث أي شيء غير متوقع. لا تتجاوز هذه الخطوة.
3 فحص الجاهزية
/admin/readiness.html
الهدف: 0 مشاكل حرجة، 0 تحذيرات.
إن كان هناك أي مشكلة باللون الأحمر — أصلحها الآن قبل أن تكتشفها وقت المسابقة.
4 اختبار الحمل (Smoke Test)
افتح 9 تبويبات للـ scorekeeper (في Chrome/Edge) وادخل لكل واحدة باستخدام حسابات مختلفة. تأكد:
- كل التبويبات تفتح بدون مشاكل
- صفحة Health تظهر workers بحدود 12-15 (9 SSE + بعض الطلبات العادية)
- تجربة إجابات في 2-3 تبويبات بنفس الوقت — يجب أن تستجيب خلال ثانية
السقف الأقصى = 40 worker، فلديك مساحة كافية.
5 تثبيت 6 تبويبات بهذا الترتيب
استخدم Ctrl+Shift+P ثم Pin tab، أو اسحب إلى pinned للترتيب أسرع. ثم استخدم Ctrl+1...6 للتنقل.
- Health — لوحة المراقبة
- Schedule — الجدول الحي
- Multiroom — fullscreen على شاشة TV/projector
- Audit — للتحقيق في أي حادث
- Brackets — لأي تعديل
- Readiness — للفحص المتكرر
6 القواعد الذهبية
1. أدخل الإجابات بترتيب الأسئلة (Q1 → Q20).
لا تقفز للأمام ثم ترجع. لو دخلت Q18 ثم رجعت لـ Q17، قد تختفي بعض المكافآت (3rd scorer bonus). نملك أداة إصلاح، لكن تجنّب المشكلة من البداية أفضل.
2. لو الصفحة بطيئة أو متوقفة، اضغط Ctrl+F5.
لا تستمر بالضغط على نفس الإجابة — قد ينتج عنه إجابات مكررة (رغم وجود حماية في النظام).
3. لا تفتح Multiroom على الموبايل.
كل مشاهد = worker إضافي. اترك Multiroom فقط على شاشة العرض الرئيسية.
4. تأكد من تفعيل "في الوقت" للفرق الحاضرة.
هذا يضيف 20 نقطة للفريق تلقائياً.
7 راقب صفحة Health كل 15-20 دقيقة
القاعدة: لو كل البطاقات خضراء، لا تتدخل.
الصفحة تخبرك ماذا تفعل لو ظهر شيء أصفر أو أحمر. اضغط زر "كيف تقرأ هذه الصفحة" في أعلى الصفحة لمراجعة الـ thresholds.
8 لو حدث شيء غير طبيعي
🟡 PHP Workers تجاوز 26: الخادم مشغول لكن يعمل. لا تفتح تبويبات جديدة. أخبر الناس إغلاق Multiroom على أجهزتهم الشخصية.
🔴 PHP Workers تجاوز 34: اضغط زر "كيف أوقف SSE" في بطاقة الـ Workers — فيه أوامر SSH لإيقاف SSE. سيرجع النظام للعمل لكن scorekeepers سيحتاجون refresh يدوي بعد كل تغيير.
🟡 إجابات/دقيقة = 0 خلال مسابقة نشطة: افتح صفحة Schedule وانظر أي قاعة "صامت". تواصل مع scorekeeper تلك القاعة.
scorekeeper يقول "ضغطت ولم يحدث شيء": افتح صفحة Audit، فلتر action = answer.submit وأي ID المسابقة. لو ظهرت الإجابة فهي مسجلة، فقط الصفحة لم تتحدث — اطلب منه Ctrl+F5.
إجابة سُجلت بطريقة خاطئة: Scorekeeper نفسه يستطيع المسح عبر زر "مسح" في modal الإجابة، ثم إعادة التسجيل.
المكافأة لم تظهر بعد إدخال خارج الترتيب: بعد المسابقة، شغّل
php tools/recompute_answer_bonuses.php --quiz=N --apply
ثم
php tools/recompute_quizzer_stats.php --quiz=N --apply.
9 نسخة احتياطية ثانية + فحص نهائي
- أخذ نسخة احتياطية ثانية بعد انتهاء جميع المسابقات
- تشغيل
php tools/recompute_quizzer_stats.php --date=YYYY-MM-DD --apply للتأكد من سلامة جميع stats
- التحقق من لوحة الترتيب أن النتائج مكتملة