52 أسطر
1.1 KiB
Plaintext
52 أسطر
1.1 KiB
Plaintext
"""
|
|
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__)
|
|
|
|
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)
|
|
|