monitoring posts to db
This commit is contained in:
80
Case study 1/monitoring/collect-to-db.py
Normal file
80
Case study 1/monitoring/collect-to-db.py
Normal file
@@ -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)
|
||||
Reference in New Issue
Block a user