76 lines
2.2 KiB
Python
76 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Apply SQL migration to existing database
|
|
Usage: python apply_migration.py
|
|
"""
|
|
|
|
import sqlite3
|
|
import os
|
|
|
|
# Database path
|
|
DB_PATH = os.path.join(os.path.dirname(__file__), "data", "data.db")
|
|
MIGRATION_PATH = os.path.join(os.path.dirname(__file__), "migrations", "001_add_ram_stats_and_smart.sql")
|
|
|
|
def apply_migration():
|
|
"""Apply the SQL migration"""
|
|
|
|
if not os.path.exists(DB_PATH):
|
|
print(f"❌ Database not found at {DB_PATH}")
|
|
print(" The database will be created automatically on first run.")
|
|
return
|
|
|
|
if not os.path.exists(MIGRATION_PATH):
|
|
print(f"❌ Migration file not found at {MIGRATION_PATH}")
|
|
return
|
|
|
|
print(f"📂 Database: {DB_PATH}")
|
|
print(f"📄 Migration: {MIGRATION_PATH}")
|
|
print()
|
|
|
|
# Read migration SQL
|
|
with open(MIGRATION_PATH, 'r') as f:
|
|
migration_sql = f.read()
|
|
|
|
# Connect to database
|
|
conn = sqlite3.connect(DB_PATH)
|
|
cursor = conn.cursor()
|
|
|
|
try:
|
|
# Check if columns already exist
|
|
cursor.execute("PRAGMA table_info(hardware_snapshots)")
|
|
columns = [row[1] for row in cursor.fetchall()]
|
|
|
|
if 'ram_used_mb' in columns:
|
|
print("⚠️ Migration already applied (ram_used_mb column exists)")
|
|
|
|
# Check if disk_smart_data table exists
|
|
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='disk_smart_data'")
|
|
if cursor.fetchone():
|
|
print("⚠️ disk_smart_data table already exists")
|
|
print("✅ Database is up to date")
|
|
return
|
|
|
|
# Apply migration
|
|
print("🔄 Applying migration...")
|
|
cursor.executescript(migration_sql)
|
|
conn.commit()
|
|
|
|
print("✅ Migration applied successfully!")
|
|
print()
|
|
print("New columns added to hardware_snapshots:")
|
|
print(" - ram_used_mb")
|
|
print(" - ram_free_mb")
|
|
print(" - ram_shared_mb")
|
|
print()
|
|
print("New table created:")
|
|
print(" - disk_smart_data")
|
|
|
|
except sqlite3.Error as e:
|
|
print(f"❌ Error applying migration: {e}")
|
|
conn.rollback()
|
|
finally:
|
|
conn.close()
|
|
|
|
if __name__ == "__main__":
|
|
apply_migration()
|