# plugins/syslog/__init__.py from __future__ import annotations from typing import TYPE_CHECKING if TYPE_CHECKING: from quart import Quart _app: "Quart | None" = None def setup(app: "Quart") -> None: global _app _app = app from .models import SyslogLine, SyslogSource # noqa: F401 — registers the tables from .receiver import close # The listener is bound by the receive task, so it follows the settings # and starts on a live enable too; it is closed with the app. app.after_serving(close) def get_scheduled_tasks() -> list: from .receiver import make_receive_task from .retention import make_prune_task return [make_receive_task(_app), make_prune_task(_app)] def get_blueprint(): from .routes import syslog_bp return syslog_bp def get_nav() -> list[dict]: return [{"label": "Syslog", "href": "/plugins/syslog/"}] def register_mcp_tools(register) -> None: from .mcp_tools import register_tools register_tools(register) def get_audit_entities() -> dict: """Audit rows about a source name it and link to the Syslog page.""" from .models import SyslogSource return {"syslog_source": (SyslogSource, "/plugins/syslog/sources/{}")}