This commit is contained in:
parent
73dcb60583
commit
68255eb274
119
app.py
119
app.py
@ -9,8 +9,10 @@ import json
|
|||||||
import logging
|
import logging
|
||||||
from flask import Flask, request, jsonify
|
from flask import Flask, request, jsonify
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from flasgger import Swagger
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
swagger = Swagger(app)
|
||||||
|
|
||||||
# Configuration from environment
|
# Configuration from environment
|
||||||
STATUS_FILE = os.environ.get('STATUS_FILE', '/data/status.json')
|
STATUS_FILE = os.environ.get('STATUS_FILE', '/data/status.json')
|
||||||
@ -65,7 +67,39 @@ def save_status(status):
|
|||||||
|
|
||||||
@app.route('/status.json', methods=['GET'])
|
@app.route('/status.json', methods=['GET'])
|
||||||
def get_status():
|
def get_status():
|
||||||
"""GET /status.json - Retrieve current status"""
|
"""
|
||||||
|
GET /status.json - Retrieve current status
|
||||||
|
---
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: Current GitOps status
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
repo:
|
||||||
|
type: string
|
||||||
|
example: "rsyslog"
|
||||||
|
server:
|
||||||
|
type: string
|
||||||
|
example: "rsyslog-lab"
|
||||||
|
sync_status:
|
||||||
|
type: string
|
||||||
|
enum: ["SYNCED", "OUT_OF_SYNC", "UNKNOWN"]
|
||||||
|
drift_count:
|
||||||
|
type: integer
|
||||||
|
example: 0
|
||||||
|
files:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
last_check:
|
||||||
|
type: string
|
||||||
|
format: date-time
|
||||||
|
example: "2026-04-23T10:30:00Z"
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
status = load_status()
|
status = load_status()
|
||||||
if status:
|
if status:
|
||||||
@ -80,8 +114,61 @@ def get_status():
|
|||||||
@app.route('/api/status', methods=['GET', 'POST', 'OPTIONS'])
|
@app.route('/api/status', methods=['GET', 'POST', 'OPTIONS'])
|
||||||
def api_status():
|
def api_status():
|
||||||
"""
|
"""
|
||||||
GET /api/status - Retrieve current status
|
GitOps Status API endpoint
|
||||||
POST /api/status - Update status with new data
|
---
|
||||||
|
get:
|
||||||
|
summary: Retrieve current status
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: Current GitOps status
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
repo:
|
||||||
|
type: string
|
||||||
|
server:
|
||||||
|
type: string
|
||||||
|
sync_status:
|
||||||
|
type: string
|
||||||
|
drift_count:
|
||||||
|
type: integer
|
||||||
|
files:
|
||||||
|
type: array
|
||||||
|
last_check:
|
||||||
|
type: string
|
||||||
|
post:
|
||||||
|
summary: Update status with new data
|
||||||
|
parameters:
|
||||||
|
- in: body
|
||||||
|
name: body
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
repo:
|
||||||
|
type: string
|
||||||
|
example: "rsyslog"
|
||||||
|
server:
|
||||||
|
type: string
|
||||||
|
example: "rsyslog-lab"
|
||||||
|
sync_status:
|
||||||
|
type: string
|
||||||
|
enum: ["SYNCED", "OUT_OF_SYNC", "UNKNOWN", "PROGRESSING"]
|
||||||
|
drift_count:
|
||||||
|
type: integer
|
||||||
|
files:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
last_check:
|
||||||
|
type: string
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: Status updated successfully
|
||||||
|
400:
|
||||||
|
description: No JSON data provided
|
||||||
|
500:
|
||||||
|
description: Failed to save status
|
||||||
"""
|
"""
|
||||||
if request.method == 'OPTIONS':
|
if request.method == 'OPTIONS':
|
||||||
return '', 204
|
return '', 204
|
||||||
@ -127,13 +214,27 @@ def api_status():
|
|||||||
|
|
||||||
@app.route('/health', methods=['GET'])
|
@app.route('/health', methods=['GET'])
|
||||||
def health():
|
def health():
|
||||||
"""GET /health - Kubernetes liveness probe"""
|
"""
|
||||||
|
GET /health - Kubernetes liveness probe
|
||||||
|
---
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: API is healthy
|
||||||
|
"""
|
||||||
return jsonify({"status": "healthy"}), 200
|
return jsonify({"status": "healthy"}), 200
|
||||||
|
|
||||||
|
|
||||||
@app.route('/ready', methods=['GET'])
|
@app.route('/ready', methods=['GET'])
|
||||||
def ready():
|
def ready():
|
||||||
"""GET /ready - Kubernetes readiness probe"""
|
"""
|
||||||
|
GET /ready - Kubernetes readiness probe
|
||||||
|
---
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: API is ready to serve requests
|
||||||
|
503:
|
||||||
|
description: API is not ready
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
# Check if data directory is writable
|
# Check if data directory is writable
|
||||||
data_dir = os.path.dirname(STATUS_FILE)
|
data_dir = os.path.dirname(STATUS_FILE)
|
||||||
@ -166,7 +267,13 @@ def ready():
|
|||||||
|
|
||||||
@app.route('/', methods=['GET'])
|
@app.route('/', methods=['GET'])
|
||||||
def root():
|
def root():
|
||||||
"""GET / - Simple info endpoint"""
|
"""
|
||||||
|
GET / - API information and available endpoints
|
||||||
|
---
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: API metadata and endpoint list
|
||||||
|
"""
|
||||||
return jsonify({
|
return jsonify({
|
||||||
"name": "GitOps Status API",
|
"name": "GitOps Status API",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
|||||||
@ -1,2 +1,3 @@
|
|||||||
Flask==2.3.2
|
Flask==2.3.2
|
||||||
Werkzeug==2.3.6
|
Werkzeug==2.3.6
|
||||||
|
flasgger
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user