* chore: update requirements to python3.10 * chore: format RUF007 rule for py310 * wrongly specified python version python3.13 there is a greenlet build error
62 lines
1.6 KiB
Python
62 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from datetime import datetime, timedelta, timezone
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from lnbits.db import FilterModel
|
|
from lnbits.settings import settings
|
|
|
|
|
|
class AuditEntry(BaseModel):
|
|
component: str | None = None
|
|
ip_address: str | None = None
|
|
user_id: str | None = None
|
|
path: str | None = None
|
|
request_type: str | None = None
|
|
request_method: str | None = None
|
|
request_details: str | None = None
|
|
response_code: str | None = None
|
|
duration: float
|
|
delete_at: datetime | None = None
|
|
created_at: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
|
|
|
|
def __init__(self, **data):
|
|
super().__init__(**data)
|
|
retention_days = max(0, settings.lnbits_audit_retention_days) or 365
|
|
self.delete_at = self.created_at + timedelta(days=retention_days)
|
|
|
|
|
|
class AuditFilters(FilterModel):
|
|
__search_fields__ = [
|
|
"ip_address",
|
|
"user_id",
|
|
"path",
|
|
"request_method",
|
|
"response_code",
|
|
"component",
|
|
]
|
|
__sort_fields__ = [
|
|
"created_at",
|
|
"duration",
|
|
]
|
|
|
|
ip_address: str | None = None
|
|
user_id: str | None = None
|
|
path: str | None = None
|
|
request_method: str | None = None
|
|
response_code: str | None = None
|
|
component: str | None = None
|
|
|
|
|
|
class AuditCountStat(BaseModel):
|
|
field: str = ""
|
|
total: float = 0
|
|
|
|
|
|
class AuditStats(BaseModel):
|
|
request_method: list[AuditCountStat] = []
|
|
response_code: list[AuditCountStat] = []
|
|
component: list[AuditCountStat] = []
|
|
long_duration: list[AuditCountStat] = []
|