Files
ALwrity/backend/scripts/run_failure_tracking_migration.py

86 lines
2.8 KiB
Python

"""
Script to run the failure tracking migration.
Adds consecutive_failures and failure_pattern columns to task tables.
"""
import sqlite3
import os
import sys
# Add parent directory to path to import migration
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
def run_migration():
"""Run the failure tracking migration."""
# Get database path
db_path = os.getenv('DATABASE_URL', 'sqlite:///alwrity.db')
# Extract path from SQLite URL if needed
if db_path.startswith('sqlite:///'):
db_path = db_path.replace('sqlite:///', '')
if not os.path.exists(db_path):
print(f"Database not found at {db_path}")
return False
print(f"Running migration on database: {db_path}")
try:
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# Read migration SQL
migration_file = os.path.join(
os.path.dirname(os.path.dirname(os.path.abspath(__file__))),
'database',
'migrations',
'add_failure_tracking_to_tasks.sql'
)
if not os.path.exists(migration_file):
print(f"Migration file not found: {migration_file}")
return False
with open(migration_file, 'r') as f:
migration_sql = f.read()
# Execute migration (SQLite doesn't support multiple statements in execute, so split)
statements = [s.strip() for s in migration_sql.split(';') if s.strip()]
for statement in statements:
try:
cursor.execute(statement)
print(f"✓ Executed: {statement[:50]}...")
except sqlite3.OperationalError as e:
# Column might already exist - that's okay
if 'duplicate column name' in str(e).lower() or 'already exists' in str(e).lower():
print(f"⚠ Column already exists (skipping): {statement[:50]}...")
else:
raise
conn.commit()
print("\n✅ Migration completed successfully!")
# Verify columns were added
cursor.execute("PRAGMA table_info(oauth_token_monitoring_tasks)")
columns = [row[1] for row in cursor.fetchall()]
if 'consecutive_failures' in columns and 'failure_pattern' in columns:
print("✓ Verified: consecutive_failures and failure_pattern columns exist")
else:
print("⚠ Warning: Could not verify columns were added")
conn.close()
return True
except Exception as e:
print(f"❌ Error running migration: {e}")
import traceback
traceback.print_exc()
return False
if __name__ == "__main__":
success = run_migration()
sys.exit(0 if success else 1)