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)
|
||||||
BIN
Case study 1/monitoring/metrics.db
Normal file
BIN
Case study 1/monitoring/metrics.db
Normal file
Binary file not shown.
@@ -4,7 +4,7 @@ import requests
|
|||||||
import socket
|
import socket
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
SERVER_URL = "http://localhost:5000/collect" # change this!
|
SERVER_URL = "http://localhost:5000/collect"
|
||||||
|
|
||||||
def collect_metrics():
|
def collect_metrics():
|
||||||
data = {
|
data = {
|
||||||
|
|||||||
Reference in New Issue
Block a user