# app/modules/monitoring/definition.py """ Monitoring module definition. Defines the monitoring module including its features, menu items, route configurations, and self-contained module settings. """ from app.modules.base import MenuItemDefinition, MenuSectionDefinition, ModuleDefinition from app.modules.enums import FrontendType def _get_admin_router(): """Lazy import of admin router to avoid circular imports.""" from app.modules.monitoring.routes.admin import router return router def _get_audit_provider(): """Lazy import of audit provider to avoid circular imports.""" from app.modules.monitoring.services.audit_provider import audit_provider return audit_provider # Monitoring module definition monitoring_module = ModuleDefinition( code="monitoring", name="Platform Monitoring", description="Logs, background tasks, imports, system health, Flower, and Grafana integration.", version="1.0.0", features=[ "application_logs", # Log viewing "background_tasks", # Task monitoring "import_jobs", # Import job tracking "capacity_monitoring", # System capacity "testing_hub", # Test runner "code_quality", # Code quality tools "flower_integration", # Celery Flower link "grafana_integration", # Grafana dashboard link ], menu_items={ FrontendType.ADMIN: [ "imports", # Import jobs "background-tasks", # Background tasks "logs", # Application logs "platform-health", # Platform health "testing", # Testing hub "code-quality", # Code quality ], FrontendType.STORE: [], # No store menu items }, # New module-driven menu definitions menus={ FrontendType.ADMIN: [ MenuSectionDefinition( id="platformHealth", label_key="monitoring.menu.platform_health", icon="chart-bar", order=75, is_super_admin_only=True, items=[ MenuItemDefinition( id="platform-health", label_key="monitoring.menu.capacity_monitor", icon="chart-bar", route="/admin/platform-health", order=10, ), MenuItemDefinition( id="testing", label_key="monitoring.menu.testing_hub", icon="beaker", route="/admin/testing", order=20, ), MenuItemDefinition( id="code-quality", label_key="monitoring.menu.code_quality", icon="shield-check", route="/admin/code-quality", order=30, ), ], ), MenuSectionDefinition( id="monitoring", label_key="monitoring.menu.platform_monitoring", icon="collection", order=80, is_super_admin_only=True, items=[ MenuItemDefinition( id="imports", label_key="monitoring.menu.import_jobs", icon="cube", route="/admin/imports", order=10, ), MenuItemDefinition( id="background-tasks", label_key="monitoring.menu.background_tasks", icon="collection", route="/admin/background-tasks", order=20, ), MenuItemDefinition( id="logs", label_key="monitoring.menu.application_logs", icon="document-text", route="/admin/logs", order=30, ), ], ), ], }, is_core=False, is_internal=True, # Internal module - admin-only, not customer-facing # ========================================================================= # Audit Provider # ========================================================================= audit_provider=_get_audit_provider, # ========================================================================= # Self-Contained Module Configuration # ========================================================================= is_self_contained=True, services_path="app.modules.monitoring.services", models_path="app.modules.monitoring.models", schemas_path="app.modules.monitoring.schemas", exceptions_path="app.modules.monitoring.exceptions", ) def get_monitoring_module_with_routers() -> ModuleDefinition: """ Get monitoring module with routers attached. This function attaches the routers lazily to avoid circular imports during module initialization. """ monitoring_module.admin_router = _get_admin_router() return monitoring_module __all__ = ["monitoring_module", "get_monitoring_module_with_routers"]