97 lines
4.0 KiB
Python
97 lines
4.0 KiB
Python
from sqlalchemy import Column, Integer, String, Float, DateTime, Text, JSON, ForeignKey, Boolean
|
|
from sqlalchemy.sql import func
|
|
from database import Base
|
|
|
|
|
|
class User(Base):
|
|
__tablename__ = "users"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
username = Column(String, unique=True, nullable=False, index=True)
|
|
password_hash = Column(String, nullable=False)
|
|
role = Column(String, default="viewer", nullable=False) # admin | viewer
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
|
|
class Computer(Base):
|
|
__tablename__ = "computers"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
hostname = Column(String, nullable=False, index=True)
|
|
os_info = Column(String, nullable=True)
|
|
first_seen = Column(DateTime(timezone=True), server_default=func.now())
|
|
last_seen = Column(DateTime(timezone=True), nullable=True)
|
|
status = Column(String, default="offline", nullable=False)
|
|
current_user = Column(String, nullable=True)
|
|
current_ip = Column(String, nullable=True)
|
|
current_uptime_sec = Column(Integer, nullable=True)
|
|
current_cpu_percent = Column(Float, nullable=True)
|
|
current_ram_percent = Column(Float, nullable=True)
|
|
current_ram_total_gb = Column(Float, nullable=True)
|
|
current_ram_used_gb = Column(Float, nullable=True)
|
|
current_ram_available_gb = Column(Float, nullable=True)
|
|
current_swap_total_gb = Column(Float, nullable=True)
|
|
current_swap_used_gb = Column(Float, nullable=True)
|
|
current_swap_free_gb = Column(Float, nullable=True)
|
|
current_swap_percent = Column(Float, nullable=True)
|
|
|
|
|
|
class Heartbeat(Base):
|
|
__tablename__ = "heartbeats"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
computer_id = Column(Integer, ForeignKey("computers.id", ondelete="CASCADE"), nullable=False, index=True)
|
|
timestamp = Column(DateTime(timezone=True), server_default=func.now(), index=True)
|
|
username = Column(String, nullable=True)
|
|
local_ip = Column(String, nullable=True)
|
|
public_ip = Column(String, nullable=True)
|
|
uptime_sec = Column(Integer, nullable=True)
|
|
cpu_percent = Column(Float, nullable=True)
|
|
ram_percent = Column(Float, nullable=True)
|
|
ram_total_gb = Column(Float, nullable=True)
|
|
ram_used_gb = Column(Float, nullable=True)
|
|
ram_available_gb = Column(Float, nullable=True)
|
|
swap_total_gb = Column(Float, nullable=True)
|
|
swap_used_gb = Column(Float, nullable=True)
|
|
swap_free_gb = Column(Float, nullable=True)
|
|
swap_percent = Column(Float, nullable=True)
|
|
disk_info = Column(JSON, nullable=True)
|
|
cpu_temp = Column(Float, nullable=True)
|
|
load_avg = Column(String, nullable=True)
|
|
processes = Column(JSON, nullable=True)
|
|
sessions = Column(JSON, nullable=True)
|
|
|
|
|
|
class AuditLog(Base):
|
|
__tablename__ = "audit_log"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
user_id = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"), nullable=True)
|
|
username = Column(String, nullable=True)
|
|
action = Column(String, nullable=False)
|
|
details = Column(Text, nullable=True)
|
|
timestamp = Column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
|
|
class Notification(Base):
|
|
__tablename__ = "notifications"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
computer_id = Column(Integer, ForeignKey("computers.id", ondelete="CASCADE"), nullable=True, index=True)
|
|
type = Column(String, default="offline", nullable=False) # offline | alert | info
|
|
title = Column(String, nullable=False)
|
|
message = Column(Text, nullable=False)
|
|
is_read = Column(Boolean, default=False, nullable=False)
|
|
sent_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
read_at = Column(DateTime(timezone=True), nullable=True)
|
|
|
|
|
|
class Setting(Base):
|
|
__tablename__ = "settings"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
key = Column(String, unique=True, nullable=False, index=True)
|
|
value = Column(Text, nullable=True)
|
|
updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
|
|
|