Files
info-user/server/models.py
T
Hidosi 7b2e5172ea Add active user session tracking from agent user :0 2026-07-16 15:46
user     pts/0        2026-07-16 15:50 (:0)
user     pts/1        2026-07-16 16:46 (:0)
user     pts/2        2026-07-17 09:05 (:0) to server UI
2026-07-17 09:44:39 +07:00

85 lines
3.4 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)
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)
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())