""" Server log model for audit trail """ from app.extensions import db import datetime import pytz # Get local timezone LOCAL_TZ = pytz.timezone('Europe/Bucharest') # Adjust this to your local timezone def get_local_time(): """Get current local time""" return datetime.datetime.now(LOCAL_TZ).replace(tzinfo=None) class ServerLog(db.Model): """Server log model for tracking system actions""" id = db.Column(db.Integer, primary_key=True) action = db.Column(db.String(255), nullable=False, index=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True) ip_address = db.Column(db.String(45), nullable=True) # Support IPv6 user_agent = db.Column(db.Text, nullable=True) timestamp = db.Column(db.DateTime, default=get_local_time, index=True) level = db.Column(db.String(20), default='INFO') # INFO, WARNING, ERROR, DEBUG # Relationships user = db.relationship('User', backref='logs') @staticmethod def log(action, user_id=None, ip_address=None, user_agent=None, level='INFO'): """Create a new log entry""" log_entry = ServerLog( action=action, user_id=user_id, ip_address=ip_address, user_agent=user_agent, level=level ) db.session.add(log_entry) db.session.commit() return log_entry @staticmethod def get_recent_logs(limit=50): """Get recent log entries""" return ServerLog.query.order_by(ServerLog.timestamp.desc()).limit(limit).all() def __repr__(self): return f''