Spaces:
Sleeping
Sleeping
File size: 4,001 Bytes
4252e58 ee1c180 0f8fe33 d58a19f 0f8fe33 d58a19f 0f8fe33 f52cb69 0f8fe33 d58a19f 0f8fe33 3fdf4b6 0f8fe33 d58a19f 0f8fe33 ee1c180 0f8fe33 d58a19f 0f8fe33 d58a19f 0f8fe33 d58a19f 0f8fe33 5182442 d29d188 6814aac d29d188 0f8fe33 |
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 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
import eventlet
eventlet.monkey_patch()
import utils.model_selector
import logging
from flask import Flask, jsonify
from flask_cors import CORS
from flask_socketio import SocketIO
import os
import socket
# lightweight logging
logging.getLogger('werkzeug').setLevel(logging.ERROR)
logging.getLogger('socketio').setLevel(logging.ERROR)
app = Flask(__name__)
# UPDATED: More robust CORS for deployment
CORS(app, resources={r"/api/*": {"origins": "*"}})
socketio = SocketIO(app, cors_allowed_origins="*", async_mode="eventlet")
# Mail initialization
try:
from extensions import mail
app.config.update(
MAIL_SERVER="smtp.gmail.com",
MAIL_PORT=587,
MAIL_USE_TLS=True,
MAIL_USERNAME=os.environ.get("MAIL_USERNAME"),
MAIL_PASSWORD=os.environ.get("MAIL_PASSWORD"),
MAIL_DEFAULT_SENDER=("Adaptive AI NIDS", os.environ.get("MAIL_USERNAME"))
)
mail.init_app(app)
except Exception:
pass
sniffer = None
def _get_sniffer():
global sniffer
if sniffer is None:
try:
# CLOUD GUARD: Don't import sniffer if on a cloud server that blocks raw sockets
# Render and Hugging Face usually set specific env variables
if os.environ.get("RENDER") or os.environ.get("SPACE_ID"):
print("⚠️ Cloud environment detected. Skipping sniffer initialization.")
return None
from capture.live_manager import sniffer as _s
sniffer = _s
except Exception as e:
print(f"⚠️ Could not initialize sniffer: {e}")
return None
return sniffer
def register_blueprints(app):
from importlib import import_module
routes = [
("routes.live_route", "live_bp", "/api/live"),
("routes.logs_route", "logs_bp", "/api/logs"),
("routes.predict_route", "predict_bp", "/api/predict"),
("routes.reports_route", "reports_bp", "/api/reports"),
("routes.ip_lookup_route", "ip_lookup_bp", "/api/ip"),
("routes.geo_route", "geo_bp", "/api/geo"),
("routes.alerts_route", "alerts_bp", "/api"),
("routes.system_info", "system_bp", "/api"),
("routes.ml_route", "ml_bp", "/api"),
("routes.traffic_routes", "traffic_bp", "/api"),
("routes.ml_switch_route","ml_switch","/api/model"),
("routes.manual_predict_route","manual_predict","/api"),
("routes.ai_route","ai_bp","/api/ai"),
("routes.chat_route","chat_bp","/api"),
("routes.offline_detection","offline_bp","/api/offline")
]
for module_name, varname, prefix in routes:
try:
mod = import_module(module_name)
bp = getattr(mod, varname)
app.register_blueprint(bp, url_prefix=prefix)
print(f"✅ Registered route: {module_name} -> {prefix}")
except Exception as e:
print(f"⚠️ Skipping {module_name}: {e}")
register_blueprints(app)
with app.app_context():
try:
from utils.model_selector import load_model
print("📥 Pre-loading AI models...")
# Start with 'bcc' as it's the default
load_model("bcc")
print("✅ Default models ready.")
except Exception as e:
print(f"❌ Startup Model Error: {e}")
@app.route("/")
def home():
# Detect environment for frontend awareness
is_cloud = os.environ.get("RENDER") or os.environ.get("SPACE_ID")
s = _get_sniffer()
return jsonify({
"status": "✅ Backend Active",
"env": "cloud" if is_cloud else "local",
"capture_capability": "limited" if is_cloud else "full",
"capture_running": s.is_running() if s else False,
"tip": "Live sniffing requires local deployment."
})
if __name__ == "__main__":
# Use port 7860 if on HF, otherwise use 5000
port = int(os.environ.get("PORT", 7860))
print(f"🚀 Starting Backend on port {port}...")
socketio.run(app, host="0.0.0.0", port=port, debug=False)
|