Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions backend/open_webui/models/chats.py
Original file line number Diff line number Diff line change
Expand Up @@ -1033,5 +1033,9 @@ def delete_shared_chats_by_user_id(self, user_id: str) -> bool:
except Exception:
return False

def get_chat_count(self) -> int:
"""Get total number of chats."""
with get_db() as db:
return db.query(Chat).count()

Chats = ChatTable()
28 changes: 28 additions & 0 deletions backend/open_webui/utils/telemetry/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@ def _build_meter_provider(resource: Resource) -> MeterProvider:
View(
instrument_name="webui.users.active",
),
View(
instrument_name="webui.chats.total",
),
]

provider = MeterProvider(
Expand Down Expand Up @@ -145,6 +148,24 @@ def observe_total_registered_users(
)
]

def observe_total_chats(
options: metrics.CallbackOptions,
) -> Sequence[metrics.Observation]:
from open_webui.models.chats import Chats # Import here to avoid circular imports

try:
# Query the database for total chat count
total_chats = Chats.get_chat_count() # You'd need to implement this method
return [
metrics.Observation(
value=total_chats,
)
]
except Exception as e:
from pprint import pprint
pprint(e)
return [metrics.Observation(value=0)]

meter.create_observable_gauge(
name="webui.users.total",
description="Total number of registered users",
Expand All @@ -159,6 +180,13 @@ def observe_total_registered_users(
callbacks=[observe_active_users],
)

meter.create_observable_gauge(
name="webui.chats.total",
description="Total number of chat conversations",
unit="chats",
callbacks=[observe_total_chats],
)

# FastAPI middleware
@app.middleware("http")
async def _metrics_middleware(request: Request, call_next):
Expand Down