-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
97 lines (76 loc) · 2.77 KB
/
server.py
File metadata and controls
97 lines (76 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
"""Main Flask application for radio recording server."""
import os
import sys
import logging
import signal
import atexit
from flask import Flask
from flask_socketio import SocketIO
import app.models as models
import app.services.file_organizer as file_organizer
import app.services.radio_manager as radio_manager
from app.routes import setup_routes
from app.config import APP_PASSWORD
# Create folders
os.makedirs("logs", exist_ok=True)
os.makedirs("temp", exist_ok=True)
os.makedirs("files", exist_ok=True)
# Configure logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# Create Flask app
app = Flask(__name__)
socketio = SocketIO(app, async_mode='eventlet', cors_allowed_origins="*")
# Set up socketio for file organizer
file_organizer.set_socketio(socketio)
# Register routes and blueprints (use "files" as the record folder)
setup_routes(app, "files")
# Error handlers
@app.errorhandler(404)
def page_not_found(e):
"""Handle 404 errors."""
from flask import render_template
from app.config import BRANDING
return render_template('404.html', branding=BRANDING), 404
def cleanup_handler():
"""Cleanup handler to stop radio process on exit."""
logger.info("Shutting down... stopping radio process")
try:
radio_manager.stop_radio()
except Exception as e:
logger.error(f"Error stopping radio process during cleanup: {e}")
def signal_handler(signum, frame):
"""Handle interrupt signals gracefully."""
logger.info(f"Received signal {signum}")
cleanup_handler()
sys.exit(0)
def initialize_app():
"""Initialize database and start background services."""
# Initialize database
models.init_db()
logger.info("Database initialized")
# Start file organizer
file_organizer.start_organizer_thread()
logger.info("File organizer started")
# Start radio monitoring process
try:
radio_manager.start_radio()
status = radio_manager.get_radio_status()
logger.info(f"Radio monitoring started: {status['config']['frequency']} MHz, gain: {status['config']['gain']} dB")
except Exception as e:
logger.error(f"Failed to start radio process: {e}")
logger.error("Server will continue without radio monitoring. Please check your configuration and dsd-fme installation.")
# Register cleanup handlers
atexit.register(cleanup_handler)
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
# Initialize the application
initialize_app()
# For development: run with python server.py
if __name__ == "__main__":
# Start Flask server
logger.info("Starting Flask-SocketIO server on port 4000...")
socketio.run(app, debug=False, host='0.0.0.0', port=4000)