mirror of
https://github.com/lnbits/lnbits.git
synced 2025-04-02 08:58:33 +02:00
feat: basic stats endpoint
This commit is contained in:
parent
bbe877e087
commit
2bb0d40244
@ -2,6 +2,7 @@ from typing import Optional
|
||||
|
||||
from lnbits.core.db import db
|
||||
from lnbits.core.models import AuditEntry, AuditFilters
|
||||
from lnbits.core.models.audit import AuditCountStat
|
||||
from lnbits.db import Connection, Filters, Page
|
||||
|
||||
|
||||
@ -23,3 +24,25 @@ async def get_audit_entries(
|
||||
filters=filters,
|
||||
model=AuditEntry,
|
||||
)
|
||||
|
||||
|
||||
async def get_audit_stats(
|
||||
filters: Optional[Filters[AuditFilters]] = None,
|
||||
conn: Optional[Connection] = None,
|
||||
) -> list[AuditCountStat]:
|
||||
if not filters:
|
||||
filters = Filters()
|
||||
clause = filters.where()
|
||||
request_methods = await (conn or db).fetchall(
|
||||
query=f"""
|
||||
SELECT request_method as field, count(request_method) as total
|
||||
FROM audit
|
||||
{clause}
|
||||
GROUP BY request_method
|
||||
ORDER BY total DESC
|
||||
""",
|
||||
values=filters.values(),
|
||||
model=AuditCountStat,
|
||||
)
|
||||
|
||||
return request_methods
|
||||
|
@ -46,3 +46,13 @@ class AuditFilters(FilterModel):
|
||||
path: Optional[str] = None
|
||||
request_method: Optional[str] = None
|
||||
response_code: Optional[str] = None
|
||||
|
||||
|
||||
class AuditCountStat(BaseModel):
|
||||
field: str
|
||||
total: int
|
||||
|
||||
|
||||
class AuditStats(BaseModel):
|
||||
request_method: list[AuditCountStat] = []
|
||||
response_code: list[AuditCountStat] = []
|
||||
|
@ -31,7 +31,6 @@
|
||||
label="Retention days"
|
||||
hint="Number of days to keep the audit entry."
|
||||
>
|
||||
|
||||
</q-input>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,7 +1,8 @@
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from lnbits.core.crud.audit import get_audit_entries
|
||||
from lnbits.core.crud.audit import get_audit_entries, get_audit_stats
|
||||
from lnbits.core.models import AuditEntry, AuditFilters
|
||||
from lnbits.core.models.audit import AuditStats
|
||||
from lnbits.db import Filters, Page
|
||||
from lnbits.decorators import check_admin, parse_filters
|
||||
from lnbits.helpers import generate_filter_params_openapi
|
||||
@ -17,7 +18,20 @@ audit_router = APIRouter(
|
||||
summary="Get paginated list audit entries",
|
||||
openapi_extra=generate_filter_params_openapi(AuditFilters),
|
||||
)
|
||||
async def api_get_users(
|
||||
async def api_get_audit(
|
||||
filters: Filters = Depends(parse_filters(AuditFilters)),
|
||||
) -> Page[AuditEntry]:
|
||||
return await get_audit_entries(filters)
|
||||
|
||||
|
||||
@audit_router.get(
|
||||
"/stats",
|
||||
name="Get audit entries",
|
||||
summary="Get paginated list audit entries",
|
||||
openapi_extra=generate_filter_params_openapi(AuditFilters),
|
||||
)
|
||||
async def api_get_audit_stats(
|
||||
filters: Filters = Depends(parse_filters(AuditFilters)),
|
||||
) -> AuditStats:
|
||||
request_mothod_stats = await get_audit_stats(filters)
|
||||
return AuditStats(request_method=request_mothod_stats)
|
||||
|
Loading…
x
Reference in New Issue
Block a user