stats api method

This commit is contained in:
Igor Miagkov
2022-12-31 00:34:00 +04:00
committed by Andreas Köpf
parent 8e1d80956a
commit 475f48b195
4 changed files with 39 additions and 1 deletions
+2 -1
View File
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
from fastapi import APIRouter
from oasst_backend.api.v1 import frontend_messages, frontend_users, messages, tasks, text_labels, users
from oasst_backend.api.v1 import frontend_messages, frontend_users, messages, stats, tasks, text_labels, users
api_router = APIRouter()
api_router.include_router(tasks.router, prefix="/tasks", tags=["tasks"])
@@ -9,3 +9,4 @@ api_router.include_router(messages.router, prefix="/messages", tags=["messages"]
api_router.include_router(frontend_messages.router, prefix="/frontend_messages", tags=["frontend_messages"])
api_router.include_router(users.router, prefix="/users", tags=["users"])
api_router.include_router(frontend_users.router, prefix="/frontend_users", tags=["frontend_users"])
api_router.include_router(stats.router, prefix="/stats", tags=["stats"])
+18
View File
@@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from fastapi import APIRouter, Depends
from oasst_backend.api import deps
from oasst_backend.models import ApiClient
from oasst_backend.prompt_repository import PromptRepository
from oasst_shared.schemas import protocol
from sqlmodel import Session
router = APIRouter()
@router.get("/")
def get_message_stats(
db: Session = Depends(deps.get_db),
api_client: ApiClient = Depends(deps.get_trusted_api_client),
):
pr = PromptRepository(db, api_client, None)
return protocol.SystemStats(**pr.get_stats())
@@ -663,3 +663,15 @@ class PromptRepository:
parent_ids = self.db.execute(query).scalars().all()
self.db.commit()
def get_stats(self):
deleted = self.db.query(Post.deleted, func.count()).group_by(Post.deleted)
nthreads = self.db.query(None, func.count(Post.id)).filter(Post.parent_id.is_(None))
query = deleted.union_all(nthreads)
result = {k: v for k, v in query.all()}
return {
"all": result.get(True, 0) + result.get(False, 0),
"active": result.get(False, 0),
"deleted": result.get(True, 0),
"threads": result.get(None, 0),
}
@@ -271,3 +271,10 @@ class TextLabels(BaseModel):
if not (0 <= value <= 1):
raise ValueError(f"Label values must be between 0 and 1, got {value} for {key}.")
return v
class SystemStats(BaseModel):
all: int = 0
active: int = 0
deleted: int = 0
threads: int = 0