Initial commit: InfoUser Monitor with FastAPI, agent, Docker, JWT auth, notifications, filters and CSV export
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
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)
|
||||
|
||||
|
||||
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)
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user