54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Migration: Add data_collection_mode column to projects table.
|
|
|
|
Values:
|
|
"remote" — units have modems; data pulled via FTP/scheduler automatically
|
|
"manual" — no modem; SD cards retrieved daily and uploaded by hand
|
|
|
|
All existing projects are backfilled to "manual" (safe conservative default).
|
|
|
|
Run once inside the Docker container:
|
|
docker exec terra-view python3 backend/migrate_add_project_data_collection_mode.py
|
|
"""
|
|
from pathlib import Path
|
|
|
|
DB_PATH = Path("data/seismo_fleet.db")
|
|
|
|
|
|
def migrate():
|
|
import sqlite3
|
|
|
|
if not DB_PATH.exists():
|
|
print(f"Database not found at {DB_PATH}. Are you running from /home/serversdown/terra-view?")
|
|
return
|
|
|
|
conn = sqlite3.connect(DB_PATH)
|
|
conn.row_factory = sqlite3.Row
|
|
cur = conn.cursor()
|
|
|
|
# ── 1. Add column (idempotent) ───────────────────────────────────────────
|
|
cur.execute("PRAGMA table_info(projects)")
|
|
existing_cols = {row["name"] for row in cur.fetchall()}
|
|
|
|
if "data_collection_mode" not in existing_cols:
|
|
cur.execute("ALTER TABLE projects ADD COLUMN data_collection_mode TEXT DEFAULT 'manual'")
|
|
conn.commit()
|
|
print("✓ Added column data_collection_mode to projects")
|
|
else:
|
|
print("○ Column data_collection_mode already exists — skipping ALTER TABLE")
|
|
|
|
# ── 2. Backfill NULLs to 'manual' ────────────────────────────────────────
|
|
cur.execute("UPDATE projects SET data_collection_mode = 'manual' WHERE data_collection_mode IS NULL")
|
|
updated = cur.rowcount
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
if updated:
|
|
print(f"✓ Backfilled {updated} project(s) to data_collection_mode='manual'.")
|
|
print("Migration complete.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
migrate()
|