diff --git a/packages/analytics/src/controllers/commands.js b/packages/analytics/src/controllers/commands.js index 4692652..514a891 100644 --- a/packages/analytics/src/controllers/commands.js +++ b/packages/analytics/src/controllers/commands.js @@ -1,9 +1,29 @@ +/* eslint-disable object-shorthand */ +import { Command } from '@linux-odyssey/models' import { errorCommands } from '../models/commands.js' // eslint-disable-next-line import/prefer-default-export export async function commandListController(req, res) { - const payload = { - errorCommands: await errorCommands(), + const itemsPerPage = 250 + + try { + const totalCommands = await Command.countDocuments({ + $and: [ + { error: { $exists: true } }, + { error: { $ne: null } }, + { error: { $ne: '' } }, + ], + }) + + const maxPages = Math.ceil(totalCommands / itemsPerPage) + + const pageNumber = req.query.page || 1 + const payload = { + errorCommands: await errorCommands(pageNumber, itemsPerPage), + pages: Array.from({ length: maxPages }, (_, index) => index + 1), + } + res.render('commands', payload) + } catch (error) { + res.status(500).send('Error fetching data') } - res.render('commands', payload) } diff --git a/packages/analytics/src/controllers/sessions.js b/packages/analytics/src/controllers/sessions.js index 47dc3bb..e0b131b 100644 --- a/packages/analytics/src/controllers/sessions.js +++ b/packages/analytics/src/controllers/sessions.js @@ -1,8 +1,21 @@ -import { sessionList, sessionDetail } from '../models/sessions.js' +import { sessionCount, sessionList, sessionDetail } from '../models/sessions.js' export async function sessionListController(req, res) { - const sessions = await sessionList() - res.render('sessions', { sessions }) + const pageNumber = req.query.page || 1 + const itemsPerPage = 100 + + try { + const totalSessions = await sessionCount() + const maxPages = Math.ceil(totalSessions / itemsPerPage) + + const sessions = await sessionList(pageNumber, itemsPerPage) + + const pages = Array.from({ length: maxPages }, (_, index) => index + 1) + + res.render('sessions', { sessions, pages }) + } catch (error) { + res.status(500).send('Error fetching session data') + } } export async function sessionDetailController(req, res) { diff --git a/packages/analytics/src/controllers/users.js b/packages/analytics/src/controllers/users.js index 5eb16b9..828a0c8 100644 --- a/packages/analytics/src/controllers/users.js +++ b/packages/analytics/src/controllers/users.js @@ -1,6 +1,20 @@ -import { userList } from '../models/users.js' +import { userList, userCount } from '../models/users.js' -// eslint-disable-next-line import/prefer-default-export export async function userListController(req, res) { - res.render('users', { users: await userList() }) + const pageNumber = req.query.page || 1 + const itemsPerPage = 50 + + try { + const totalUsers = await userCount() + const maxPages = Math.ceil(totalUsers / itemsPerPage) + + const users = await userList(pageNumber, itemsPerPage) + + res.render('users', { + users, + maxPages: Array.from({ length: maxPages }, (_, index) => index + 1), + }) + } catch (error) { + res.status(500).send('Error fetching user data') + } } diff --git a/packages/analytics/src/models/commands.js b/packages/analytics/src/models/commands.js index 48ece73..c2a756a 100644 --- a/packages/analytics/src/models/commands.js +++ b/packages/analytics/src/models/commands.js @@ -1,7 +1,9 @@ import { Command } from '@linux-odyssey/models' // eslint-disable-next-line import/prefer-default-export -export async function errorCommands() { +export async function errorCommands(pageNumber, itemsPerPage) { + const skipAmount = (pageNumber - 1) * itemsPerPage + const commands = await Command.find({ $and: [ { error: { $exists: true } }, @@ -13,6 +15,8 @@ export async function errorCommands() { path: 'session', populate: { path: 'user' }, }) + .skip(skipAmount) + .limit(itemsPerPage) .exec() return commands.map(({ command, error, createdAt, session }) => { const { user, quest } = session diff --git a/packages/analytics/src/models/sessions.js b/packages/analytics/src/models/sessions.js index 72d5aa4..a5568d8 100644 --- a/packages/analytics/src/models/sessions.js +++ b/packages/analytics/src/models/sessions.js @@ -30,7 +30,9 @@ function formatTime(time) { return `${hours}h ${minutes % 60}m ${seconds % 60}s` } -export async function sessionList() { +export async function sessionList(pageNumber, itemsPerPage) { + const skipAmount = (pageNumber - 1) * itemsPerPage + const sessions = await Session.aggregate([ { $lookup: { @@ -50,6 +52,8 @@ export async function sessionList() { }, }, ]) + .skip(skipAmount) + .limit(itemsPerPage) return sessions.map( ({ _id, diff --git a/packages/analytics/src/models/users.js b/packages/analytics/src/models/users.js index 69d8310..eb501e1 100644 --- a/packages/analytics/src/models/users.js +++ b/packages/analytics/src/models/users.js @@ -11,7 +11,9 @@ export function userCount() { return User.find().count() } -export async function userList() { +export async function userList(pageNumber, itemsPerPage) { + const skipAmount = (pageNumber - 1) * itemsPerPage + const users = await Session.aggregate([ { $group: { @@ -30,7 +32,10 @@ export async function userList() { }, { $unwind: '$userData' }, { $sort: { 'userData.createdAt': 1 } }, + { $skip: skipAmount }, + { $limit: itemsPerPage }, ]) + return users.map(({ userData, count, lastActivityAt }) => { const { username, email, createdAt } = userData return { diff --git a/packages/analytics/views/commands.handlebars b/packages/analytics/views/commands.handlebars index 16f23c2..00843c9 100644 --- a/packages/analytics/views/commands.handlebars +++ b/packages/analytics/views/commands.handlebars @@ -21,4 +21,9 @@ {{/each}} + + \ No newline at end of file diff --git a/packages/analytics/views/sessions.handlebars b/packages/analytics/views/sessions.handlebars index 99469bb..a9abf8c 100644 --- a/packages/analytics/views/sessions.handlebars +++ b/packages/analytics/views/sessions.handlebars @@ -24,4 +24,9 @@ {{/each}} + + \ No newline at end of file diff --git a/packages/analytics/views/users.handlebars b/packages/analytics/views/users.handlebars index acc6233..c2b73f2 100644 --- a/packages/analytics/views/users.handlebars +++ b/packages/analytics/views/users.handlebars @@ -20,4 +20,9 @@ {{/each}} + + \ No newline at end of file