from flask import Flask, request, jsonify import sqlite3 from datetime import datetime import os app = Flask(__name__) DB_PATH = "metrics.db" # Creates the database table if it doesn't exist def init_db(): with sqlite3.connect(DB_PATH) as conn: conn.execute(""" CREATE TABLE IF NOT EXISTS metrics ( id INTEGER PRIMARY KEY AUTOINCREMENT, hostname TEXT, os TEXT, cpu_percent REAL, memory_percent REAL, disk_usage REAL, timestamp TEXT ) """) print("Database initialized") # route for sending metrics @app.route('/collect', methods=['POST']) def collect(): data = request.get_json() if not data or "hostname" not in data: return jsonify({"error": "Invalid data"}), 400 timestamp = datetime.now().isoformat() with sqlite3.connect(DB_PATH) as conn: conn.execute(""" INSERT INTO metrics (hostname, os, cpu_percent, memory_percent, disk_usage, timestamp) VALUES (?, ?, ?, ?, ?, ?) """, ( data.get("hostname"), data.get("os"), data.get("cpu_percent"), data.get("memory_percent"), data.get("disk_usage"), timestamp )) conn.commit() print(f"[{timestamp}] Data received from {data.get('hostname')}") return jsonify({"status": "stored"}), 200 # for posting metrics which you can view in the browser @app.route('/metrics', methods=['GET']) def list_metrics(): with sqlite3.connect(DB_PATH) as conn: cursor = conn.execute(""" SELECT hostname, os, cpu_percent, memory_percent, disk_usage, timestamp FROM metrics ORDER BY id DESC LIMIT 10 """) rows = cursor.fetchall() results = [ { "hostname": row[0], "os": row[1], "cpu_percent": row[2], "memory_percent": row[3], "disk_usage": row[4], "timestamp": row[5], } for row in rows ] return jsonify(results) if __name__ == '__main__': if not os.path.exists(DB_PATH): init_db() app.run(host='0.0.0.0', port=5000)