Fix: Fixed database is locked error when enabling WAL in SQLite

This commit is contained in:
2026-04-21 00:29:39 +02:00
parent f259e0a774
commit ba241f6a45
2 changed files with 10 additions and 3 deletions
+2
View File
@@ -293,6 +293,8 @@ def on_connect(client, userdata, flags, reason_code, properties=None):
def on_disconnect(client, userdata, disconnect_flags, reason_code, properties=None): def on_disconnect(client, userdata, disconnect_flags, reason_code, properties=None):
logger.warning(f"⚠️ Disconnessione dal broker MQTT! Codice: {reason_code}") logger.warning(f"⚠️ Disconnessione dal broker MQTT! Codice: {reason_code}")
logger.error("Forzo il riavvio del processo per ripristinare la rete in modo pulito...")
os._exit(1) # Uccide lo script immediatamente (Systemd lo farà risorgere)
def on_message(client, userdata, msg): def on_message(client, userdata, msg):
global boot_recovered, current_status, cfg global boot_recovered, current_status, cfg
+8 -3
View File
@@ -13,7 +13,7 @@ from logging.handlers import RotatingFileHandler
# --- CONFIGURAZIONE LOGGING --- # --- CONFIGURAZIONE LOGGING ---
logging.basicConfig( logging.basicConfig(
handlers=[ handlers=[
RotatingFileHandler('/opt/web-control/fleet_console.log', maxBytes=2000000, backupCount=3), RotatingFileHandler('/opt/web-control/fleet_console.log', maxBytes=10000000, backupCount=3),
logging.StreamHandler() logging.StreamHandler()
], ],
level=logging.INFO, level=logging.INFO,
@@ -21,6 +21,8 @@ logging.basicConfig(
datefmt='%Y-%m-%d %H:%M:%S' datefmt='%Y-%m-%d %H:%M:%S'
) )
logger = logging.getLogger("FleetHub") logger = logging.getLogger("FleetHub")
# Silenzia lo spam delle richieste HTTP (GET /api/states 200 OK)
logging.getLogger('werkzeug').setLevel(logging.ERROR)
# --- PERCORSI --- # --- PERCORSI ---
DB_PATH = '/opt/web-control/monitor.db' DB_PATH = '/opt/web-control/monitor.db'
@@ -33,6 +35,9 @@ CLIENTS_PATH = '/opt/web-control/clients.json'
def init_db(): def init_db():
conn = sqlite3.connect(DB_PATH) conn = sqlite3.connect(DB_PATH)
c = conn.cursor() c = conn.cursor()
c.execute('PRAGMA journal_mode=WAL;') # <-- MAGIA: Abilita letture/scritture simultanee!
c.execute('''CREATE TABLE IF NOT EXISTS radio_logs c.execute('''CREATE TABLE IF NOT EXISTS radio_logs
(id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp DATETIME, client_id TEXT, (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp DATETIME, client_id TEXT,
source_id TEXT, target TEXT, slot INTEGER, duration REAL, ber REAL, loss REAL)''') source_id TEXT, target TEXT, slot INTEGER, duration REAL, ber REAL, loss REAL)''')
@@ -158,7 +163,7 @@ def on_message(client, userdata, msg):
device_configs[cid_conf] = {} device_configs[cid_conf] = {}
try: try:
device_configs[cid_conf][svc_name] = json.loads(payload) device_configs[cid_conf][svc_name] = json.loads(payload)
logger.info(f"Configurazione salvata per {cid_conf} -> {svc_name}") logger.debug(f"Configurazione salvata per {cid_conf} -> {svc_name}")
except Exception as e: except Exception as e:
logger.error(f"Errore parsing config JSON: {e}") logger.error(f"Errore parsing config JSON: {e}")
@@ -313,7 +318,7 @@ def get_clients():
@app.route('/api/logs') @app.route('/api/logs')
def get_logs(): def get_logs():
conn = sqlite3.connect(DB_PATH) conn = sqlite3.connect(DB_PATH, timeout=10)
c = conn.cursor() c = conn.cursor()
c.execute("SELECT timestamp, client_id, protocol, source_id, target, slot, duration, ber FROM radio_logs ORDER BY id DESC LIMIT 60") c.execute("SELECT timestamp, client_id, protocol, source_id, target, slot, duration, ber FROM radio_logs ORDER BY id DESC LIMIT 60")
logs = c.fetchall() logs = c.fetchall()