Cybersecurity-Projects/PROJECTS/intermediate/siem-dashboard/backend/app/__init__.py

77 lines
2.0 KiB
Python

"""
©AngelaMos | 2026
__init__.py
Flask application factory
Creates and configures the Flask app by wiring up MongoDB, Redis,
CORS, rate limiting, blueprints, CLI commands, consumer groups,
and the correlation engine daemon. Marks any orphaned scenario
runs as stopped from a previous process.
Connects to:
extensions.py - init_mongo, init_redis
core/errors.py - register_error_handlers
core/rate_limiting.py - init_limiter
routes/__init__.py - register_blueprints
cli.py - register_cli
core/streaming.py - ensure_consumer_group
models/ScenarioRun.py - marks orphaned runs stopped
engine/correlation.py - start_engine
"""
from flask import Flask
from flask_cors import CORS
from app.config import settings
def create_app() -> Flask:
"""
Application factory that
wires up all extensions and blueprints
"""
app = Flask(__name__)
app.config.from_mapping(
MONGO_URI = settings.MONGO_URI,
MONGO_DB = settings.MONGO_DB,
REDIS_URL = settings.REDIS_URL,
SECRET_KEY = settings.SECRET_KEY,
DEBUG = settings.DEBUG,
)
CORS(app, origins = settings.CORS_ORIGINS)
from app.extensions import init_mongo, init_redis
init_mongo(app)
init_redis(app)
from app.core.errors import register_error_handlers
register_error_handlers(app)
from app.core.rate_limiting import init_limiter
init_limiter(app)
from app.routes import register_blueprints
register_blueprints(app)
from app.cli import register_cli
register_cli(app)
from app.core.streaming import ensure_consumer_group
ensure_consumer_group(settings.LOG_STREAM_KEY)
ensure_consumer_group(settings.ALERT_STREAM_KEY)
from app.models.ScenarioRun import ScenarioRun
for orphan in ScenarioRun.get_active_runs():
orphan.mark_stopped()
from app.engine.correlation import start_engine
start_engine()
@app.get("/health")
def health(): # type: ignore[no-untyped-def]
return "1"
return app