import sqlite3 import json from contextlib import closing DB_PATH = "resources.db" # Basic schema for the database def init_db(): with closing(sqlite3.connect(DB_PATH)) as conn: with conn: conn.execute(""" CREATE TABLE IF NOT EXISTS metal_nodes ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, location TEXT, vendor TEXT, cpu INTEGER, memory TEXT, storage TEXT, time_on_duty INTEGER, initial_cost REAL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """) conn.execute(""" CREATE TABLE IF NOT EXISTS virtual_machines ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, location TEXT, cpu INTEGER, memory TEXT, storage TEXT, type TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """) conn.execute(""" CREATE TABLE IF NOT EXISTS kubernetes_nodes ( id INTEGER PRIMARY KEY AUTOINCREMENT, cluster_name TEXT NOT NULL, node_name TEXT NOT NULL, cpu INTEGER, memory TEXT, storage TEXT, type TEXT, namespaces TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) """) def insert_metal_node(name, location, vendor, cpu, memory, storage, time_on_duty, initial_cost): with closing(sqlite3.connect(DB_PATH)) as conn: with conn: conn.execute(""" INSERT INTO metal_nodes (name, location, vendor, cpu, memory, storage, time_on_duty, initial_cost) VALUES (?, ?, ?, ?, ?, ?, ?, ?) """, (name, location, vendor, cpu, memory, storage, time_on_duty, initial_cost)) def insert_virtual_machine(name, location, cpu, memory, storage, vm_type): with closing(sqlite3.connect(DB_PATH)) as conn: with conn: conn.execute(""" INSERT INTO virtual_machines (name, location, cpu, memory, storage, type) VALUES (?, ?, ?, ?, ?, ?) """, (name, location, cpu, memory, storage, vm_type)) def insert_kubernetes_node(cluster_name, node_name, cpu, memory, storage, node_type, namespaces): with closing(sqlite3.connect(DB_PATH)) as conn: with conn: conn.execute(""" INSERT INTO kubernetes_nodes (cluster_name, node_name, cpu, memory, storage, type, namespaces) VALUES (?, ?, ?, ?, ?, ?, ?) """, (cluster_name, node_name, cpu, memory, storage, node_type, json.dumps(namespaces))) def fetch_all(table): with closing(sqlite3.connect(DB_PATH)) as conn: with conn: cursor = conn.execute(f"SELECT * FROM {table}") return cursor.fetchall()