mirror of
https://github.com/smittix/intercept.git
synced 2026-04-24 14:50:00 -07:00
Add Meteor LRPT ground station pipeline
This commit is contained in:
@@ -641,18 +641,19 @@ def init_db() -> None:
|
||||
# =====================================================================
|
||||
|
||||
# Observation profiles — per-satellite capture configuration
|
||||
conn.execute('''
|
||||
CREATE TABLE IF NOT EXISTS observation_profiles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
norad_id INTEGER UNIQUE NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
frequency_mhz REAL NOT NULL,
|
||||
decoder_type TEXT NOT NULL DEFAULT 'fm',
|
||||
gain REAL DEFAULT 40.0,
|
||||
bandwidth_hz INTEGER DEFAULT 200000,
|
||||
min_elevation REAL DEFAULT 10.0,
|
||||
enabled BOOLEAN DEFAULT 1,
|
||||
record_iq BOOLEAN DEFAULT 0,
|
||||
conn.execute('''
|
||||
CREATE TABLE IF NOT EXISTS observation_profiles (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
norad_id INTEGER UNIQUE NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
frequency_mhz REAL NOT NULL,
|
||||
decoder_type TEXT NOT NULL DEFAULT 'fm',
|
||||
tasks_json TEXT,
|
||||
gain REAL DEFAULT 40.0,
|
||||
bandwidth_hz INTEGER DEFAULT 200000,
|
||||
min_elevation REAL DEFAULT 10.0,
|
||||
enabled BOOLEAN DEFAULT 1,
|
||||
record_iq BOOLEAN DEFAULT 0,
|
||||
iq_sample_rate INTEGER DEFAULT 2400000,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
@@ -688,31 +689,58 @@ def init_db() -> None:
|
||||
''')
|
||||
|
||||
# SigMF recordings — one row per IQ recording file pair
|
||||
conn.execute('''
|
||||
CREATE TABLE IF NOT EXISTS sigmf_recordings (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
observation_id INTEGER,
|
||||
sigmf_data_path TEXT NOT NULL,
|
||||
conn.execute('''
|
||||
CREATE TABLE IF NOT EXISTS sigmf_recordings (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
observation_id INTEGER,
|
||||
sigmf_data_path TEXT NOT NULL,
|
||||
sigmf_meta_path TEXT NOT NULL,
|
||||
size_bytes INTEGER DEFAULT 0,
|
||||
sample_rate INTEGER,
|
||||
center_freq_hz INTEGER,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (observation_id) REFERENCES ground_station_observations(id) ON DELETE SET NULL
|
||||
)
|
||||
''')
|
||||
FOREIGN KEY (observation_id) REFERENCES ground_station_observations(id) ON DELETE SET NULL
|
||||
)
|
||||
''')
|
||||
|
||||
conn.execute('''
|
||||
CREATE TABLE IF NOT EXISTS ground_station_outputs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
observation_id INTEGER,
|
||||
norad_id INTEGER,
|
||||
output_type TEXT NOT NULL,
|
||||
backend TEXT,
|
||||
file_path TEXT NOT NULL,
|
||||
preview_path TEXT,
|
||||
metadata_json TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (observation_id) REFERENCES ground_station_observations(id) ON DELETE CASCADE
|
||||
)
|
||||
''')
|
||||
|
||||
conn.execute('''
|
||||
CREATE INDEX IF NOT EXISTS idx_gs_observations_norad
|
||||
ON ground_station_observations(norad_id, created_at)
|
||||
''')
|
||||
|
||||
conn.execute('''
|
||||
CREATE INDEX IF NOT EXISTS idx_gs_events_observation
|
||||
ON ground_station_events(observation_id, timestamp)
|
||||
''')
|
||||
|
||||
logger.info("Database initialized successfully")
|
||||
conn.execute('''
|
||||
CREATE INDEX IF NOT EXISTS idx_gs_events_observation
|
||||
ON ground_station_events(observation_id, timestamp)
|
||||
''')
|
||||
|
||||
conn.execute('''
|
||||
CREATE INDEX IF NOT EXISTS idx_gs_outputs_observation
|
||||
ON ground_station_outputs(observation_id, created_at)
|
||||
''')
|
||||
|
||||
# Lightweight schema migrations for existing installs.
|
||||
profile_cols = {
|
||||
row['name'] for row in conn.execute('PRAGMA table_info(observation_profiles)')
|
||||
}
|
||||
if 'tasks_json' not in profile_cols:
|
||||
conn.execute('ALTER TABLE observation_profiles ADD COLUMN tasks_json TEXT')
|
||||
|
||||
logger.info("Database initialized successfully")
|
||||
|
||||
|
||||
def close_db() -> None:
|
||||
|
||||
Reference in New Issue
Block a user