diff --git a/Case study 1/monitoring/collect-to-db.py b/Case study 1/monitoring/collect-to-db.py new file mode 100644 index 0000000..189f94d --- /dev/null +++ b/Case study 1/monitoring/collect-to-db.py @@ -0,0 +1,80 @@ +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) diff --git a/Case study 1/monitoring/collect.py b/Case study 1/monitoring/collect-to-log.py similarity index 100% rename from Case study 1/monitoring/collect.py rename to Case study 1/monitoring/collect-to-log.py diff --git a/Case study 1/monitoring/metrics.db b/Case study 1/monitoring/metrics.db new file mode 100644 index 0000000..77cff10 Binary files /dev/null and b/Case study 1/monitoring/metrics.db differ diff --git a/Case study 1/monitoring/send_metrics.py b/Case study 1/monitoring/send_metrics.py index 7dc375c..ec5e01c 100644 --- a/Case study 1/monitoring/send_metrics.py +++ b/Case study 1/monitoring/send_metrics.py @@ -4,7 +4,7 @@ import requests import socket from datetime import datetime -SERVER_URL = "http://localhost:5000/collect" # change this! +SERVER_URL = "http://localhost:5000/collect" def collect_metrics(): data = {