98 lines
4.5 KiB
Python
98 lines
4.5 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, String, Text, UniqueConstraint
|
|
from sqlalchemy.dialects.postgresql import ARRAY, JSONB
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from .base import Base, TimestampMixin
|
|
|
|
CHECK_STATUS_VALUES = (
|
|
"online",
|
|
"offline",
|
|
"unknown",
|
|
"ok",
|
|
"warn",
|
|
"failed",
|
|
)
|
|
|
|
MONITOR_POLICY_MODES = ("inherit", "include", "exclude")
|
|
|
|
|
|
class DashboardCheckDefinition(Base, TimestampMixin):
|
|
__tablename__ = "dashboard_check_definitions"
|
|
|
|
check_key: Mapped[str] = mapped_column(String(64), primary_key=True)
|
|
enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True)
|
|
interval_sec_default: Mapped[int] = mapped_column(Integer, nullable=False, default=300)
|
|
plugin_action: Mapped[str] = mapped_column(String(128), nullable=False)
|
|
categories: Mapped[list[str]] = mapped_column(ARRAY(String), nullable=False, default=list)
|
|
timeout_sec: Mapped[int] = mapped_column(Integer, nullable=False, default=30)
|
|
concurrency: Mapped[int] = mapped_column(Integer, nullable=False, default=20)
|
|
|
|
|
|
class DashboardObjectCheckOverride(Base, TimestampMixin):
|
|
__tablename__ = "dashboard_object_check_overrides"
|
|
__table_args__ = (UniqueConstraint("object_id", "check_key", name="uq_dashboard_obj_check"),)
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
object_id: Mapped[int] = mapped_column(
|
|
Integer, ForeignKey("objects.id", ondelete="CASCADE"), nullable=False, index=True
|
|
)
|
|
check_key: Mapped[str] = mapped_column(
|
|
String(64), ForeignKey("dashboard_check_definitions.check_key", ondelete="CASCADE"), nullable=False
|
|
)
|
|
enabled_override: Mapped[Optional[bool]] = mapped_column(Boolean, nullable=True)
|
|
interval_sec_override: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
|
|
categories_override: Mapped[Optional[list[str]]] = mapped_column(ARRAY(String), nullable=True)
|
|
|
|
|
|
class DashboardDeviceLiveState(Base):
|
|
__tablename__ = "dashboard_device_live_state"
|
|
__table_args__ = (UniqueConstraint("device_id", "check_key", name="uq_dashboard_device_check"),)
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
device_id: Mapped[int] = mapped_column(
|
|
Integer, ForeignKey("devices.id", ondelete="CASCADE"), nullable=False, index=True
|
|
)
|
|
check_key: Mapped[str] = mapped_column(
|
|
String(64), ForeignKey("dashboard_check_definitions.check_key", ondelete="CASCADE"), nullable=False, index=True
|
|
)
|
|
status: Mapped[str] = mapped_column(String(20), nullable=False, default="unknown")
|
|
value_json: Mapped[Optional[dict]] = mapped_column(JSONB, nullable=True)
|
|
error: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
checked_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, index=True)
|
|
duration_ms: Mapped[Optional[int]] = mapped_column(Integer, nullable=True)
|
|
source: Mapped[str] = mapped_column(String(32), nullable=False, default="dashboard_monitor")
|
|
|
|
|
|
class DashboardObjectMonitorPolicy(Base, TimestampMixin):
|
|
__tablename__ = "dashboard_object_monitor_policy"
|
|
|
|
object_id: Mapped[int] = mapped_column(
|
|
Integer, ForeignKey("objects.id", ondelete="CASCADE"), primary_key=True
|
|
)
|
|
mode: Mapped[str] = mapped_column(String(16), nullable=False, default="inherit")
|
|
|
|
|
|
class DashboardTagMonitorPolicy(Base, TimestampMixin):
|
|
__tablename__ = "dashboard_tag_monitor_policy"
|
|
|
|
tag_id: Mapped[int] = mapped_column(
|
|
Integer, ForeignKey("tags.id", ondelete="CASCADE"), primary_key=True
|
|
)
|
|
enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True)
|
|
|
|
|
|
class DashboardMonitorRunState(Base):
|
|
__tablename__ = "dashboard_monitor_run_state"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
|
status: Mapped[str] = mapped_column(String(20), nullable=False, default="idle")
|
|
run_type: Mapped[Optional[str]] = mapped_column(String(20), nullable=True)
|
|
scope: Mapped[Optional[dict]] = mapped_column(JSONB, nullable=True)
|
|
started_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True)
|
|
finished_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True)
|
|
last_success_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True)
|
|
last_error: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
|
last_counts: Mapped[Optional[dict]] = mapped_column(JSONB, nullable=True)
|