v3.0: Enhanced traceability with batch logging (75% reduction), Chrome fullscreen UI, and WiFi auto-recovery

This commit is contained in:
Developer
2025-12-18 10:15:32 +02:00
parent afa08843df
commit 68f377e2b5
4 changed files with 945 additions and 218 deletions

169
chrome_launcher_module.py Normal file
View File

@@ -0,0 +1,169 @@
"""
Chrome browser launcher for traceability application
Launches Chrome in fullscreen with the web-based traceability app
"""
import subprocess
import os
import time
import logging
from logger_module import log_with_server
def get_chrome_path():
"""Find Chrome/Chromium executable"""
possible_paths = [
'/usr/bin/chromium-browser',
'/usr/bin/chromium',
'/usr/bin/google-chrome',
'/snap/bin/chromium',
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' # macOS
]
for path in possible_paths:
if os.path.exists(path):
return path
return None
def launch_chrome_app(hostname, device_ip, app_url="http://localhost"):
"""
Launch Chrome in fullscreen with the traceability application
Args:
hostname: Device hostname
device_ip: Device IP
app_url: URL of the traceability web app
"""
chrome_path = get_chrome_path()
if not chrome_path:
logging.error("Chrome/Chromium not found on system")
log_with_server("ERROR: Chrome browser not installed", hostname, device_ip)
return False
try:
logging.info(f"Launching Chrome with app: {app_url}")
log_with_server(f"Launching Chrome app at {app_url}", hostname, device_ip)
# Chrome launch arguments for fullscreen kiosk mode
chrome_args = [
chrome_path,
'--start-maximized', # Start maximized
'--fullscreen', # Fullscreen mode
'--no-default-browser-check',
'--no-first-run',
'--disable-popup-blocking',
'--disable-infobars',
'--disable-extensions',
'--disable-plugins',
'--disable-sync',
'--disable-background-timer-throttling',
'--disable-backgrounding-occluded-windows',
'--disable-breakpad',
'--disable-client-side-phishing-detection',
'--disable-component-update',
'--disable-default-apps',
'--disable-device-discovery-notifications',
'--disable-image-animation-resync',
'--disable-media-session-api',
'--disable-permissions-api',
'--disable-push-messaging',
'--disable-sync',
'--disable-web-resources',
'--metrics-recording-only',
'--no-component-extensions-with-background-pages',
'--user-data-dir=/tmp/chrome_kiosk_data',
f'--app={app_url}'
]
# Launch Chrome as subprocess
process = subprocess.Popen(
chrome_args,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
logging.info(f"Chrome launched with PID: {process.pid}")
log_with_server(f"Chrome launched (PID: {process.pid})", hostname, device_ip)
return True
except Exception as e:
logging.error(f"Failed to launch Chrome: {e}")
log_with_server(f"ERROR: Chrome launch failed: {str(e)}", hostname, device_ip)
return False
def install_chrome(hostname, device_ip):
"""Install Chrome on system if not present"""
try:
logging.info("Installing Chrome browser...")
log_with_server("Installing Chrome browser", hostname, device_ip)
# Try to install chromium from apt
result = subprocess.run(
['sudo', 'apt-get', 'install', '-y', 'chromium-browser'],
capture_output=True,
text=True,
timeout=300
)
if result.returncode == 0:
logging.info("Chrome installed successfully")
log_with_server("Chrome installed successfully", hostname, device_ip)
return True
else:
logging.error(f"Chrome installation failed: {result.stderr}")
log_with_server(f"Chrome installation failed: {result.stderr}", hostname, device_ip)
return False
except Exception as e:
logging.error(f"Error installing Chrome: {e}")
log_with_server(f"Chrome installation error: {str(e)}", hostname, device_ip)
return False
def launch_app_on_startup(hostname, device_ip, app_url="http://localhost"):
"""
Setup Chrome to launch automatically on system startup
Creates a systemd service file
"""
service_content = f"""[Unit]
Description=Prezenta Work Chrome Application
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User={os.environ.get('USER', 'pi')}
Environment="DISPLAY=:0"
Environment="XAUTHORITY=/home/{os.environ.get('USER', 'pi')}/.Xauthority"
ExecStart={get_chrome_path()} --start-maximized --fullscreen --app={app_url}
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
"""
try:
service_file = "/etc/systemd/system/prezenta-chrome.service"
# Write service file
with open(service_file, 'w') as f:
f.write(service_content)
# Enable and start service
subprocess.run(['sudo', 'systemctl', 'daemon-reload'], check=True)
subprocess.run(['sudo', 'systemctl', 'enable', 'prezenta-chrome.service'], check=True)
logging.info("Chrome app service enabled for startup")
log_with_server("Chrome app configured for automatic startup", hostname, device_ip)
return True
except Exception as e:
logging.error(f"Failed to setup startup service: {e}")
log_with_server(f"Startup service setup failed: {str(e)}", hostname, device_ip)
return False