Skip to content

Commit 195593e

Browse files
committed
add the logic
1 parent 1058f15 commit 195593e

File tree

3 files changed

+41
-9
lines changed

3 files changed

+41
-9
lines changed

src/client/components/Courses/Course/Stats.tsx

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { useState } from 'react'
2-
import { Box, Paper, Typography, TableBody, TableCell, TableHead, TableRow, Table, Button } from '@mui/material'
2+
import { Box, Paper, Typography, TableBody, TableCell, TableHead, TableRow, Table, Button, Tooltip as MUITooltip } from '@mui/material'
33
import { useTranslation } from 'react-i18next'
44
import { BarChart, Bar, YAxis, Tooltip, ResponsiveContainer } from 'recharts'
55

66
import useCurrentUser from '../../../hooks/useCurrentUser'
77
import useCourse, { useCourseEnrolments, useCourseStatistics } from '../../../hooks/useCourse'
88
import MaxTokenUsageStudents from './MaxTokenUsageStudents'
9+
import { HelpOutline } from '@mui/icons-material'
910

1011
const Stats = ({ courseId }: { courseId: string }) => {
1112
const { t } = useTranslation()
@@ -47,11 +48,11 @@ const Stats = ({ courseId }: { courseId: string }) => {
4748
</Typography>
4849

4950
<Typography sx={{ my: 1 }}>
50-
{t('course:averageTokenUsage')} {Math.round(average) ?? t('course:noData')}
51+
{t('course:averageTokenUsage')}: <strong>{Math.round(average) ?? t('course:noData')}</strong>
5152
</Typography>
5253

5354
<Typography>
54-
{t('course:usagePercentage')} {usagePercentage ? `${Math.round(usagePercentage * 100 * 10) / 10}%` : t('course:noData')}
55+
{t('course:usagePercentage')}: <strong>{usagePercentage ? `${Math.round(usagePercentage * 100 * 10) / 10}%` : t('course:noData')}</strong>
5556
</Typography>
5657

5758
{usages && usages.length > 3 && usagePercentage > 0.2 && (
@@ -102,8 +103,38 @@ const Stats = ({ courseId }: { courseId: string }) => {
102103
<TableCell>
103104
<strong>{t('admin:firstNames')}</strong>
104105
</TableCell>
105-
<TableCell>
106-
<strong>{t('admin:usage')}</strong>
106+
<TableCell align='right'>
107+
<Box sx={{ display: 'flex', gap: 1, alignItems: 'center', justifyContent: 'flex-end' }}>
108+
<strong>{t('admin:usage')}</strong>
109+
<MUITooltip
110+
arrow
111+
placement="top"
112+
title={
113+
<Typography variant="body2" sx={{ p: 1 }}>
114+
{t('course:usageToolTip')}
115+
</Typography>
116+
}
117+
>
118+
<HelpOutline fontSize="small" sx={{ color: 'inherit', opacity: 0.7 }} />
119+
</MUITooltip>
120+
</Box>
121+
</TableCell>
122+
123+
<TableCell align='right'>
124+
<Box sx={{ display: 'flex', gap: 1, alignItems: 'center', justifyContent: 'flex-end' }}>
125+
<strong>{t('admin:totalUsage')}</strong>
126+
<MUITooltip
127+
arrow
128+
placement="top"
129+
title={
130+
<Typography variant="body2" sx={{ p: 1 }}>
131+
{t('course:totalUsageToolTip')}
132+
</Typography>
133+
}
134+
>
135+
<HelpOutline fontSize="small" sx={{ color: 'inherit', opacity: 0.7 }} />
136+
</MUITooltip>
137+
</Box>
107138
</TableCell>
108139
</TableRow>
109140
</TableHead>
@@ -113,7 +144,8 @@ const Stats = ({ courseId }: { courseId: string }) => {
113144
<TableCell>{enrolled.student_number}</TableCell>
114145
<TableCell>{enrolled.last_name}</TableCell>
115146
<TableCell>{enrolled.first_names}</TableCell>
116-
<TableCell>{usageByUser[enrolled.id] ? usageByUser[enrolled.id].usageCount : 0}</TableCell>
147+
<TableCell align='right'>{usageByUser[enrolled.id] ? usageByUser[enrolled.id].usageCount : 0}</TableCell>
148+
<TableCell align='right'>{usageByUser[enrolled.id] ? usageByUser[enrolled.id].totalUsageCount : 0}</TableCell>
117149
</TableRow>
118150
))}
119151
</TableBody>

src/server/routes/course.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,11 @@ courseRouter.get('/statistics/:id', async (req, res) => {
6969
where: { chatInstanceId: chatInstance.id },
7070
})
7171

72-
const enrolledUsages = usages.filter((usage) => enrolments.map((e) => e.userId).includes(usage.userId)).filter((u) => u.usageCount > 0)
72+
const enrolledUsages = usages.filter((usage) => enrolments.map((e) => e.userId).includes(usage.userId)).filter((u) => u.totalUsageCount > 0)
7373

7474
const usagePercentage = enrolledUsages.length / enrolments.length
7575

76-
const average = enrolledUsages.map((u) => u.usageCount).reduce((a, b) => a + b, 0) / enrolledUsages.length
76+
const average = enrolledUsages.map((u) => u.totalUsageCount).reduce((a, b) => a + b, 0) / enrolledUsages.length
7777

7878
const normalizedUsage = enrolledUsages.map((usage) => ({
7979
...usage,

src/server/services/chatInstances/usage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export const incrementCourseUsage = async (chatInstance: ChatInstance, tokenCoun
7171
if (!chatInstance.currentUserUsage) {
7272
throw ApplicationError.InternalServerError('chatInstance.currentUserUsage undefined. This shouldnt happen!')
7373
}
74-
await chatInstance.currentUserUsage.increment({ usageCount: tokenCount })
74+
await chatInstance.currentUserUsage.increment({ usageCount: tokenCount, totalUsageCount: tokenCount })
7575
}
7676

7777
export const getUserStatus = async (user: UserType, courseId: string) => {

0 commit comments

Comments
 (0)