updated first commit
This commit is contained in:
116
app/utils/logger.py
Normal file
116
app/utils/logger.py
Normal file
@@ -0,0 +1,116 @@
|
||||
"""
|
||||
Logging utilities for server actions
|
||||
"""
|
||||
|
||||
import datetime
|
||||
from flask import request
|
||||
from flask_login import current_user
|
||||
from app.extensions import db
|
||||
from app.models.server_log import ServerLog
|
||||
|
||||
def log_action(action, level='INFO', user_id=None, ip_address=None, user_agent=None):
|
||||
"""
|
||||
Log an action to the server log database
|
||||
|
||||
Args:
|
||||
action (str): Description of the action
|
||||
level (str): Log level (INFO, WARNING, ERROR, DEBUG)
|
||||
user_id (int): User ID if action is user-specific
|
||||
ip_address (str): IP address of the request
|
||||
user_agent (str): User agent string
|
||||
"""
|
||||
try:
|
||||
# Auto-detect user and request info if not provided
|
||||
if user_id is None and hasattr(current_user, 'id') and current_user.is_authenticated:
|
||||
user_id = current_user.id
|
||||
|
||||
if ip_address is None and request:
|
||||
ip_address = request.remote_addr
|
||||
|
||||
if user_agent is None and request:
|
||||
user_agent = request.user_agent.string
|
||||
|
||||
ServerLog.log(
|
||||
action=action,
|
||||
user_id=user_id,
|
||||
ip_address=ip_address,
|
||||
user_agent=user_agent,
|
||||
level=level
|
||||
)
|
||||
print(f"[{level}] {action}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error logging action: {e}")
|
||||
# Try to rollback and log without context
|
||||
try:
|
||||
db.session.rollback()
|
||||
log_entry = ServerLog(action=f"ERROR: {action} (logging failed: {str(e)})", level='ERROR')
|
||||
db.session.add(log_entry)
|
||||
db.session.commit()
|
||||
except:
|
||||
pass # If this fails too, we can't do much
|
||||
|
||||
def get_recent_logs(limit=50):
|
||||
"""
|
||||
Get the most recent log entries
|
||||
|
||||
Args:
|
||||
limit (int): Maximum number of log entries to return
|
||||
|
||||
Returns:
|
||||
list: List of ServerLog objects
|
||||
"""
|
||||
return ServerLog.get_recent_logs(limit)
|
||||
|
||||
# Helper functions for common log actions
|
||||
def log_upload(file_type, file_name, target_type, target_name):
|
||||
"""Log file upload action"""
|
||||
log_action(f"{file_type.upper()} file '{file_name}' uploaded for {target_type} '{target_name}'")
|
||||
|
||||
def log_process(file_type, file_name, target_type, target_name):
|
||||
"""Log file processing action"""
|
||||
log_action(f"{file_type.upper()} file '{file_name}' processed for {target_type} '{target_name}'")
|
||||
|
||||
def log_player_created(username, hostname):
|
||||
"""Log player creation"""
|
||||
log_action(f"Player '{username}' with hostname '{hostname}' was created")
|
||||
|
||||
def log_player_edited(username):
|
||||
"""Log player edit"""
|
||||
log_action(f"Player '{username}' was edited")
|
||||
|
||||
def log_player_deleted(username):
|
||||
"""Log player deletion"""
|
||||
log_action(f"Player '{username}' was deleted")
|
||||
|
||||
def log_group_created(name):
|
||||
"""Log group creation"""
|
||||
log_action(f"Group '{name}' was created")
|
||||
|
||||
def log_group_edited(name):
|
||||
"""Log group edit"""
|
||||
log_action(f"Group '{name}' was edited")
|
||||
|
||||
def log_group_deleted(name):
|
||||
"""Log group deletion"""
|
||||
log_action(f"Group '{name}' was deleted")
|
||||
|
||||
def log_user_created(username, role):
|
||||
"""Log user creation"""
|
||||
log_action(f"User '{username}' with role '{role}' was created")
|
||||
|
||||
def log_user_deleted(username):
|
||||
"""Log user deletion"""
|
||||
log_action(f"User '{username}' was deleted")
|
||||
|
||||
def log_content_added(file_name, target_type, target_name):
|
||||
"""Log content addition"""
|
||||
log_action(f"Content '{file_name}' added to {target_type} '{target_name}'")
|
||||
|
||||
def log_content_reordered(target_type, target_name):
|
||||
"""Log content reordering"""
|
||||
log_action(f"Content reordered for {target_type} '{target_name}'")
|
||||
|
||||
def log_content_duration_changed(file_name, new_duration):
|
||||
"""Log content duration change"""
|
||||
log_action(f"Content '{file_name}' duration changed to {new_duration} seconds")
|
||||
Reference in New Issue
Block a user