# plugins/host_agent/models.py from __future__ import annotations import uuid from datetime import datetime, timezone from sqlalchemy import Column, String, DateTime, ForeignKey from steward.models.base import Base def _uuid() -> str: return str(uuid.uuid4()) def _utcnow() -> datetime: return datetime.now(timezone.utc) class HostAgentRegistration(Base): __tablename__ = "host_agent_registrations" id = Column(String(36), primary_key=True, default=_uuid) host_id = Column(String(36), ForeignKey("hosts.id", ondelete="CASCADE"), unique=True, nullable=False) token_hash = Column(String(64), nullable=False, unique=True, index=True) token_created_at = Column(DateTime(timezone=True), nullable=False, default=_utcnow) agent_version = Column(String(32), nullable=True) kernel = Column(String(128), nullable=True) distro = Column(String(128), nullable=True) arch = Column(String(32), nullable=True) # Agent-reported primary IP. 45 chars = max textual IPv6 (no zone suffix). host_ip = Column(String(45), nullable=True) last_seen_at = Column(DateTime(timezone=True), nullable=True) created_at = Column(DateTime(timezone=True), nullable=False, default=_utcnow) updated_at = Column(DateTime(timezone=True), nullable=False, default=_utcnow, onupdate=_utcnow)