From 9bf0dfa0e89774a2cc159d1c7acc4b1a4678e471 Mon Sep 17 00:00:00 2001 From: amohamedadel29 Date: Tue, 28 Jul 2026 03:54:42 +0300 Subject: [PATCH] Ghaymah SRE exam submission - Mohamed Adel --- README.md | 33 +++++ common-mortakaz/integration-1.md | 34 +++++ common-mortakaz/integration-2.md | 43 ++++++ common-qabilah/qabilah-profile.txt | 7 + q1-deploy-monitor/Dockerfile | 30 ++++ q1-deploy-monitor/app.py | 65 +++++++++ q1-deploy-monitor/dashboard.html | 212 +++++++++++++++++++++++++++++ q1-deploy-monitor/health-check.sh | 66 +++++++++ q1-deploy-monitor/requirements.txt | 2 + q2-postmortem/postmortem-report.md | 96 +++++++++++++ q3-cicd/README.md | 51 +++++++ q3-cicd/workflow.yml | 103 ++++++++++++++ q4-scalability/architecture.png | Bin 0 -> 144562 bytes q4-scalability/calculations.md | 79 +++++++++++ q5-mithal-monitor/Dockerfile | 17 +++ q5-mithal-monitor/dashboard.html | 164 ++++++++++++++++++++++ q5-mithal-monitor/entrypoint.sh | 10 ++ q5-mithal-monitor/monitor.py | 172 +++++++++++++++++++++++ 18 files changed, 1184 insertions(+) create mode 100644 README.md create mode 100644 common-mortakaz/integration-1.md create mode 100644 common-mortakaz/integration-2.md create mode 100644 common-qabilah/qabilah-profile.txt create mode 100644 q1-deploy-monitor/Dockerfile create mode 100644 q1-deploy-monitor/app.py create mode 100644 q1-deploy-monitor/dashboard.html create mode 100644 q1-deploy-monitor/health-check.sh create mode 100644 q1-deploy-monitor/requirements.txt create mode 100644 q2-postmortem/postmortem-report.md create mode 100644 q3-cicd/README.md create mode 100644 q3-cicd/workflow.yml create mode 100644 q4-scalability/architecture.png create mode 100644 q4-scalability/calculations.md create mode 100644 q5-mithal-monitor/Dockerfile create mode 100644 q5-mithal-monitor/dashboard.html create mode 100644 q5-mithal-monitor/entrypoint.sh create mode 100644 q5-mithal-monitor/monitor.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..f63c6b5 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# Ghaymah Internship Exam — SRE Track + +**المتقدم:** Mohamed Adel +**Qabilah Profile:** https://qabilah.com/profile/muhammedadelofficial01/professional-profile + +## الروابط المنشورة فعليًا على Ghaymah + +| السؤال | الرابط | الحالة | +|---|---|---| +| Q1 — Deploy & Monitor (API) | https://ghaymah-exam-app-06b532d0a81b.hosted.ghaymah.systems | ✅ منشور، `/health` و `/metrics` يعملان بنجاح | +| Q1 — Dashboard | `q1-deploy-monitor/dashboard.html` (مربوط تلقائيًا بالرابط أعلاه) | ✅ | +| Q5 — Mithal Monitor + Dashboard | https://ghaymah-mithal-monitor-de4c1ce11f85.hosted.ghaymah.systems/dashboard.html | ✅ منشور، البيانات تُجمع كل دقيقة في `metrics.json` | + +--- + +## هيكل التسليم + +| المجلد | المحتوى | +|---|---| +| `q1-deploy-monitor/` | Dockerfile + app.py (Flask API مع `/health`) + health-check.sh (فحص كل 30 ثانية) + dashboard.html | +| `q2-postmortem/` | تقرير Postmortem كامل: ملخص، timeline، root cause، سياسة auto-scaling، اكتشاف مبكر | +| `q3-cicd/` | GitHub Actions workflow (build → push → staging → manual approval → production) + شرح الفرق بين البيئتين وربط Ghaymah CLI | +| `q4-scalability/` | architecture.png + حسابات عدد الحاويات (39 حاوية لـ 15,000 req/s) + استراتيجية cold start + شرح Block Storage | +| `q5-mithal-monitor/` | monitor.py (latency, uptime, SSL, DNS, search) + dashboard.html | +| `common-mortakaz/` | اقتراحي تكامل: منصة "مقابلة" (Mock Interviews) ومنصة السيرة الذاتية | +| `common-qabilah/` | رابط الحساب الشخصي على قبيلة | + +## ملاحظات مهمة قبل التسليم + +- **النشر الفعلي على ghaymah.systems (Q1, Q5):** تم النشر فعليًا (انظر جدول الروابط أعلاه) وتم التحقق يدويًا من عمل `/health` و `/metrics` (Q1) و `/dashboard.html` + `metrics.json` (Q5) بنجاح. +- **متطلبات Q3 (Secrets):** الـ workflow يفترض وجود 3 secrets في إعدادات المستودع: `GHAYMAH_REGISTRY_USER`, `GHAYMAH_REGISTRY_TOKEN`, `GHAYMAH_API_TOKEN` — لازم تضيفهم من حسابك الفعلي قبل تشغيل الـ pipeline. +- **Q5 — رابط بحث mithal.space:** الكود يفترض endpoint افتراضي `/search` — لو الموقع الفعلي له مسار بحث مختلف، عدّل المتغير `search_path` في `monitor.py`. +- **رفع المستودع على GitPasha:** كل الملفات جاهزة هنا؛ الخطوة المتبقية هي إنشاء المستودع `ghaymah-exam-mohamed-adel-sre` على GitPasha ورفع هذا الهيكل كما هو. diff --git a/common-mortakaz/integration-1.md b/common-mortakaz/integration-1.md new file mode 100644 index 0000000..87c712a --- /dev/null +++ b/common-mortakaz/integration-1.md @@ -0,0 +1,34 @@ +# اقتراح تكامل #1 — منصة "مقابلة" (Moqabala) × Ghaymah + +## وصف المنتج +**مقابلة** منصة عربية على مرتكز متخصصة في محاكاة المقابلات التقنية الوظيفية (Mock Interviews)، تساعد المتقدمين على الاستعداد الحقيقي لسوق العمل من خلال محاكاة مقابلات فعلية بثقة واحترافية. + +## كيف تتكامل مع ghaymah.systems + +المشكلة التقنية المتوقعة لمنصة زي "مقابلة": جلسات المحاكاة (خاصة لو فيها فيديو/صوت حي أو AI يجاوب فورًا) تحتاج بنية تحتية قابلة للتوسع بشكل متغير جدًا — عدد المستخدمين يزيد بشكل حاد في أوقات معينة (بعد إعلانات توظيف كبيرة، أو مواسم التخرج) وينخفض في أوقات أخرى. + +**التكامل المقترح:** +- استضافة backend المنصة (معالجة الصوت/الفيديو، تحليل إجابات المرشح، توليد أسئلة المقابلة) على **Ghaymah Containers** مع auto-scaling، بحيث تتوسع المنصة تلقائيًا وقت الذروة (مثل موسم التقديم على وظائف Junior بعد التخرج) بدون تدخل يدوي. +- استخدام **Ghaymah Block Storage** لتخزين تسجيلات جلسات المحاكاة (فيديو/صوت) بشكل دائم ومنفصل عن الحاويات، بحيث يقدر المستخدم يرجع يشوف أداءه في مقابلات سابقة. +- استخدام أدوات **مراقبة غيمة** لضمان أن زمن استجابة الذكاء الاصطناعي أثناء المقابلة الحية يبقى منخفضًا (latency-sensitive)، لأن أي تأخير هيكسر إحساس "المقابلة الحقيقية". + +``` +[متصفح المستخدم] --(WebRTC/HTTP)--> [Ghaymah LB] + | + [Container Pool: AI Interview Engine] + | + ----------------------------------- + | | + [Ghaymah Block Storage] [Monitoring: latency alerts] + (تسجيلات المقابلات) (لضمان استجابة فورية أثناء الجلسة) +``` + +## القيمة المضافة للمستخدم النهائي +- استقرار المنصة وقت الضغط (مثل مواسم التوظيف) بدل تعليق أو بطء الخدمة. +- استجابة سريعة أثناء المحاكاة الحية، وهو أهم عامل في تجربة "المقابلة الواقعية". +- أرشيف موثوق لتسجيلات المقابلات السابقة يقدر المستخدم يرجعله في أي وقت لتتبع تحسّنه. + +## التحديات التقنية أو التجارية المحتملة +- **تكلفة التخزين**: تسجيلات الفيديو/الصوت تستهلك مساحة كبيرة مع نمو عدد المستخدمين، فلازم سياسة أرشفة/حذف تلقائي للتسجيلات القديمة. +- **زمن الاستجابة الحرج (latency-sensitive)**: أي تأخر في استجابة الذكاء الاصطناعي أثناء المحاكاة الحية يفسد التجربة، فيحتاج التصميم استضافة قريبة جغرافيًا من قاعدة المستخدمين الأساسية. +- **الخصوصية**: تسجيلات المقابلات تحتوي بيانات شخصية وصوت/صورة المستخدم، فلازم ضمان تشفير وسياسات وصول واضحة على Block Storage. diff --git a/common-mortakaz/integration-2.md b/common-mortakaz/integration-2.md new file mode 100644 index 0000000..ddca125 --- /dev/null +++ b/common-mortakaz/integration-2.md @@ -0,0 +1,43 @@ +# اقتراح تكامل #2 — منصة إنشاء السيرة الذاتية العربية × Ghaymah / mithal.space + +## وصف المنتج +منصة مجانية على مرتكز لإنشاء سيرة ذاتية احترافية متوافقة مع أنظمة التوظيف (ATS-friendly)، توفر قوالب متعددة وتقييمًا فوريًا للسيرة الذاتية، وتدعم اللغتين العربية والإنجليزية. + +## كيف تتكامل مع ghaymah.systems أو mithal.space + +**التكامل المقترح مع ghaymah.systems:** +- نشر backend المنصة (توليد ملفات PDF، محرك التقييم الفوري للسيرة) كحاويات على Ghaymah، مع CI/CD pipeline (زي اللي بنيناه في Q3) لنشر تحديثات القوالب والتقييم بأمان عبر staging قبل production. +- كل عملية "تقييم فوري" للسيرة الذاتية هي عملية معالجة نصية قد تكون ثقيلة نسبيًا (تحليل NLP) — فهي مرشح جيد للتوسع الأفقي التلقائي (auto-scaling) الموضح في Q4، خصوصًا وقت الذروة (بداية كل سنة دراسية أو موسم التوظيف). + +**التكامل المقترح مع mithal.space:** +- محرك البحث في mithal.space (زي اللي بنينا مراقبته في Q5) ممكن يُستخدم كطبقة بحث داخل منصة السيرة الذاتية نفسها — مثلاً: المستخدم يبحث عن "كلمات مفتاحية مطلوبة لوظيفة DevOps" أو "أمثلة صياغة لمهارات Kubernetes"، ومحرك mithal.space يرجع اقتراحات فورية تُدمج في السيرة الذاتية أثناء الكتابة. + +``` +[المستخدم يكتب سيرته الذاتية] + | + [منصة السيرة الذاتية - Ghaymah Containers] + | \ +[محرك التقييم الفوري] [استعلام بحث -> mithal.space Search API] + | | + [توليد PDF] [اقتراحات كلمات مفتاحية للوظيفة] + | + [Ghaymah Block Storage: حفظ نسخ السيرة الذاتية] +``` + +## القيمة المضافة للمستخدم النهائي +- سيرة ذاتية أقوى وأكثر توافقًا مع متطلبات الوظيفة الفعلية، بفضل دمج اقتراحات بحث حية من mithal.space بدل الاعتماد على قالب ثابت فقط. +- استقرار الخدمة وسرعة توليد PDF حتى وقت الضغط (بداية السنة الدراسية / مواسم التقديم)، بفضل auto-scaling على غيمة. +- حفظ آمن لنسخ متعددة من السيرة الذاتية عبر الوقت (تجربة كتب لها Mohamed Adel نفسه كباحث عن عمل — نوع الميزة اللي بيحتاجها فعليًا). + +## التحديات التقنية أو التجارية المحتملة +- **جودة اقتراحات البحث**: لازم يكون محرك mithal.space مدرَّب/مضبوط على مصطلحات سوق العمل تحديدًا، وإلا الاقتراحات هتكون عامة وغير مفيدة. +- **زمن التكامل بين خدمتين منفصلتين**: أي استدعاء لـ mithal.space أثناء الكتابة الحية للسيرة الذاتية لازم يكون سريع جدًا (تحت ثانية)، وإلا هيبطئ تجربة الكتابة. +- **نموذج العمل (Business Model)**: المنصة مجانية حاليًا — التكامل مع بنية تحتية مدفوعة (Ghaymah) يحتاج تفكير في كيفية تغطية التكلفة (خطة مدفوعة اختيارية، أو رعاية). + +## أي المنتجين أكثر قابلية للتطبيق؟ + +**منصة السيرة الذاتية (اقتراح #2) أكثر قابلية للتطبيق فورًا**، للأسباب التالية: +1. الحمل الحسابي أخف بكثير من محاكاة مقابلات بالفيديو/الصوت الحي، فتكلفة البنية التحتية على غيمة أقل والمخاطر التقنية أبسط. +2. لا تحتاج معالجة حساسة بزمن استجابة فوري حرج (real-time latency) بنفس درجة "مقابلة"، فهامش الخطأ الهندسي أكبر. +3. التكامل مع mithal.space (بحث نصي بسيط) أبسط تقنيًا من تكامل الذكاء الاصطناعي الصوتي/المرئي المطلوب في مقابلة. +4. القيمة واضحة وقابلة للقياس فورًا (جودة سيرة ذاتية أفضل = فرصة توظيف أعلى)، وهي مشكلة يعيشها أي باحث عن عمل يوميًا. diff --git a/common-qabilah/qabilah-profile.txt b/common-qabilah/qabilah-profile.txt new file mode 100644 index 0000000..dadee5e --- /dev/null +++ b/common-qabilah/qabilah-profile.txt @@ -0,0 +1,7 @@ +Qabilah Profile — Mohamed Adel +================================ + +Profile URL: +https://qabilah.com/profile/muhammedadelofficial01/professional-profile + +Followed: Ghaymah official account on Qabilah (@Ghaymah) diff --git a/q1-deploy-monitor/Dockerfile b/q1-deploy-monitor/Dockerfile new file mode 100644 index 0000000..8db9262 --- /dev/null +++ b/q1-deploy-monitor/Dockerfile @@ -0,0 +1,30 @@ +# ---- Base image ---- +FROM python:3.12-slim + +# ---- Metadata ---- +LABEL maintainer="Mohamed Adel" +LABEL description="Simple Flask API with /health endpoint, deployed on Ghaymah Containers" + +# ---- Working directory ---- +WORKDIR /app + +# ---- Install dependencies first (better layer caching) ---- +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# ---- Copy application code ---- +COPY app.py . + +# ---- Create non-root user for security ---- +RUN useradd -m appuser +USER appuser + +# ---- Expose the app port ---- +EXPOSE 8080 + +# ---- Container-level healthcheck (used by Ghaymah / Docker runtime) ---- +HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \ + CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8080/health')" || exit 1 + +# ---- Run the app with a production WSGI server ---- +CMD ["gunicorn", "--bind", "0.0.0.0:8080", "--workers", "2", "app:app"] diff --git a/q1-deploy-monitor/app.py b/q1-deploy-monitor/app.py new file mode 100644 index 0000000..cbd1d11 --- /dev/null +++ b/q1-deploy-monitor/app.py @@ -0,0 +1,65 @@ +""" +Simple demo API for the Ghaymah SRE exam (Q1). + +Endpoints: + GET / -> basic welcome message + GET /health -> liveness/readiness probe used by Ghaymah + monitoring script + GET /metrics -> lightweight JSON metrics used by the dashboard + (uptime, request count, avg response time) +""" + +import time +from flask import Flask, jsonify + +app = Flask(__name__) + +START_TIME = time.time() +REQUEST_COUNT = 0 +TOTAL_RESPONSE_TIME = 0.0 + + +@app.before_request +def _start_timer(): + global REQUEST_COUNT + REQUEST_COUNT += 1 + app.config["_req_start"] = time.time() + + +@app.after_request +def _record_timing(response): + global TOTAL_RESPONSE_TIME + elapsed = time.time() - app.config.get("_req_start", time.time()) + TOTAL_RESPONSE_TIME += elapsed + response.headers["X-Response-Time-ms"] = f"{elapsed * 1000:.2f}" + return response + + +@app.route("/") +def index(): + return jsonify(message="Ghaymah SRE exam demo API is running", status="ok") + + +@app.route("/health") +def health(): + """Used by: Ghaymah container platform health checks, and the + external monitoring script (health-check.sh).""" + return jsonify(status="healthy", uptime_seconds=round(time.time() - START_TIME, 2)), 200 + + +@app.route("/metrics") +def metrics(): + """Used by the dashboard.html to render status / avg response time / request count.""" + avg_response_ms = ( + (TOTAL_RESPONSE_TIME / REQUEST_COUNT) * 1000 if REQUEST_COUNT else 0 + ) + return jsonify( + status="healthy", + uptime_seconds=round(time.time() - START_TIME, 2), + request_count=REQUEST_COUNT, + avg_response_time_ms=round(avg_response_ms, 2), + ) + + +if __name__ == "__main__": + # For local testing only; production uses gunicorn (see Dockerfile CMD) + app.run(host="0.0.0.0", port=8080) diff --git a/q1-deploy-monitor/dashboard.html b/q1-deploy-monitor/dashboard.html new file mode 100644 index 0000000..ebc617f --- /dev/null +++ b/q1-deploy-monitor/dashboard.html @@ -0,0 +1,212 @@ + + + + + +لوحة مراقبة التطبيق — Ghaymah SRE Exam + + + +
+ +
+
+

لوحة مراقبة التطبيق

+
Ghaymah SRE Exam — Q1 · يقرأ من /metrics و /health كل 5 ثوانٍ
+
+
+ + +
+
+ +
+
+
الحالة
+
جاري التحميل...
+
+
+
زمن الاستجابة
+
+
+
+
عدد الطلبات
+
+
+
+ +
+

زمن الاستجابة — آخر 20 فحص

+ +
+ +
+

سجل الفحوصات

+ + + +
الوقتالحالةزمن الاستجابة
+
+ +
يعمل الفحص كل 5 ثوانٍ في المتصفح · مصدر البيانات: نفس تطبيق Q1 (endpoint: /metrics)
+
+ + + + diff --git a/q1-deploy-monitor/health-check.sh b/q1-deploy-monitor/health-check.sh new file mode 100644 index 0000000..e0346e2 --- /dev/null +++ b/q1-deploy-monitor/health-check.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# +# health-check.sh +# Polls the app's /health endpoint every 30 seconds, logs status + response +# time to a CSV file that the dashboard (dashboard.html) can read, and +# alerts (stderr + log) if the app is unhealthy for 3 consecutive checks. +# +# Usage: +# ./health-check.sh https://your-app.ghaymah.systems +# +# Run in the background on the host, or as a sidecar container, or as a +# systemd service (recommended for production on Ghaymah). + +set -uo pipefail + +APP_URL="${1:-http://localhost:8080}" +HEALTH_ENDPOINT="${APP_URL%/}/health" +CHECK_INTERVAL=30 # seconds +LOG_FILE="./metrics.csv" +FAIL_THRESHOLD=3 +consecutive_failures=0 + +# Create CSV header if the file doesn't exist yet +if [[ ! -f "$LOG_FILE" ]]; then + echo "timestamp,status,http_code,response_time_ms" > "$LOG_FILE" +fi + +log() { + echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" +} + +log "Starting health monitor for: $HEALTH_ENDPOINT (interval: ${CHECK_INTERVAL}s)" + +while true; do + start_ms=$(date +%s%3N) + + # -o /dev/null discards body, -w prints http_code, -s silent, -m 5 timeout 5s + http_code=$(curl -s -o /dev/null -w "%{http_code}" -m 5 "$HEALTH_ENDPOINT") + curl_exit=$? + + end_ms=$(date +%s%3N) + response_time_ms=$((end_ms - start_ms)) + timestamp=$(date '+%Y-%m-%d %H:%M:%S') + + if [[ $curl_exit -eq 0 && "$http_code" == "200" ]]; then + status="UP" + consecutive_failures=0 + log "OK - ${HEALTH_ENDPOINT} - ${http_code} - ${response_time_ms}ms" + else + status="DOWN" + consecutive_failures=$((consecutive_failures + 1)) + log "FAIL - ${HEALTH_ENDPOINT} - http_code=${http_code:-none} curl_exit=${curl_exit} - failure #${consecutive_failures}" + + if [[ $consecutive_failures -ge $FAIL_THRESHOLD ]]; then + log "ALERT: ${consecutive_failures} consecutive failures! Application appears DOWN." >&2 + # In production: send this to Slack/Email/PagerDuty/Ghaymah alerting webhook, e.g.: + # curl -s -X POST -H "Content-Type: application/json" \ + # -d "{\"text\":\"ALERT: ${APP_URL} is down (${consecutive_failures} consecutive failures)\"}" \ + # "$ALERT_WEBHOOK_URL" + fi + fi + + echo "${timestamp},${status},${http_code:-0},${response_time_ms}" >> "$LOG_FILE" + + sleep "$CHECK_INTERVAL" +done diff --git a/q1-deploy-monitor/requirements.txt b/q1-deploy-monitor/requirements.txt new file mode 100644 index 0000000..b733f8f --- /dev/null +++ b/q1-deploy-monitor/requirements.txt @@ -0,0 +1,2 @@ +flask==3.0.3 +gunicorn==22.0.0 diff --git a/q2-postmortem/postmortem-report.md b/q2-postmortem/postmortem-report.md new file mode 100644 index 0000000..9002b05 --- /dev/null +++ b/q2-postmortem/postmortem-report.md @@ -0,0 +1,96 @@ +# تقرير حادثة (Postmortem) — انقطاع خدمة بسبب OOMKilled متكرر + +**الحالة:** مغلق (Resolved) +**التأثير:** انقطاع كامل للخدمة لمدة 45 دقيقة +**الخطورة:** SEV-2 + +--- + +## 1. الملخص التنفيذي + +تعطّل التطبيق المستضاف على منصة غيمة عن العمل لمدة **45 دقيقة**. السبب المباشر هو دخول الحاوية (Container) في حلقة تعطّل متكررة (**CrashLoop**) ناتجة عن **OOMKilled** — أي أن نظام التشغيل أنهى العملية (Process) بالقوة لأنها تجاوزت حد الذاكرة (Memory Limit) المخصص لها. كل مرة كانت المنصة تعيد تشغيل الحاوية تلقائيًا، كانت تعود لتستهلك نفس القدر من الذاكرة خلال دقائق وتتعطل من جديد، وهو ما جعل الخدمة غير متاحة بشكل شبه مستمر طوال فترة الحادثة. + +--- + +## 2. الجدول الزمني (Timeline) + +| الوقت (تقريبي) | الحدث | +|---|---| +| T+0 دقيقة | بدء ارتفاع غير طبيعي في استهلاك الذاكرة (Memory) للحاوية، غير ملحوظ بعد من الفريق | +| T+3 دقيقة | استهلاك الذاكرة يتجاوز الحد المخصص (Memory Limit) → kernel OOM Killer يوقف العملية | +| T+3 دقيقة | منصة غيمة تكتشف توقف الحاوية وتعيد تشغيلها تلقائيًا (Auto-restart) | +| T+3 إلى T+40 دقيقة | حلقة متكررة: الحاوية تبدأ، تستهلك الذاكرة بسرعة، تُقتل (OOMKilled)، تُعاد تلقائيًا — والتطبيق غير مستجيب لمعظم الطلبات خلال هذه الفترة | +| T+12 دقيقة | أول تنبيه (Alert) يصل لفريق العمليات بسبب فشل متكرر في health check | +| T+15 دقيقة | بدء التحقيق: مراجعة السجلات (Logs) ولوحة المراقبة على غيمة | +| T+25 دقيقة | تحديد السبب: تسريب ذاكرة (Memory Leak) تراكمي في مسار معالجة الطلبات الكبيرة (لم يكن هناك تحرير صحيح للـ cache بعد كل طلب) | +| T+35 دقيقة | إجراء مؤقت (Mitigation): رفع حد الذاكرة (Memory Limit) للحاوية مؤقتًا + إعادة نشر (Redeploy) نسخة سابقة مستقرة (Rollback) | +| T+45 دقيقة | استقرار الخدمة، عودة معدل الاستجابة الطبيعي، إغلاق الحادثة (Incident Resolved) | +| T+1 يوم | إصلاح جذري: تعديل الكود لتحرير الـ cache بشكل صحيح، ونشره بعد اختبار في staging | + +--- + +## 3. السبب الجذري (Root Cause) + +- كان هناك **تسريب ذاكرة تدريجي (gradual memory leak)** في التطبيق: كائنات (objects) خاصة بمعالجة الطلبات الكبيرة كانت تبقى محتفظًا بها في الذاكرة (cache/in-memory buffer) دون تحرير بعد انتهاء الطلب. +- مع تزايد عدد الطلبات، تراكم استهلاك الذاكرة تدريجيًا حتى تجاوز الحد الأقصى المحدد للحاوية (Memory Limit)، فقام نظام Linux (OOM Killer) بإنهاء العملية بالقوة — وهو ما يظهر في منصة غيمة كحالة **OOMKilled**. +- **العامل المُضاعِف (contributing factor):** لم يكن هناك auto-scaling أو حد أدنى/أقصى مضبوط بذكاء (فقط نسخة واحدة Single Replica)، لذلك أي إعادة تشغيل كانت تعني توقف الخدمة بالكامل بدلاً من أن تستوعبها نسخة أخرى سليمة. +- **عامل مُضاعِف آخر:** غياب تنبيه مبكر على اتجاه استهلاك الذاكرة (Memory Trend Alert) — التنبيه الوحيد كان بعد فشل health check، أي بعد وقوع المشكلة فعليًا وليس قبلها. + +--- + +## 4. الإجراءات التصحيحية (Action Items) + +| # | الإجراء | الأولوية | المسؤول | +|---|---|---|---| +| 1 | إصلاح تسريب الذاكرة في كود معالجة الطلبات (تحرير الـ cache/buffers بعد كل طلب) | عالية | فريق التطوير | +| 2 | ضبط `resources.requests` و `resources.limits` بشكل واقعي بناءً على قياس فعلي لاستهلاك التطبيق تحت حمل حقيقي (Load Test) | عالية | SRE | +| 3 | تفعيل **Horizontal Auto-scaling** (2 نسخ كحد أدنى) حتى لا تعتمد الخدمة على نسخة واحدة (انظر السياسة في القسم 5) | عالية | SRE | +| 4 | إضافة تنبيه استباقي عند وصول استهلاك الذاكرة إلى 80% من الحد المخصص (قبل الوصول لـ OOM) | متوسطة | SRE | +| 5 | إضافة اختبار حمل (Load/Soak Test) دوري في CI قبل كل نشر يفحص استقرار استهلاك الذاكرة مع الوقت | متوسطة | فريق التطوير | +| 6 | توثيق runbook لحالة OOMKilled ليستخدمه أي مهندس مناوب مستقبلًا لتقليل زمن التحقيق (MTTR) | منخفضة | SRE | + +--- + +## 5. سياسة Auto-Scaling المقترحة لمنصة غيمة (لمنع التكرار) + +**الهدف:** ألا يعتمد استقرار الخدمة على حاوية واحدة، وأن يتم استيعاب أي ضغط ذاكرة/معالج تلقائيًا قبل أن يتحول لانقطاع كامل. + +```yaml +# مثال توضيحي لسياسة auto-scaling على منصة غيمة +scaling_policy: + min_replicas: 2 # لا تقل عن نسختين دائمًا (لا يوجد Single Point of Failure) + max_replicas: 6 + metrics: + - type: memory + target_utilization: 70% # التوسع عند وصول استهلاك الذاكرة لـ 70% من الحد المخصص + - type: cpu + target_utilization: 75% + scale_up: + cooldown_seconds: 60 # استجابة سريعة عند الضغط + scale_down: + cooldown_seconds: 300 # تقليل النسخ بحذر لتفادي "flapping" + resources: + requests: + memory: "256Mi" + cpu: "250m" + limits: + memory: "512Mi" # حد واقعي مبني على قياس فعلي، وليس تخمينًا + cpu: "500m" + restart_policy: + max_restarts_before_alert: 3 # تنبيه فوري (لا انتظار) بعد 3 إعادة تشغيل متتالية لنفس الحاوية +``` + +**لماذا هذا يمنع تكرار الحادثة:** +- `min_replicas: 2` يعني أن فشل حاوية واحدة بـ OOMKilled لا يوقف الخدمة بالكامل — الحاويات الأخرى تستمر في خدمة الطلبات. +- التوسع على أساس استهلاك الذاكرة (وليس فقط CPU) يستوعب زيادة الحمل قبل أن تصل أي حاوية لحد OOM. +- `max_restarts_before_alert` يحوّل "إعادة التشغيل الصامتة والمتكررة" (اللي حصلت في هذا الحادث) إلى تنبيه فوري بدل ما تستمر لمدة 45 دقيقة قبل ما حد يلاحظ. + +--- + +## 6. كيفية اكتشاف هذه المشكلة مبكرًا باستخدام أدوات مراقبة غيمة + +1. **Memory Trend Alerting:** ضبط تنبيه على لوحة مراقبة غيمة عند وصول استهلاك الذاكرة لنسبة 80% من الـ limit لمدة تزيد عن دقيقتين متتاليتين (وليس فقط عند الفشل الفعلي). هذا كان سيعطي إنذارًا مبكرًا قبل أول OOMKilled بعدة دقائق. +2. **Restart Count Alerting:** تنبيه فوري عند تجاوز عدد إعادة التشغيل التلقائي (auto-restart) لحاوية واحدة أكثر من مرتين خلال 10 دقائق — بدل الاعتماد فقط على فشل health check. +3. **Container Event Logs:** مراجعة دورية لسجل أحداث المنصة (Container Events) اللي يسجل صراحة سبب إعادة التشغيل (OOMKilled / Crash / Manual)، بدل الاعتماد فقط على سجل التطبيق نفسه. +4. **Dashboard واحد يجمع:** Memory usage % + Restart count + Response time + Error rate في نفس الشاشة، حتى يقدر المهندس المناوب يربط بين الأعراض بسرعة (استجابة بطيئة + ارتفاع ذاكرة + إعادة تشغيل = إشارة قوية على OOM قادم). +5. **Synthetic health checks خارجية** (مثل سكريبت `health-check.sh` في السؤال الأول) تعمل من خارج المنصة، لأن أدوات المراقبة الداخلية أحيانًا لا تكتشف أن الخدمة "بطيئة جدًا" حتى لو لم تكن "متوقفة تمامًا". diff --git a/q3-cicd/README.md b/q3-cicd/README.md new file mode 100644 index 0000000..565965d --- /dev/null +++ b/q3-cicd/README.md @@ -0,0 +1,51 @@ +# Q3 — CI/CD Pipeline على غيمة + +يشرح هذا الملف `workflow.yml` بالإضافة للفرق بين staging و production وطريقة الربط بـ Ghaymah CLI. + +## 1. الفرق بين Staging و Production + +| | Staging | Production | +|---|---|---| +| **الغرض** | بيئة تحقق قبل الإطلاق: نشر أوتوماتيكي لأي تعديل على `main` للتأكد أن الصورة (image) الجديدة تعمل فعليًا | البيئة الحقيقية التي يستخدمها المستخدم النهائي | +| **من يوافق؟** | لا يوجد — نشر تلقائي بمجرد نجاح البناء | يتطلب موافقة يدوية (Manual Approval) من مراجع معتمد قبل التنفيذ | +| **البيانات** | بيانات تجريبية/مصغّرة، منفصلة تمامًا عن بيانات المستخدمين الحقيقيين | بيانات حقيقية وحساسة | +| **الموارد** | نسخة واحدة أو نسختين، موارد أقل (توفير تكلفة) | حسب سياسة auto-scaling (انظر Q4/Q2)، موارد كافية لتحمل الحمل الحقيقي | +| **التنبيهات عند الفشل** | إشعار للفريق فقط | تنبيه فوري (on-call) لأن أي عطل يؤثر على المستخدمين مباشرة | +| **الدومين المستخدم في هذا المثال** | `staging.ghaymah-exam-app.ghaymah.systems` | `ghaymah-exam-app.ghaymah.systems` | + +الفكرة الأساسية: نفس الـ image بالضبط (نفس الـ tag، نفس commit SHA) يمر من staging إلى production بدون إعادة بناء، لضمان أن ما تم اختباره هو نفسه ما يُنشر فعليًا. + +## 2. كيف تعمل بوابة الموافقة اليدوية (Manual Approval) + +الموافقة اليدوية **لا تُكتب كخطوة داخل الـ workflow نفسه**، بل تُفعَّل من إعدادات المستودع: + +1. `Settings` → `Environments` → إنشاء بيئة اسمها `production` +2. تفعيل `Required reviewers` واختيار الأشخاص المسموح لهم بالموافقة (مثلاً: قائد الفريق أو مهندس SRE أول) +3. أي job في الـ workflow يستخدم `environment: name: production` (كما في `deploy-production` أعلاه) سيتوقف تلقائيًا وينتظر ضغط "Approve" من أحد المراجعين المحددين قبل أن يبدأ التنفيذ فعليًا. + +## 3. طريقة الربط الفعلية (Docker Hub + Ghaymah Dashboard) + +**ملاحظة مهمة:** واجهة Ghaymah الحالية (deploy.ghaymah.systems) بتدعم النشر عن طريق **ربط حساب Docker Hub** مباشرة من الداشبورد (زر "Deploy Application" → "Docker Hub")، مش عن طريق CLI مخصص. لذلك التدفق الفعلي للـ pipeline هو: + +```bash +# 1. بناء الصورة محليًا أو عبر GitHub Actions (خطوة build-and-push في workflow.yml) +docker build -t mohamedadel777/ghaymah-exam-app:latest . + +# 2. تسجيل الدخول لـ Docker Hub +docker login + +# 3. رفع الصورة +docker push mohamedadel777/ghaymah-exam-app:latest +``` + +ثم من داشبورد Ghaymah: +`Deploy Application → Docker Hub → اختيار الصورة والـ tag → تحديد Port 8080 → Deploy Now` + +**في CI (GitHub Actions)** الخطوة `build-and-push` في `workflow.yml` بتعمل بالضبط نفس الأمرين (build + push) تلقائيًا، وبعدين خطوات `deploy-staging` و `deploy-production` بترجع رسالة تفيدك إن فيه صورة جديدة جاهزة للـ redeploy — لأن Ghaymah لسه ما بتوفرش webhook/CLI عام لتفعيل الـ redeploy تلقائيًا وقت كتابة هذا الملف، فالخطوة الأخيرة (اختيار الـ tag الجديد والضغط Redeploy) بتتم يدويًا من الداشبورد. لو Ghaymah ضافت لاحقًا CLI أو Webhook رسمي للنشر، تُستبدل هذه الخطوة بأمر فعلي. + +الـ Secrets المطلوبة في إعدادات المستودع (`Settings → Secrets and variables → Actions`): + +| الاسم | القيمة | +|---|---| +| `DOCKERHUB_USERNAME` | يوزر Docker Hub (`mohamedadel777`) | +| `DOCKERHUB_TOKEN` | Access Token من Docker Hub (Account Settings → Security → New Access Token) | diff --git a/q3-cicd/workflow.yml b/q3-cicd/workflow.yml new file mode 100644 index 0000000..2dcba69 --- /dev/null +++ b/q3-cicd/workflow.yml @@ -0,0 +1,103 @@ +# .github/workflows/deploy.yml +# +# CI/CD pipeline: build Docker image -> push to Ghaymah Container Registry +# -> deploy to staging automatically -> manual approval -> deploy to production. + +name: Build and Deploy to Ghaymah + +on: + push: + branches: [main] + workflow_dispatch: {} + +env: + DOCKERHUB_USER: mohamedadel777 + IMAGE_NAME: ghaymah-exam-app + +jobs: + # --------------------------------------------------------------------- + # 1) Build the image once and push it to Docker Hub, tagged with the + # commit SHA. Ghaymah pulls the image from Docker Hub when you + # deploy/redeploy from the dashboard (Deploy App -> Docker Hub). + # --------------------------------------------------------------------- + build-and-push: + runs-on: ubuntu-latest + outputs: + image_tag: ${{ steps.meta.outputs.tag }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set image tag (short commit SHA) + id: meta + run: echo "tag=${GITHUB_SHA::7}" >> "$GITHUB_OUTPUT" + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: | + ${{ env.DOCKERHUB_USER }}/${{ env.IMAGE_NAME }}:${{ steps.meta.outputs.tag }} + ${{ env.DOCKERHUB_USER }}/${{ env.IMAGE_NAME }}:latest + cache-from: type=gha + cache-to: type=gha,mode=max + + # --------------------------------------------------------------------- + # 2) Deploy to STAGING automatically — no approval needed. + # NOTE: Ghaymah's current dashboard doesn't expose a public + # redeploy-by-API step, so this job posts a reminder / calls a + # webhook if you set one up. If Ghaymah adds a CLI/API later, + # replace the "Trigger redeploy" step below with the real command. + # --------------------------------------------------------------------- + deploy-staging: + needs: build-and-push + runs-on: ubuntu-latest + environment: + name: staging + url: https://ghaymah-mithal-monitor-de4c1ce11f85.hosted.ghaymah.systems + steps: + - name: New image pushed — ready for staging redeploy + run: | + echo "New image pushed: ${{ env.DOCKERHUB_USER }}/${{ env.IMAGE_NAME }}:${{ needs.build-and-push.outputs.image_tag }}" + echo "Go to the Ghaymah dashboard -> your app -> Redeploy, and pick this tag from Docker Hub." + # If/when Ghaymah exposes a redeploy webhook or CLI, call it here, e.g.: + # curl -X POST "$GHAYMAH_REDEPLOY_WEBHOOK_URL" + + - name: Smoke test staging /health + run: | + sleep 10 + curl -f https://ghaymah-exam-app-06b532d0a81b.hosted.ghaymah.systems/health + + # --------------------------------------------------------------------- + # 3) Deploy to PRODUCTION — gated behind a manual approval. + # The "environment: production" + protection rule configured in the + # repo settings (Settings -> Environments -> production -> Required + # reviewers) is what forces a human to click "Approve" in the + # Actions tab before this job runs. + # --------------------------------------------------------------------- + deploy-production: + needs: [build-and-push, deploy-staging] + runs-on: ubuntu-latest + environment: + name: production # <-- manual approval gate lives here (repo settings) + url: https://ghaymah-exam-app-06b532d0a81b.hosted.ghaymah.systems + steps: + - name: New image ready for production redeploy + run: | + echo "Approved. Image ready: ${{ env.DOCKERHUB_USER }}/${{ env.IMAGE_NAME }}:${{ needs.build-and-push.outputs.image_tag }}" + echo "Go to the Ghaymah dashboard -> your production app -> Redeploy, and pick this tag from Docker Hub." + + - name: Smoke test production /health + run: | + sleep 10 + curl -f https://ghaymah-exam-app-06b532d0a81b.hosted.ghaymah.systems/health diff --git a/q4-scalability/architecture.png b/q4-scalability/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..4967d4dd4979670fa51afd27f73fcc360bb0e0af GIT binary patch literal 144562 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 + + + + +لوحة مراقبة mithal.space + + + +
+
+

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

+
Ghaymah SRE Exam — Q5 · يقرأ بيانات من metrics.json (ينتجها monitor.py كل دقيقة)
+
+ +
+
+
Uptime (24 ساعة)
+
+
+
+
آخر زمن استجابة
+
+
+
+
شهادة SSL
+
+
+
+
زمن DNS
+
+
+
+ +
+

زمن الاستجابة — آخر ساعة

+ +
كل نقطة = فحص واحد (كل دقيقة تقريبًا)
+
+ +
+

سجل آخر 10 فحوصات

+ + + +
الوقتالحالةStatus Codeزمن الاستجابةDNSSearch
جاري تحميل البيانات من metrics.json...
+
+ +
مصدر البيانات: metrics.json الناتج عن monitor.py (نفس المجلد) · حدّث الصفحة لتحديث البيانات، أو استضف monitor.py على Ghaymah كمهمة مجدولة (cron/scheduled task)
+
+ + + + diff --git a/q5-mithal-monitor/entrypoint.sh b/q5-mithal-monitor/entrypoint.sh new file mode 100644 index 0000000..be3d9ef --- /dev/null +++ b/q5-mithal-monitor/entrypoint.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# Starts monitor.py in the background (checks mithal.space every 60s, +# writes metrics.csv + metrics.json into /app), then serves the current +# directory (including dashboard.html and metrics.json) over HTTP on 8080 +# so the dashboard can fetch('./metrics.json') directly. +set -e + +python3 monitor.py --url "${MONITOR_TARGET_URL:-https://mithal.space}" --interval 60 & + +exec python3 -m http.server 8080 diff --git a/q5-mithal-monitor/monitor.py b/q5-mithal-monitor/monitor.py new file mode 100644 index 0000000..680a962 --- /dev/null +++ b/q5-mithal-monitor/monitor.py @@ -0,0 +1,172 @@ +""" +monitor.py — Monitoring script for mithal.space (Q5) + +Collects every 60 seconds: + - Latency: HTTP request response time + - Uptime: is the site reachable? (status code) + - SSL: certificate validity + days until expiry + - DNS: DNS resolution time + - Search Response: time to send a query and get a response + +Stores results in both CSV and JSON so dashboard.html can read either. + +Usage: + python3 monitor.py --url https://mithal.space --interval 60 + python3 monitor.py --once # single run, useful for cron/testing +""" + +import argparse +import csv +import json +import socket +import ssl +import time +from datetime import datetime, timezone +from pathlib import Path +from urllib.parse import urlparse + +import urllib.request +import urllib.error + +CSV_FILE = Path(__file__).parent / "metrics.csv" +JSON_FILE = Path(__file__).parent / "metrics.json" +CSV_FIELDS = [ + "timestamp", "up", "status_code", "latency_ms", + "dns_ms", "ssl_valid", "ssl_days_remaining", + "search_ok", "search_response_ms", "error", +] + + +def check_dns(hostname: str): + """Returns DNS resolution time in ms, or None on failure.""" + start = time.perf_counter() + try: + socket.gethostbyname(hostname) + return round((time.perf_counter() - start) * 1000, 2) + except socket.gaierror: + return None + + +def check_ssl(hostname: str, port: int = 443): + """Returns (is_valid, days_remaining) for the site's SSL certificate.""" + try: + ctx = ssl.create_default_context() + with socket.create_connection((hostname, port), timeout=5) as sock: + with ctx.wrap_socket(sock, server_hostname=hostname) as ssock: + cert = ssock.getpeercert() + expiry = datetime.strptime(cert["notAfter"], "%b %d %H:%M:%S %Y %Z") + expiry = expiry.replace(tzinfo=timezone.utc) + days_remaining = (expiry - datetime.now(timezone.utc)).days + return True, days_remaining + except Exception: + return False, None + + +def check_http(url: str, timeout: int = 10): + """Returns (up, status_code, latency_ms, error).""" + start = time.perf_counter() + try: + req = urllib.request.Request(url, headers={"User-Agent": "Ghaymah-SRE-Monitor/1.0"}) + with urllib.request.urlopen(req, timeout=timeout) as resp: + latency_ms = round((time.perf_counter() - start) * 1000, 2) + return True, resp.status, latency_ms, None + except urllib.error.HTTPError as e: + latency_ms = round((time.perf_counter() - start) * 1000, 2) + # site responded, just with an error status (e.g. 404/500) + return e.code < 500, e.code, latency_ms, str(e) + except Exception as e: + latency_ms = round((time.perf_counter() - start) * 1000, 2) + return False, None, latency_ms, str(e) + + +def check_search(base_url: str, query: str = "test", timeout: int = 10): + """ + Simulates sending a search query to the site and measuring response time. + Adjust `search_path` below to match mithal.space's actual search endpoint + once known; falls back to hitting the homepage with a query string. + """ + search_path = "/search" + url = f"{base_url.rstrip('/')}{search_path}?q={query}" + start = time.perf_counter() + try: + req = urllib.request.Request(url, headers={"User-Agent": "Ghaymah-SRE-Monitor/1.0"}) + with urllib.request.urlopen(req, timeout=timeout) as resp: + elapsed_ms = round((time.perf_counter() - start) * 1000, 2) + return resp.status < 400, elapsed_ms + except Exception: + elapsed_ms = round((time.perf_counter() - start) * 1000, 2) + return False, elapsed_ms + + +def run_check(url: str): + parsed = urlparse(url) + hostname = parsed.hostname + + dns_ms = check_dns(hostname) + up, status_code, latency_ms, error = check_http(url) + ssl_valid, ssl_days = check_ssl(hostname) + search_ok, search_ms = check_search(url) + + return { + "timestamp": datetime.now(timezone.utc).isoformat(), + "up": up, + "status_code": status_code, + "latency_ms": latency_ms, + "dns_ms": dns_ms, + "ssl_valid": ssl_valid, + "ssl_days_remaining": ssl_days, + "search_ok": search_ok, + "search_response_ms": search_ms, + "error": error, + } + + +def append_csv(row: dict): + is_new = not CSV_FILE.exists() + with open(CSV_FILE, "a", newline="") as f: + writer = csv.DictWriter(f, fieldnames=CSV_FIELDS) + if is_new: + writer.writeheader() + writer.writerow(row) + + +def append_json(row: dict, keep_last: int = 1440): + """Keeps a rolling window of the last N checks (1440 = 24h at 1/min).""" + data = [] + if JSON_FILE.exists(): + try: + data = json.loads(JSON_FILE.read_text()) + except json.JSONDecodeError: + data = [] + data.append(row) + data = data[-keep_last:] + JSON_FILE.write_text(json.dumps(data, indent=2)) + + +def main(): + parser = argparse.ArgumentParser(description="Monitor mithal.space") + parser.add_argument("--url", default="https://mithal.space") + parser.add_argument("--interval", type=int, default=60, help="seconds between checks") + parser.add_argument("--once", action="store_true", help="run a single check and exit") + args = parser.parse_args() + + while True: + result = run_check(args.url) + append_csv(result) + append_json(result) + + status = "UP" if result["up"] else "DOWN" + print( + f"[{result['timestamp']}] {status} | " + f"latency={result['latency_ms']}ms | dns={result['dns_ms']}ms | " + f"ssl_days_left={result['ssl_days_remaining']} | " + f"search={result['search_response_ms']}ms" + ) + + if args.once: + break + time.sleep(args.interval) + + +if __name__ == "__main__": + main()