Files
winauthmon-server/api/models.py
T
2025-05-25 20:26:18 +01:00

52 lines
2.3 KiB
Python

from extensions import db
from datetime import datetime
from flask import current_app
import pytz
# Import models for direct relationship references
import sys
import os
# Add the parent directory to path for imports to work
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from auth.models import Company, ApiKey
from utils.toolbox import get_current_timestamp
def get_current_time_with_timezone():
"""Return current time with the configured timezone"""
return get_current_timestamp()
class Log(db.Model):
__tablename__ = 'api_logs'
id = db.Column(db.Integer, primary_key=True)
event_type = db.Column(db.String(20), nullable=False)
user_name = db.Column(db.String(50), nullable=False)
computer_name = db.Column(db.String(50), nullable=False)
ip_address = db.Column(db.String(15), nullable=False)
timestamp = db.Column(db.DateTime, nullable=False, default=get_current_time_with_timezone)
retry = db.Column(db.Integer, default=0, nullable=False)
company_id = db.Column(db.Integer, db.ForeignKey('app_auth_companies.id'), nullable=True)
api_key_id = db.Column(db.Integer, db.ForeignKey('app_auth_api_keys.id'), nullable=True)
# Relationships
company = db.relationship(Company, backref='logs', foreign_keys=[company_id])
api_key = db.relationship(ApiKey, backref='logs', foreign_keys=[api_key_id])
class ErrorLog(db.Model):
"""Model for storing application error logs"""
id = db.Column(db.Integer, primary_key=True)
level = db.Column(db.String(20), nullable=False)
logger_name = db.Column(db.String(100), nullable=True)
message = db.Column(db.Text, nullable=False)
timestamp = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
pathname = db.Column(db.String(255), nullable=True)
lineno = db.Column(db.Integer, nullable=True)
request_id = db.Column(db.String(100), nullable=True)
user_id = db.Column(db.Integer, db.ForeignKey('app_auth_users.id', ondelete='SET NULL'), nullable=True)
remote_addr = db.Column(db.String(50), nullable=True)
exception = db.Column(db.Text, nullable=True)
def __repr__(self):
return f'<ErrorLog {self.id}: {self.level} - {self.message[:50]}>'
# API-specific models
# Note: ApiKey model is in auth/models.py as it's related to user authentication