feat: Initial commit for OnEver Drive centralized backup system with Windows PyQt6 agent and Proxmox LXC deployment
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
import json
|
||||
from datetime import datetime, timezone
|
||||
from typing import Optional, Dict, Any
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from app.models.models import EventLog
|
||||
from app.ws.manager import ws_manager
|
||||
|
||||
async def log_event(
|
||||
db: AsyncSession,
|
||||
event_type: str,
|
||||
message: str,
|
||||
severity: str = "INFO",
|
||||
client_id: Optional[int] = None,
|
||||
job_id: Optional[int] = None,
|
||||
user_email: Optional[str] = None,
|
||||
ip_address: Optional[str] = None,
|
||||
details: Optional[Dict[str, Any]] = None
|
||||
) -> EventLog:
|
||||
"""Records an audit event in the database and broadcasts it over WebSockets."""
|
||||
details_str = json.dumps(details, default=str) if details else None
|
||||
|
||||
event = EventLog(
|
||||
timestamp=datetime.now(timezone.utc),
|
||||
event_type=event_type,
|
||||
severity=severity,
|
||||
client_id=client_id,
|
||||
job_id=job_id,
|
||||
user_email=user_email,
|
||||
ip_address=ip_address,
|
||||
message=message,
|
||||
details_json=details_str
|
||||
)
|
||||
db.add(event)
|
||||
await db.commit()
|
||||
await db.refresh(event)
|
||||
|
||||
# Broadcast real-time event to all Web UI connections
|
||||
await ws_manager.broadcast("EVENT_LOG", {
|
||||
"id": event.id,
|
||||
"timestamp": event.timestamp.isoformat(),
|
||||
"event_type": event.event_type,
|
||||
"severity": event.severity,
|
||||
"client_id": event.client_id,
|
||||
"job_id": event.job_id,
|
||||
"message": event.message
|
||||
})
|
||||
|
||||
return event
|
||||
Reference in New Issue
Block a user