Skip to content

Commit

Permalink
show icon as well
Browse files Browse the repository at this point in the history
  • Loading branch information
pablonyx committed Dec 24, 2024
1 parent 9dd5752 commit 35c1067
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 19 deletions.
13 changes: 13 additions & 0 deletions backend/ee/onyx/db/analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
from onyx.db.models import ChatMessage
from onyx.db.models import ChatMessageFeedback
from onyx.db.models import ChatSession
from onyx.db.models import Persona
from onyx.db.models import User
from onyx.db.persona import _add_user_filters as _add_persona_user_filters


def fetch_query_analytics(
Expand Down Expand Up @@ -334,3 +337,13 @@ def fetch_assistant_unique_users_total(

result = db_session.execute(query).scalar()
return result if result else 0


def user_can_view_assistant_stats(
db_session: Session, user: User | None, assistant_id: int
) -> bool:
# Using the same logic as other user filters
stmt = select(Persona).where(Persona.id == assistant_id)
stmt = _add_persona_user_filters(stmt, user)
persona = db_session.execute(stmt).scalar_one_or_none()
return persona is not None
14 changes: 1 addition & 13 deletions backend/ee/onyx/server/analytics/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from fastapi import Depends
from fastapi import HTTPException
from pydantic import BaseModel
from sqlalchemy import select
from sqlalchemy.orm import Session

from ee.onyx.db.analytics import fetch_assistant_message_analytics
Expand All @@ -17,12 +16,11 @@
from ee.onyx.db.analytics import fetch_persona_message_analytics
from ee.onyx.db.analytics import fetch_persona_unique_users
from ee.onyx.db.analytics import fetch_query_analytics
from ee.onyx.db.analytics import user_can_view_assistant_stats
from onyx.auth.users import current_admin_user
from onyx.auth.users import current_user
from onyx.db.engine import get_session
from onyx.db.models import Persona
from onyx.db.models import User
from onyx.db.persona import _add_user_filters as _add_persona_user_filters

router = APIRouter(prefix="/analytics")

Expand Down Expand Up @@ -214,16 +212,6 @@ class AssistantStatsResponse(BaseModel):
total_unique_users: int


def user_can_view_assistant_stats(
db_session: Session, user: User | None, assistant_id: int
) -> bool:
# Using the same logic as other user filters
stmt = select(Persona).where(Persona.id == assistant_id)
stmt = _add_persona_user_filters(stmt, user)
persona = db_session.execute(stmt).scalar_one_or_none()
return persona is not None


@router.get("/assistant/{assistant_id}/stats")
def get_assistant_stats(
assistant_id: int,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ import {
DateRangeSelector,
DateRange,
} from "@/app/ee/admin/performance/DateRangeSelector";
import { useAssistants } from "@/components/context/AssistantsContext";
import { AssistantIcon } from "@/components/assistants/AssistantIcon";

type AssistantDailyUsageEntry = {
date: string;
Expand All @@ -25,13 +27,18 @@ type AssistantStatsResponse = {
export function AssistantStats({ assistantId }: { assistantId: number }) {
const [assistantStats, setAssistantStats] =
useState<AssistantStatsResponse | null>(null);
const { assistants } = useAssistants();
const [isLoading, setIsLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const [dateRange, setDateRange] = useState<DateRange>({
from: new Date(new Date().setDate(new Date().getDate() - 30)),
to: new Date(),
});

const memoizedAssistant = useMemo(() => {
return assistants.find((a) => a.id === assistantId);
}, [assistants, assistantId]);

useEffect(() => {
async function fetchStats() {
try {
Expand Down Expand Up @@ -138,12 +145,30 @@ export function AssistantStats({ assistantId }: { assistantId: number }) {

return (
<CardSection className="mt-8">
<Title>Assistant Analytics</Title>
<div className="flex justify-between items-start mb-6">
<div className="flex flex-col gap-2">
<Title>Assistant Analytics</Title>
<Text>
Messages and unique users per day for the assistant{" "}
<b>{memoizedAssistant?.name}</b>
</Text>
<DateRangeSelector value={dateRange} onValueChange={setDateRange} />
</div>
<div className="bg-gray-100 p-4 rounded-lg shadow-sm">
<div className="flex items-center mb-2">
<AssistantIcon
disableToolip
size="medium"
assistant={memoizedAssistant}
/>
<Title className="text-lg ml-3">{memoizedAssistant?.name}</Title>
</div>
<Text className="text-gray-600 text-sm">
{memoizedAssistant?.description}
</Text>
</div>
</div>
<div className="flex flex-col gap-4">
<Text>Messages and unique users per day for this assistant</Text>

<DateRangeSelector value={dateRange} onValueChange={setDateRange} />

<div className="flex justify-between">
<div>
<Text className="font-semibold">Total Messages</Text>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"use client";
import SidebarWrapper from "../../SidebarWrapper";
import SidebarWrapper from "../../../../assistants/SidebarWrapper";
import { AssistantStats } from "./AssistantStats";

export default function WrappedAssistantsStats({
Expand Down
File renamed without changes.
1 change: 1 addition & 0 deletions web/src/middleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export const config = {
"/admin/whitelabeling/:path*",
"/admin/performance/custom-analytics/:path*",
"/admin/standard-answer/:path*",
"/assistants/stats/:path*",

// Cloud only
"/admin/billing/:path*",
Expand Down

0 comments on commit 35c1067

Please sign in to comment.