54337a5917
Store hardware/software snapshots on hosts; warn on hardware changes. Host card from Hosts list. Add agent version column to Events/Overview; rename Hosts table columns and sort by status. Co-authored-by: Cursor <cursoragent@cursor.com>
31 lines
1.5 KiB
Python
31 lines
1.5 KiB
Python
from datetime import datetime
|
|
|
|
from sqlalchemy import DateTime, String, Text, func
|
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from app.database import Base
|
|
|
|
|
|
class Host(Base):
|
|
__tablename__ = "hosts"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
|
agent_instance_id: Mapped[str | None] = mapped_column(String(128), unique=True, index=True)
|
|
hostname: Mapped[str] = mapped_column(String(255), index=True)
|
|
display_name: Mapped[str | None] = mapped_column(String(255))
|
|
os_family: Mapped[str] = mapped_column(String(32))
|
|
os_version: Mapped[str | None] = mapped_column(String(128))
|
|
product: Mapped[str] = mapped_column(String(64), index=True)
|
|
product_version: Mapped[str | None] = mapped_column(String(64))
|
|
ipv4: Mapped[str | None] = mapped_column(String(45))
|
|
ipv6: Mapped[str | None] = mapped_column(String(45))
|
|
tags: Mapped[list | None] = mapped_column(JSONB, default=list)
|
|
inventory: Mapped[dict | None] = mapped_column(JSONB)
|
|
inventory_updated_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True))
|
|
use_sac_mode: Mapped[str | None] = mapped_column(String(32))
|
|
last_seen_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
events: Mapped[list["Event"]] = relationship(back_populates="host")
|