Restructure repository for final submission
هذا الالتزام موجود في:
60
q1-deploy-monitor/app.py
Normal file
60
q1-deploy-monitor/app.py
Normal file
@@ -0,0 +1,60 @@
|
||||
"""
|
||||
Simple API app for Ghaymah SRE exam - Q1
|
||||
Provides:
|
||||
GET / -> basic info
|
||||
GET /health -> health check endpoint (used by monitoring)
|
||||
GET /metrics -> simple JSON metrics (request count, uptime)
|
||||
"""
|
||||
import time
|
||||
from flask import Flask, jsonify
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
@app.after_request
|
||||
def add_cors_headers(response):
|
||||
# Allows the dashboard (served from a different origin, e.g. file://
|
||||
# or another host) to call this API from the browser.
|
||||
response.headers["Access-Control-Allow-Origin"] = "*"
|
||||
response.headers["Access-Control-Allow-Methods"] = "GET, OPTIONS"
|
||||
response.headers["Access-Control-Allow-Headers"] = "Content-Type"
|
||||
return response
|
||||
|
||||
START_TIME = time.time()
|
||||
REQUEST_COUNT = 0
|
||||
|
||||
|
||||
@app.before_request
|
||||
def count_requests():
|
||||
global REQUEST_COUNT
|
||||
REQUEST_COUNT += 1
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
return jsonify({
|
||||
"service": "ghaymah-exam-api",
|
||||
"message": "API is running"
|
||||
})
|
||||
|
||||
|
||||
@app.route("/health")
|
||||
def health():
|
||||
"""Used by ghaymah.systems platform + our monitoring script."""
|
||||
return jsonify({
|
||||
"status": "healthy",
|
||||
"uptime_seconds": round(time.time() - START_TIME, 2)
|
||||
}), 200
|
||||
|
||||
|
||||
@app.route("/metrics")
|
||||
def metrics():
|
||||
return jsonify({
|
||||
"uptime_seconds": round(time.time() - START_TIME, 2),
|
||||
"total_requests": REQUEST_COUNT
|
||||
})
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 0.0.0.0 required so the container's port is reachable externally
|
||||
app.run(host="0.0.0.0", port=5000)
|
||||
المرجع في مشكلة جديدة
حظر مستخدم