Move Dockerfile to repository root for Ghaymah build

هذا الالتزام موجود في:
2026-07-26 14:59:04 +03:00
الأصل d0e5f30eac
التزام b6a6aa0af2
5 ملفات معدلة مع 109 إضافات و0 حذوفات

11
Dockerfile Normal file
عرض الملف

@@ -0,0 +1,11 @@
FROM python:3.10-slim
WORKDIR /app
RUN pip install --no-cache-dir fastapi uvicorn requests
COPY . .
EXPOSE 8000
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]

24
app.py Normal file
عرض الملف

@@ -0,0 +1,24 @@
from fastapi import FastAPI
import time
app = FastAPI()
start_time = time.time()
request_count = 0
@app.middleware("http")
def count_requests(request, call_next):
global request_count
request_count += 1
return call_next(request)
@app.get("/")
def root():
return {"message": "Welcome to Ghaymah SRE Service"}
@app.get("/health")
def health():
return {
"status": "healthy",
"uptime_seconds": round(time.time() - start_time, 2),
"total_requests": request_count
}

48
dashboard.html Normal file
عرض الملف

@@ -0,0 +1,48 @@
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<title>Ghaymah App Dashboard</title>
<style>
body { font-family: system-ui, sans-serif; background: #0f172a; color: #fff; padding: 30px; }
.grid { display: flex; gap: 20px; margin-top: 20px; }
.card { background: #1e293b; padding: 25px; border-radius: 10px; flex: 1; text-align: center; border: 1px solid #334155; }
.status-up { color: #22c55e; }
.status-down { color: #ef4444; }
</style>
</head>
<body>
<h2>🚀 لوحة مراقبة التطبيق - Ghaymah Cloud</h2>
<div class="grid">
<div class="card">
<h3>الحالة (Status)</h3>
<h1 id="status" class="status-up">--</h1>
</div>
<div class="card">
<h3>زمن الاستجابة (Latency)</h3>
<h1><span id="latency">0</span> ثانية</h1>
</div>
<div class="card">
<h3>إجمالي الطلبات (Total Requests)</h3>
<h1 id="requests">0</h1>
</div>
</div>
<script>
async function updateDashboard() {
try {
const res = await fetch('metrics.json');
const data = await res.json();
document.getElementById('status').innerText = data.status === "200" ? "UP (200 OK)" : "DOWN (" + data.status + ")";
document.getElementById('status').className = data.status === "200" ? "status-up" : "status-down";
document.getElementById('latency').innerText = data.latency;
document.getElementById('requests').innerText = data.total_requests;
} catch (e) {
console.log("Waiting for metrics data...");
}
}
setInterval(updateDashboard, 5000);
updateDashboard();
</script>
</body>
</html>

25
health-check.sh Executable file
عرض الملف

@@ -0,0 +1,25 @@
#!/bin/bash
# استبدل هذا الرابط بالرابط العام المستلم من غيمة
TARGET_URL="https://q1-app.deploy.ghaymah.systems/health"
echo "Starting Monitoring for $TARGET_URL..."
while true; do
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
# جلب الاستجابة وحساب الوقت
RESPONSE=$(curl -s "$TARGET_URL")
HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$TARGET_URL")
RESPONSE_TIME=$(curl -s -w "%{time_total}" -o /dev/null "$TARGET_URL")
# استخراج عدد الطلبات من الـ Endpoint
TOTAL_REQUESTS=$(echo "$RESPONSE" | grep -o '"total_requests":[0-9]*' | grep -o '[0-9]*')
echo "[$TIMESTAMP] Status: $HTTP_STATUS | Latency: ${RESPONSE_TIME}s | Requests: ${TOTAL_REQUESTS:-0}"
# تحديث ملف المتركس للداشبورد
echo "{\"timestamp\": \"$TIMESTAMP\", \"status\": \"$HTTP_STATUS\", \"latency\": $RESPONSE_TIME, \"total_requests\": ${TOTAL_REQUESTS:-0}}" > metrics.json
sleep 30
done

1
metrics.json Normal file
عرض الملف

@@ -0,0 +1 @@
{"timestamp": "2026-07-26T11:28:46Z", "status": "200", "latency": 0.004614}