mirror of
https://github.com/lnbits/lnbits.git
synced 2025-07-12 22:12:41 +02:00
feat: basic stats endpoint
This commit is contained in:
@ -2,6 +2,7 @@ from typing import Optional
|
|||||||
|
|
||||||
from lnbits.core.db import db
|
from lnbits.core.db import db
|
||||||
from lnbits.core.models import AuditEntry, AuditFilters
|
from lnbits.core.models import AuditEntry, AuditFilters
|
||||||
|
from lnbits.core.models.audit import AuditCountStat
|
||||||
from lnbits.db import Connection, Filters, Page
|
from lnbits.db import Connection, Filters, Page
|
||||||
|
|
||||||
|
|
||||||
@ -23,3 +24,25 @@ async def get_audit_entries(
|
|||||||
filters=filters,
|
filters=filters,
|
||||||
model=AuditEntry,
|
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
|
path: Optional[str] = None
|
||||||
request_method: Optional[str] = None
|
request_method: Optional[str] = None
|
||||||
response_code: 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"
|
label="Retention days"
|
||||||
hint="Number of days to keep the audit entry."
|
hint="Number of days to keep the audit entry."
|
||||||
>
|
>
|
||||||
|
|
||||||
</q-input>
|
</q-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
from fastapi import APIRouter, Depends
|
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 import AuditEntry, AuditFilters
|
||||||
|
from lnbits.core.models.audit import AuditStats
|
||||||
from lnbits.db import Filters, Page
|
from lnbits.db import Filters, Page
|
||||||
from lnbits.decorators import check_admin, parse_filters
|
from lnbits.decorators import check_admin, parse_filters
|
||||||
from lnbits.helpers import generate_filter_params_openapi
|
from lnbits.helpers import generate_filter_params_openapi
|
||||||
@ -17,7 +18,20 @@ audit_router = APIRouter(
|
|||||||
summary="Get paginated list audit entries",
|
summary="Get paginated list audit entries",
|
||||||
openapi_extra=generate_filter_params_openapi(AuditFilters),
|
openapi_extra=generate_filter_params_openapi(AuditFilters),
|
||||||
)
|
)
|
||||||
async def api_get_users(
|
async def api_get_audit(
|
||||||
filters: Filters = Depends(parse_filters(AuditFilters)),
|
filters: Filters = Depends(parse_filters(AuditFilters)),
|
||||||
) -> Page[AuditEntry]:
|
) -> Page[AuditEntry]:
|
||||||
return await get_audit_entries(filters)
|
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)
|
||||||
|
Reference in New Issue
Block a user