79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Database migration: Add sound level meter fields to roster table.
|
|
|
|
Adds columns for sound_level_meter device type support.
|
|
"""
|
|
|
|
import sqlite3
|
|
from pathlib import Path
|
|
|
|
def migrate():
|
|
"""Add SLM fields to roster table if they don't exist."""
|
|
|
|
# Try multiple possible database locations
|
|
possible_paths = [
|
|
Path("data/seismo_fleet.db"),
|
|
Path("data/sfm.db"),
|
|
Path("data/seismo.db"),
|
|
]
|
|
|
|
db_path = None
|
|
for path in possible_paths:
|
|
if path.exists():
|
|
db_path = path
|
|
break
|
|
|
|
if db_path is None:
|
|
print(f"Database not found in any of: {[str(p) for p in possible_paths]}")
|
|
print("Creating database with models.py will include new fields automatically.")
|
|
return
|
|
|
|
print(f"Using database: {db_path}")
|
|
|
|
conn = sqlite3.connect(db_path)
|
|
cursor = conn.cursor()
|
|
|
|
# Check if columns already exist
|
|
cursor.execute("PRAGMA table_info(roster)")
|
|
existing_columns = {row[1] for row in cursor.fetchall()}
|
|
|
|
new_columns = {
|
|
"slm_host": "TEXT",
|
|
"slm_tcp_port": "INTEGER",
|
|
"slm_model": "TEXT",
|
|
"slm_serial_number": "TEXT",
|
|
"slm_frequency_weighting": "TEXT",
|
|
"slm_time_weighting": "TEXT",
|
|
"slm_measurement_range": "TEXT",
|
|
"slm_last_check": "DATETIME",
|
|
}
|
|
|
|
migrations_applied = []
|
|
|
|
for column_name, column_type in new_columns.items():
|
|
if column_name not in existing_columns:
|
|
try:
|
|
cursor.execute(f"ALTER TABLE roster ADD COLUMN {column_name} {column_type}")
|
|
migrations_applied.append(column_name)
|
|
print(f"✓ Added column: {column_name} ({column_type})")
|
|
except sqlite3.OperationalError as e:
|
|
print(f"✗ Failed to add column {column_name}: {e}")
|
|
else:
|
|
print(f"○ Column already exists: {column_name}")
|
|
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
if migrations_applied:
|
|
print(f"\n✓ Migration complete! Added {len(migrations_applied)} new columns.")
|
|
else:
|
|
print("\n○ No migration needed - all columns already exist.")
|
|
|
|
print("\nSound level meter fields are now available in the roster table.")
|
|
print("You can now set device_type='sound_level_meter' for SLM devices.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
migrate()
|