salvirezwan's picture
Initial commit: Academic Research RAG project
8ec547b
Raw
History Blame Contribute Delete
2.88 kB
from typing import Optional, List
from datetime import datetime, timedelta
from backend.data.mongodb_client import get_database
from backend.models.request_log import RequestLog
from backend.core.logging import logger
async def create_request_log(
response_time: float,
endpoint: Optional[str] = None,
status_code: Optional[int] = None,
error_type: Optional[str] = None
) -> RequestLog:
database = get_database()
if database is None:
raise RuntimeError("Database not initialized")
collection = database["request_logs"]
log = RequestLog(
response_time=response_time,
endpoint=endpoint,
status_code=status_code,
error_type=error_type
)
try:
result = await collection.insert_one(log.to_mongo())
log.id = result.inserted_id
return log
except Exception as e:
logger.error(f"Error creating request log: {e}")
raise
async def get_all_logs(
limit: int = 100,
offset: int = 0,
endpoint: Optional[str] = None
) -> List[RequestLog]:
database = get_database()
if database is None:
raise RuntimeError("Database not initialized")
collection = database["request_logs"]
filter_dict = {}
if endpoint:
filter_dict["endpoint"] = endpoint
try:
cursor = collection.find(filter_dict).sort("timestamp", -1).skip(offset).limit(limit)
logs = []
async for log in cursor:
logs.append(RequestLog.from_mongo(log))
return logs
except Exception as e:
logger.error(f"Error getting logs: {e}")
return []
async def get_logs_by_time_range(
start_time: datetime,
end_time: datetime,
limit: int = 1000
) -> List[RequestLog]:
database = get_database()
if database is None:
raise RuntimeError("Database not initialized")
collection = database["request_logs"]
try:
cursor = collection.find({
"timestamp": {"$gte": start_time, "$lte": end_time}
}).sort("timestamp", -1).limit(limit)
logs = []
async for log in cursor:
logs.append(RequestLog.from_mongo(log))
return logs
except Exception as e:
logger.error(f"Error getting logs by time range: {e}")
return []
async def delete_old_logs(retention_days: int = 30) -> int:
database = get_database()
if database is None:
raise RuntimeError("Database not initialized")
collection = database["request_logs"]
cutoff_date = datetime.utcnow() - timedelta(days=retention_days)
try:
result = await collection.delete_many({"timestamp": {"$lt": cutoff_date}})
logger.info(f"Deleted {result.deleted_count} old log entries")
return result.deleted_count
except Exception as e:
logger.error(f"Error deleting old logs: {e}")
return 0