From 76f658bfabede35d4da94c05a77400a9e30c8fed Mon Sep 17 00:00:00 2001 From: arabdalla88 Date: Mon, 27 Jul 2026 23:06:16 +0300 Subject: [PATCH] welcome ghaymah --- README.md | 1 + common-mortakaz/integration-1.md | 35 +++++++ common-mortakaz/integration-2.md | 40 ++++++++ common-qabilah/qabilah-profile.txt | 1 + q1-deploy-monitor/Dockerfile | 17 ++++ q1-deploy-monitor/app.py | 31 ++++++ q1-deploy-monitor/dashboard.html | 53 ++++++++++ q1-deploy-monitor/health-check.sh | 20 ++++ q2-postmortem/postmortem-report.md | 44 +++++++++ q3-cicd/README.md | 14 +++ q3-cicd/workflow.yml | 55 +++++++++++ q4-scalability/architecture.png | Bin 0 -> 76354 bytes q4-scalability/calculations.md | 33 +++++++ q5-mithal-monitor/Dockerfile | 17 ++++ q5-mithal-monitor/dashboard.html | 149 +++++++++++++++++++++++++++++ q5-mithal-monitor/metrics.json | 74 ++++++++++++++ q5-mithal-monitor/monitor.py | 120 +++++++++++++++++++++++ 17 files changed, 704 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 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/metrics.json create mode 100644 q5-mithal-monitor/monitor.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..bbe1936 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +https://qabilah.com/profile/abdulrahmanabdalla88/professional-profile \ No newline at end of file diff --git a/common-mortakaz/integration-1.md b/common-mortakaz/integration-1.md new file mode 100644 index 0000000..149b25b --- /dev/null +++ b/common-mortakaz/integration-1.md @@ -0,0 +1,35 @@ +# مقترح تكامل: منصة إدارة المشاريع "فريقي" مع مزود السحابة "غيمة" (Ghaymah.systems) + +## 1. وصف المنتج المختار +**"فريقي"** هي منصة عربية متكاملة لإدارة المشاريع والمهام، صُممت لتمنح الفرق العربية طريقة أوضح وأكثر سلاسة للعمل معًا، تنظيم المهام، ومتابعة الإنتاجية دون تعقيد. + +## 2. كيف يتكامل مع ghaymah.systems +يمكن ربط منصة "فريقي" مع البنية التحتية لمنصة **غيمة (Ghaymah.systems)** السحابية بالآلية التالية: +* **نشر البيئات التلقائي (Automated Environment Provisioning):** ربط مهام المشروع داخل منصة "فريقي" (مثل حالة المهام عند انتقالها إلى "تم التنفيذ") بإطلاق حاويات تطوير أو بيئات اختبار (Testing Environments) مباشرة على سيرفرات "غيمة" عبر الـ Webhooks والـ APIs. +* **مزامنة الموارد السحابية:** تتبع استهلاك الموارد المخصصة لكل مشروع فريق واستعراض مؤشراتها داخل لوحة تحكم "فريقي". + +## 3. القيمة المضافة للمستخدم النهائي +* **ربط دورة حياة التطوير بإدارة المهام:** الانتقال السلس من تخطيط المهام وبنائها إلى نشرها واختبارها على السحابة بضغطة زر واحدة. +* **توفير الوقت والجهد:** إلغاء الحاجة للتدخل اليدوي لإعداد خوادم التطوير، مما يعزز كفاءة فرق الـ DevOps والـ Developers العرب. +* **متابعة موحدة:** رؤية شاملة لمدير المشروع تشمل حالة المهام وحالة السيرفرات المستضافة على "غيمة" في مكان واحد. + +## 4. رسم بسيط يوضح التكامل (Architecture Sketch) ++-----------------------------------+ +| منصة إدارة المشاريع "فريقي" | +| (Task & Team Management) | ++-----------------------------------+ + | + v (Trigger via Webhook / API) ++-----------------------------------+ +| منصة غيمة (Ghaymah.systems) | +| (Cloud Provider & Docker) | ++-----------------------------------+ + | + v (Provisioning & Deployment) ++-----------------------------------+ +| بيئات العمل والخوادم السحابية | ++-----------------------------------+ + +## 5. التحديات التقنية أو التجارية المحتملة +* **التحديات التقنية:** إدارة صلاحيات الوصول وتأمين مفاتيح الربط (API Tokens) بين منصة إدارة المهام ومزود السحابة لمنع أي وصول غير مصرح به. +* **التحديات التجارية:** إدارة استهلاك الموارد السحابية المرتبطة بالمهام وضمان تسعيرها بشكل عادل يتناسب مع باقات المستخدمين على المنصتين. \ No newline at end of file diff --git a/common-mortakaz/integration-2.md b/common-mortakaz/integration-2.md new file mode 100644 index 0000000..234573d --- /dev/null +++ b/common-mortakaz/integration-2.md @@ -0,0 +1,40 @@ +# مقترح تكامل: واجهة "إسأل مرتكز" مع محرك البحث العربي "ميثال" (Mithal.space) + +## 1. وصف المنتج المختار +**"إسأل مرتكز"** هي أداة استعلام ذكية تعتمد على استخراج وتحليل بيانات المشاريع والمطورين العرب المسجلين على منصة مرتكز. تقدم الأداة تقارير مبسطة ومرئية وسهلة الهضم (مثل التوزيع النسبي للفئات، المشاريع الداعمة للقضايا، وأكثر المطورين نشاطاً) بدلاً من إغراق المستخدم بكميات البيانات الخام. + +## 2. كيف يتكامل مع mithal.space +تعتمد منصة **ميثال (mithal.space)** كـ محرك بحث عربي متقدم، ويمكن تحقيق التكامل بالآلية التالية: +* **موتور البحث الخلفي (Search & RAG Backend):** يتم ربط واجهة استعلام "إسأل مرتكز" بمحرك بحث "ميثال" عبر واجهات البرمجة (RESTful APIs) بحيث تُرسل استفسارات المستخدمين (مثل البحث عن مطورين أو مشاريع معينة) لتتم معالجتها وفهرستها عبر محرك "ميثال". +* **الفهرسة الدلالية (Semantic Indexing):** يقوم محرك "ميثال" بفهرسة البيانات الوصفية للمشاريع (Metadata) وأوصافها باللغة العربية بدقة عالية، مما يرفع سرعة واستجابة استعلامات "إسأل مرتكز". + +## 3. القيمة المضافة للمستخدم النهائي +* **دقة وسرعة الاستعلام:** الاستفادة من قوة محرك بحث "ميثال" في معالجة النصوص العربية لاسترجاع النتائج بدقة فائقة وفورية. +* **إثراء المحتوى التقني العربي:** مساعدة الباحثين والمطورين في الوصول إلى المشاريع المفتوحة المصدر وأصحابها بضغطة زر واحدة ومن خلال واجهة محادثة ذكية مبسطة. +* **تجربة مستخدم تفاعلية:** دمج تقارير "مرتكز" الإحصائية والمرئية مع قوة الفهرسة البحثية لـ "ميثال". + +## 4. رسم بسيط يوضح التكامل (Architecture Sketch) ++-----------------------------------+ +| مستخدم منصة "مرتكز" | +| (User Query / Interface) | ++-----------------------------------+ + | + v ++-----------------------------------+ +| واجهة "إسأل مرتكز" (API) | ++-----------------------------------+ + | (HTTP JSON Request) + v ++-----------------------------------+ +| محرك البحث العربي "ميثال" | +| (Mithal.space Core) | ++-----------------------------------+ + | (Data Retrieval & RAG) + v ++-----------------------------------+ +| قاعدة البيانات وفهرسة المشاريع | ++-----------------------------------+ + +## 5. التحديات التقنية أو التجارية المحتملة +* **التحديات التقنية:** معالجة الغموض اللغوي في استعلامات البحث باللغة العربية وضمان توافق زمن الاستجابة (Latency) مع التحديثات المستمرة للبيانات. +* **التحديات التجارية:** ضمان استدامة الموارد الحسابية لموتور البحث مع تزايد عدد المشاريع والمستخدمين المسجلين على منصة مرتكز. \ No newline at end of file diff --git a/common-qabilah/qabilah-profile.txt b/common-qabilah/qabilah-profile.txt new file mode 100644 index 0000000..bbe1936 --- /dev/null +++ b/common-qabilah/qabilah-profile.txt @@ -0,0 +1 @@ +https://qabilah.com/profile/abdulrahmanabdalla88/professional-profile \ No newline at end of file diff --git a/q1-deploy-monitor/Dockerfile b/q1-deploy-monitor/Dockerfile new file mode 100644 index 0000000..bee4786 --- /dev/null +++ b/q1-deploy-monitor/Dockerfile @@ -0,0 +1,17 @@ +# Use an official lightweight Python image +FROM python:3.9-slim + +# Set the working directory inside the container +WORKDIR /app + +# Install required dependencies +RUN pip install --no-cache-dir fastapi uvicorn + +# Copy all project files into the container +COPY . /app + +# Expose the application port +EXPOSE 8000 + +# Command to run the application using Uvicorn server +CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/q1-deploy-monitor/app.py b/q1-deploy-monitor/app.py new file mode 100644 index 0000000..598a8c3 --- /dev/null +++ b/q1-deploy-monitor/app.py @@ -0,0 +1,31 @@ +import time +from fastapi import FastAPI, Request +from fastapi.responses import HTMLResponse + +app = FastAPI() + +# Global counter to track total requests +request_count = 0 + +@app.middleware("http") +async def count_requests(request: Request, call_next): + global request_count + request_count += 1 + start_time = time.time() + + response = await call_next(request) + + process_time = (time.time() - start_time) * 1000 + response.headers["X-Process-Time"] = f"{process_time:.2f}ms" + return response + +# 3. Health Endpoint required by the task +@app.get("/health") +def health_check(): + return {"status": "healthy", "requests": request_count} + +# 5. Dashboard Endpoint serving the HTML file +@app.get("/", response_class=HTMLResponse) +def get_dashboard(): + with open("dashboard.html", "r", encoding="utf-8") as f: + return f.read() \ No newline at end of file diff --git a/q1-deploy-monitor/dashboard.html b/q1-deploy-monitor/dashboard.html new file mode 100644 index 0000000..4f12f2b --- /dev/null +++ b/q1-deploy-monitor/dashboard.html @@ -0,0 +1,53 @@ + + + + + Ghaymah App Dashboard + + + +

Application Monitoring Dashboard

+ +
+

Status

+

Loading...

+
+ +
+

Total Requests

+

0

+
+ +
+

Response Time

+

0 ms

+
+ + + + \ No newline at end of file diff --git a/q1-deploy-monitor/health-check.sh b/q1-deploy-monitor/health-check.sh new file mode 100644 index 0000000..e16eeb4 --- /dev/null +++ b/q1-deploy-monitor/health-check.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +URL="http://localhost:8000/health" + +echo "Starting application monitoring. Checking every 30 seconds..." + +while true; do + # Send HTTP GET request and get the status code + RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $URL) + TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') + + if [ "$RESPONSE" -eq 200 ]; then + echo "[$TIMESTAMP] Status: HEALTHY (HTTP 200)" + else + echo "[$TIMESTAMP] Status: DOWN (HTTP $RESPONSE)" + fi + + # Wait for 30 seconds before the next check + sleep 30 +done \ No newline at end of file diff --git a/q2-postmortem/postmortem-report.md b/q2-postmortem/postmortem-report.md new file mode 100644 index 0000000..e1f3c27 --- /dev/null +++ b/q2-postmortem/postmortem-report.md @@ -0,0 +1,44 @@ +# Incident Postmortem: Application Frequent Crashes (OOMKilled) + +--- + +## 1. Incident Overview & Summary +- **Incident Date:** July 26, 2026 +- **Impact:** The application deployed on Ghaymah Cloud suffered from repeated crashes every 45 minutes, causing service downtime for users. +- **Root Cause:** **OOMKilled (Out Of Memory)** error triggered because the container exceeded its allocated memory limit due to unoptimized resource configuration or a potential memory leak. + +--- + +## 2. Timeline +- **00:00** - Application deployed and running normally. +- **00:30** - Memory consumption gradually increases as traffic and background tasks accumulate. +- **00:45** - Memory usage reaches 100% of the container limit; the Linux kernel terminates the process (`OOMKilled`). +- **00:46** - Container restarts automatically, and the cycle repeats precisely every 45 minutes. + +--- + +## 3. Root Cause Analysis +1. **Resource Limits:** The container was assigned insufficient RAM limits in its deployment configuration. +2. **Memory Leak / Garbage Collection:** Long-running background jobs or unclosed database connections failed to release memory back to the system, leading to a steady upward trend until exhaustion. + +--- + +## 4. Preventive Actions & Recommendations +- **Increase Container RAM:** Scale up the memory limits in the deployment configuration on Ghaymah Cloud. +- **Code Optimization:** Audit the application code to fix any memory leaks and ensure proper resource disposal. +- **Health & Memory Probes:** Implement stricter liveness and readiness probes. + +--- + +## 5. Auto-Scaling Policy Design +To prevent recurring downtime under high load, an auto-scaling policy should be configured on Ghaymah Cloud: +- **Trigger Metric:** Memory Utilization or CPU Utilization. +- **Scale-Up Threshold:** Automatically add a new container instance (replica) when memory usage exceeds **75%** for 5 consecutive minutes. +- **Max Instances:** Set a cap of 3 instances to handle traffic spikes safely without exhausting cluster resources. + +--- + +## 6. Early Detection & Monitoring Setup +Using Ghaymah Cloud monitoring tools to detect the issue proactively before crashes occur: +- **Custom Alerts:** Set up an alerting rule (via Webhook/Email) to notify the DevOps team when container memory usage crosses **70%**. +- **Real-Time Dashboards:** Monitor memory trends continuously using the metrics dashboard to spot gradual upward slopes before hitting the OOM threshold. \ No newline at end of file diff --git a/q3-cicd/README.md b/q3-cicd/README.md new file mode 100644 index 0000000..da5c0df --- /dev/null +++ b/q3-cicd/README.md @@ -0,0 +1,14 @@ +# --- Q3 Theoretical Documentation --- + +## 1. Difference Between Staging and Production Environments: +- **Staging Environment:** A pre-production, isolated environment identical to production, used exclusively for testing updates, running integration tests, and catching bugs safely before real users see them. +- **Production Environment:** The live, primary environment accessed by end-users, where stability, high availability, and security are critical. + +## 2. Ghaymah CLI Integration & Connection: +To link and authenticate with Ghaymah CLI locally or in pipelines: +1. Install the CLI tool: + `curl -sL https://cli.ghaymah.systems/install.sh | bash` +2. Authenticate using your API token: + `ghaymah auth login --token ` +3. Verify connection status: + `ghaymah cluster status` \ No newline at end of file diff --git a/q3-cicd/workflow.yml b/q3-cicd/workflow.yml new file mode 100644 index 0000000..8b8b0c0 --- /dev/null +++ b/q3-cicd/workflow.yml @@ -0,0 +1,55 @@ +name: CI/CD Pipeline to Ghaymah + +on: + push: + branches: [ "main" ] + +jobs: + build-and-push: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Log in to Ghaymah Container Registry + uses: docker/login-action@v3 + with: + registry: registry.ghaymah.systems + username: ${{ secrets.GHAYMAH_USERNAME }} + password: ${{ secrets.GHAYMAH_TOKEN }} + + - name: Build and Push Docker Image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: registry.ghaymah.systems/abdulrahman/deploy-monitor:latest + + staging-deploy: + needs: build-and-push + runs-on: ubuntu-latest + steps: + - name: Deploy to Staging Environment + run: | + echo "Deploying the built image to Staging server for testing..." + # ghaymah CLI command example for staging + + production-approval: + needs: staging-deploy + runs-on: ubuntu-latest + environment: production # This triggers the GitHub Manual Approval gate + steps: + - name: Approved for Production + run: echo "Manual approval passed. Proceeding to production deployment." + + production-deploy: + needs: production-approval + runs-on: ubuntu-latest + steps: + - name: Deploy to Production + run: | + echo "Deploying application to live Production server..." + # ghaymah CLI command example for production + + + diff --git a/q4-scalability/architecture.png b/q4-scalability/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..538b647ee3b93e48d56f48e85f604e83984cadd8 GIT binary patch literal 76354 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

4hx<|ZEL}_y~8KJg_9Ep4HRYc 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� zK!Hs;vaIG5tHj?ASUm(o;nCFAaATJy8AJ}MK{L6FI?Arwn~|FJb(%c@Se1hgo(02~ z*<&z#*)-_m`@tH8core18n|;E-uz%O2~2`v77H@qHE3-#k(=t0riG16aPD2*gcBxGR>OXp6YBy>5tB_N>pJFSyb`=FLleZ9=XN*me(Io*cZI_3;v@> zy`f*YSTJfWNme8F$OOU-&8S2m`wGdhI0g<&oR={`0C9`h$+REJtqA*JHb|-n!vfGp zH3T2N(uUiHQHkJ7Zz+>40`aba5=j6mt5V>@lkwGf0ClW^CK?NAU+Qe ziho(9Lv^vSqhR#I;yF0;j61tcRQ$WRmvcnO4jh19^oT0CAG7i`u zMHR!8f`IuG_{S_#6v5#_D%0m7Gl=tM>vmzxeu^S^5^Q)iXtEmN$S~l2$gC-K2z2*E zE+{pF&MO9IYAk_Df!JJYAas>PaM)M`x*RCXgDuRv4qnT7g$3mTAnXk-!2JqPSR58s zVlnD1XdpvD_Ec(|8WE%**I_ch4eFP=Fv5ixUJbfvC0wK(Ii& zXO@5fu&tt?evlPtQz~IBr3w&-7m$Lf(t;;T!1G*mF-MEEY + + + + لوحة مراقبة موقع مثال - Mithal Monitor + + + + + +

+

لوحة مراقبة موقع مثال (mithal.space)

+ +
+
+

حالة الموقع

+

جاري التحميل...

+
+
+

حالة SSL وتاريخ الانتهاء

+

جاري التحميل...

+
+
+

متوسط الـ Latency

+

جاري التحميل...

+
+
+ + +
+

رسم بياني لزمن الاستجابة (Latency - آخر ساعة)

+ +
+ +

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

+ + + + + + + + + + + + +
الوقتحالة الموقعزمن الاستجابةزمن البحثحالة SSL
+
+ + + + \ No newline at end of file diff --git a/q5-mithal-monitor/metrics.json b/q5-mithal-monitor/metrics.json new file mode 100644 index 0000000..8cbe7bb --- /dev/null +++ b/q5-mithal-monitor/metrics.json @@ -0,0 +1,74 @@ +[ + { + "timestamp": "2026-07-27 19:52:03", + "status_code": 200, + "latency_ms": 1041.82, + "dns_ms": 9.59, + "search_response_ms": 944.04, + "ssl_status": "صحيحة (تنتهي خلال 49 يوم)" + }, + { + "timestamp": "2026-07-27 19:53:06", + "status_code": 200, + "latency_ms": 961.73, + "dns_ms": 1.01, + "search_response_ms": 951.24, + "ssl_status": "صحيحة (تنتهي خلال 49 يوم)" + }, + { + "timestamp": "2026-07-27 19:54:09", + "status_code": 200, + "latency_ms": 1117.17, + "dns_ms": 21.45, + "search_response_ms": 849.41, + "ssl_status": "صحيحة (تنتهي خلال 49 يوم)" + }, + { + "timestamp": "2026-07-27 19:55:12", + "status_code": 200, + "latency_ms": 1785.42, + "dns_ms": 0.0, + "search_response_ms": 846.86, + "ssl_status": "صحيحة (تنتهي خلال 49 يوم)" + }, + { + "timestamp": "2026-07-27 19:56:23", + "status_code": 200, + "latency_ms": 3183.29, + "dns_ms": 1.12, + "search_response_ms": 4690.82, + "ssl_status": "صحيحة (تنتهي خلال 49 يوم)" + }, + { + "timestamp": "2026-07-27 19:57:25", + "status_code": 200, + "latency_ms": 1111.06, + "dns_ms": 8.02, + "search_response_ms": 848.63, + "ssl_status": "صحيحة (تنتهي خلال 49 يوم)" + }, + { + "timestamp": "2026-07-27 19:58:28", + "status_code": 200, + "latency_ms": 1030.14, + "dns_ms": 1.01, + "search_response_ms": 839.49, + "ssl_status": "صحيحة (تنتهي خلال 49 يوم)" + }, + { + "timestamp": "2026-07-27 19:59:31", + "status_code": 200, + "latency_ms": 985.51, + "dns_ms": 18.2, + "search_response_ms": 931.7, + "ssl_status": "صحيحة (تنتهي خلال 49 يوم)" + }, + { + "timestamp": "2026-07-27 20:00:33", + "status_code": 200, + "latency_ms": 936.12, + "dns_ms": 13.48, + "search_response_ms": 939.24, + "ssl_status": "صحيحة (تنتهي خلال 49 يوم)" + } +] \ No newline at end of file diff --git a/q5-mithal-monitor/monitor.py b/q5-mithal-monitor/monitor.py new file mode 100644 index 0000000..17b2aac --- /dev/null +++ b/q5-mithal-monitor/monitor.py @@ -0,0 +1,120 @@ +import time +import requests +import json +import ssl +import socket +import os +import asyncio +from datetime import datetime, timezone +from urllib.parse import urlparse +from fastapi import FastAPI +from fastapi.responses import JSONResponse, FileResponse +from contextlib import asynccontextmanager + +# --- تعريف الـ Lifespan لحل مشكلة الـ startup وتوليد الخلفية --- +@asynccontextmanager +async def lifespan(app: FastAPI): + task = asyncio.create_task(background_monitor()) + yield + task.cancel() + +app = FastAPI(lifespan=lifespan) + +TARGET_URL = "https://mithal.space" +LOG_FILE = "metrics.json" + +# --- دالة الفحص الخلفية بـ FastAPI --- +async def background_monitor(): + while True: + parsed_url = urlparse(TARGET_URL) + hostname = parsed_url.netloc + + start_time = time.time() + status_code = 0 + latency = 0 + ssl_expiry = "N/A" + dns_time = 0 + search_time = 0 + + try: + dns_start = time.time() + socket.gethostbyname(hostname) + dns_time = round((time.time() - dns_start) * 1000, 2) + except: + dns_time = -1 + + try: + response = requests.get(TARGET_URL, timeout=10) + latency = round((time.time() - start_time) * 1000, 2) + status_code = response.status_code + except: + latency = -1 + status_code = 503 + + try: + search_start = time.time() + requests.get(f"{TARGET_URL}/search?q=test", timeout=5) + search_time = round((time.time() - search_start) * 1000, 2) + except: + search_time = -1 + + try: + context = ssl.create_default_context() + with socket.create_connection((hostname, 443), timeout=5) as sock: + with context.wrap_socket(sock, server_hostname=hostname) as ssock: + cert = ssock.getpeercert() + expiry_date = datetime.strptime(cert['notAfter'], '%b %d %H:%M:%S %Y %Z').replace(tzinfo=timezone.utc) + days_left = (expiry_date - datetime.now(timezone.utc)).days + ssl_expiry = f"صحيحة (تنتهي خلال {days_left} يوم)" + except: + ssl_expiry = "خطأ في جلب SSL" + + timestamp_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + record = { + "timestamp": timestamp_str, + "status_code": status_code, + "latency_ms": latency, + "dns_ms": dns_time, + "search_response_ms": search_time, + "ssl_status": ssl_expiry + } + + try: + if os.path.exists(LOG_FILE): + with open(LOG_FILE, "r", encoding="utf-8") as f: + data = json.load(f) + else: + data = [] + except: + data = [] + + data.append(record) + if len(data) > 20: + data = data[-20:] + + with open(LOG_FILE, "w", encoding="utf-8") as f: + json.dump(data, f, indent=4, ensure_ascii=False) + + print(f"[{timestamp_str}] Background Checked {TARGET_URL} - Status: {status_code} - Latency: {latency}ms") + + # الانتظار لمدة 30 ثانية أو دقيقة بحسب رغبتك + await asyncio.sleep(60) + +# --- المسارات (Endpoints) --- +@app.get("/") +def index(): + if os.path.exists("dashboard.html"): + return FileResponse("dashboard.html") + return {"message": "Dashboard file not found"} + +@app.get("/api/metrics") +def get_metrics(): + if os.path.exists(LOG_FILE): + try: + with open(LOG_FILE, 'r', encoding='utf-8') as f: + data = json.load(f) + return JSONResponse(content=data) + except: + return JSONResponse(content=[]) + return JSONResponse(content=[]) +