feat: traefik plugin scaffold (plugin.yaml, model, __init__ stub)
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
# plugins/__init__.py
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# plugins/traefik/__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
|
||||||
|
# Import model to register with SQLAlchemy metadata
|
||||||
|
from plugins.traefik.models import TraefikMetric # noqa: F401
|
||||||
|
|
||||||
|
|
||||||
|
def get_scheduled_tasks() -> list:
|
||||||
|
from plugins.traefik.scheduler import make_scrape_task
|
||||||
|
return [make_scrape_task(_app)]
|
||||||
|
|
||||||
|
|
||||||
|
def get_blueprint():
|
||||||
|
from plugins.traefik.routes import traefik_bp
|
||||||
|
return traefik_bp
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# plugins/traefik/models.py
|
||||||
|
from __future__ import annotations
|
||||||
|
import uuid
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
from sqlalchemy import DateTime, Float, String
|
||||||
|
from sqlalchemy.orm import Mapped, mapped_column
|
||||||
|
from fablednetmon.models.base import Base
|
||||||
|
|
||||||
|
|
||||||
|
class TraefikMetric(Base):
|
||||||
|
__tablename__ = "traefik_metrics"
|
||||||
|
|
||||||
|
id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
|
||||||
|
router_name: Mapped[str] = mapped_column(String(255), nullable=False)
|
||||||
|
scraped_at: Mapped[datetime] = mapped_column(
|
||||||
|
DateTime(timezone=True), nullable=False, default=lambda: datetime.now(timezone.utc)
|
||||||
|
)
|
||||||
|
request_rate: Mapped[float] = mapped_column(Float, nullable=False)
|
||||||
|
error_rate_4xx_pct: Mapped[float] = mapped_column(Float, nullable=False)
|
||||||
|
error_rate_5xx_pct: Mapped[float] = mapped_column(Float, nullable=False)
|
||||||
|
latency_p50_ms: Mapped[float] = mapped_column(Float, nullable=False)
|
||||||
|
latency_p95_ms: Mapped[float] = mapped_column(Float, nullable=False)
|
||||||
|
latency_p99_ms: Mapped[float] = mapped_column(Float, nullable=False)
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# plugins/traefik/plugin.yaml
|
||||||
|
name: traefik
|
||||||
|
version: "1.0.0"
|
||||||
|
description: "Traefik reverse proxy metrics integration"
|
||||||
|
author: ""
|
||||||
|
min_app_version: "0.1.0"
|
||||||
|
|
||||||
|
config:
|
||||||
|
metrics_url: "http://localhost:8080/metrics"
|
||||||
|
scrape_interval_seconds: 60
|
||||||
Reference in New Issue
Block a user