Add:
- db cache dump on diagnostics request. - individual device logs, db and files. -Device logs api endpoints and diagnostics UI. Fix: - slmm standalone now uses local TZ (was UTC only before) - fixed measurement start time logic.
This commit is contained in:
73
migrate_add_device_logs.py
Normal file
73
migrate_add_device_logs.py
Normal file
@@ -0,0 +1,73 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Database migration: Add device_logs table.
|
||||
|
||||
This table stores per-device log entries for debugging and audit trail.
|
||||
|
||||
Run this once to add the new table.
|
||||
"""
|
||||
|
||||
import sqlite3
|
||||
import os
|
||||
|
||||
# Path to the SLMM database
|
||||
DB_PATH = os.path.join(os.path.dirname(__file__), "data", "slmm.db")
|
||||
|
||||
|
||||
def migrate():
|
||||
print(f"Adding device_logs table to: {DB_PATH}")
|
||||
|
||||
if not os.path.exists(DB_PATH):
|
||||
print("Database does not exist yet. Table will be created automatically on first run.")
|
||||
return
|
||||
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
# Check if table already exists
|
||||
cursor.execute("""
|
||||
SELECT name FROM sqlite_master
|
||||
WHERE type='table' AND name='device_logs'
|
||||
""")
|
||||
if cursor.fetchone():
|
||||
print("✓ device_logs table already exists, no migration needed")
|
||||
return
|
||||
|
||||
# Create the table
|
||||
print("Creating device_logs table...")
|
||||
cursor.execute("""
|
||||
CREATE TABLE device_logs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
unit_id VARCHAR NOT NULL,
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
level VARCHAR DEFAULT 'INFO',
|
||||
category VARCHAR DEFAULT 'GENERAL',
|
||||
message TEXT NOT NULL
|
||||
)
|
||||
""")
|
||||
|
||||
# Create indexes for efficient querying
|
||||
print("Creating indexes...")
|
||||
cursor.execute("CREATE INDEX ix_device_logs_unit_id ON device_logs (unit_id)")
|
||||
cursor.execute("CREATE INDEX ix_device_logs_timestamp ON device_logs (timestamp)")
|
||||
|
||||
conn.commit()
|
||||
print("✓ Created device_logs table with indexes")
|
||||
|
||||
# Verify
|
||||
cursor.execute("""
|
||||
SELECT name FROM sqlite_master
|
||||
WHERE type='table' AND name='device_logs'
|
||||
""")
|
||||
if not cursor.fetchone():
|
||||
raise Exception("device_logs table was not created successfully")
|
||||
|
||||
print("✓ Migration completed successfully")
|
||||
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
migrate()
|
||||
Reference in New Issue
Block a user