diff --git a/packages/analytics/src/controllers/commands.js b/packages/analytics/src/controllers/commands.js index 514a891..c270ed4 100644 --- a/packages/analytics/src/controllers/commands.js +++ b/packages/analytics/src/controllers/commands.js @@ -4,25 +4,26 @@ import { errorCommands } from '../models/commands.js' // eslint-disable-next-line import/prefer-default-export export async function commandListController(req, res) { + const { nextKey } = req.query const itemsPerPage = 250 try { - const totalCommands = await Command.countDocuments({ - $and: [ - { error: { $exists: true } }, - { error: { $ne: null } }, - { error: { $ne: '' } }, - ], - }) + // const totalCommands = await Command.countDocuments({ + // $and: [ + // { error: { $exists: true } }, + // { error: { $ne: null } }, + // { error: { $ne: '' } }, + // ], + // }) - const maxPages = Math.ceil(totalCommands / itemsPerPage) + // 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) + // const pageNumber = req.query + + const payload = await errorCommands({ nextKey, itemsPerPage }) + const newNextKey = payload[payload.length - 1]?._id + + res.render('commands', { payload, nextKey: newNextKey }) } catch (error) { res.status(500).send('Error fetching data') } diff --git a/packages/analytics/src/controllers/sessions.js b/packages/analytics/src/controllers/sessions.js index e0b131b..238aee0 100644 --- a/packages/analytics/src/controllers/sessions.js +++ b/packages/analytics/src/controllers/sessions.js @@ -1,18 +1,17 @@ import { sessionCount, sessionList, sessionDetail } from '../models/sessions.js' export async function sessionListController(req, res) { - const pageNumber = req.query.page || 1 + const { nextKey } = req.query const itemsPerPage = 100 try { - const totalSessions = await sessionCount() - const maxPages = Math.ceil(totalSessions / itemsPerPage) + // const totalSessions = await sessionCount() + // const maxPages = Math.ceil(totalSessions / itemsPerPage) - const sessions = await sessionList(pageNumber, itemsPerPage) + const sessions = await sessionList({ nextKey, itemsPerPage }) + const newNextKey = sessions[sessions.length - 1]?._id - const pages = Array.from({ length: maxPages }, (_, index) => index + 1) - - res.render('sessions', { sessions, pages }) + res.render('sessions', { sessions, nextKey: newNextKey }) } catch (error) { res.status(500).send('Error fetching session data') } diff --git a/packages/analytics/src/models/commands.js b/packages/analytics/src/models/commands.js index c2a756a..a6a3b0a 100644 --- a/packages/analytics/src/models/commands.js +++ b/packages/analytics/src/models/commands.js @@ -1,16 +1,26 @@ import { Command } from '@linux-odyssey/models' +import mongoose from 'mongoose' // eslint-disable-next-line import/prefer-default-export -export async function errorCommands(pageNumber, itemsPerPage) { - const skipAmount = (pageNumber - 1) * itemsPerPage +export async function errorCommands({ nextKey, itemsPerPage }) { + const key = new mongoose.Types.ObjectId(nextKey) + const matchStage = nextKey ? { _id: { $lt: key } } : {} - const commands = await Command.find({ - $and: [ - { error: { $exists: true } }, - { error: { $ne: null } }, - { error: { $ne: '' } }, - ], - }) + const commands = await Command.aggregate([ + { + $match: matchStage, + }, + { + $match: { + $and: [ + { error: { $exists: true } }, + { error: { $ne: null } }, + { error: { $ne: '' } }, + ], + } + } + { $limit: itemsPerPage }, + ]) .populate({ path: 'session', populate: { path: 'user' }, diff --git a/packages/analytics/src/models/sessions.js b/packages/analytics/src/models/sessions.js index a5568d8..e357f96 100644 --- a/packages/analytics/src/models/sessions.js +++ b/packages/analytics/src/models/sessions.js @@ -1,4 +1,5 @@ import { Command, Session } from '@linux-odyssey/models' +import mongoose from 'mongoose' export function sessionCount() { return Session.find().count() @@ -30,10 +31,14 @@ function formatTime(time) { return `${hours}h ${minutes % 60}m ${seconds % 60}s` } -export async function sessionList(pageNumber, itemsPerPage) { - const skipAmount = (pageNumber - 1) * itemsPerPage +export async function sessionList({ nextKey, itemsPerPage }) { + const key = new mongoose.Types.ObjectId(nextKey) + const matchStage = nextKey ? { _id: { $lt: key } } : {} const sessions = await Session.aggregate([ + { + $match: matchStage, + }, { $lookup: { from: 'users', @@ -51,9 +56,10 @@ export async function sessionList(pageNumber, itemsPerPage) { as: 'commands', }, }, + { $sort: { _id: -1 } }, + { $limit: itemsPerPage }, ]) - .skip(skipAmount) - .limit(itemsPerPage) + return sessions.map( ({ _id, diff --git a/packages/analytics/views/commands.handlebars b/packages/analytics/views/commands.handlebars index 00843c9..1d7034f 100644 --- a/packages/analytics/views/commands.handlebars +++ b/packages/analytics/views/commands.handlebars @@ -23,7 +23,5 @@ \ No newline at end of file diff --git a/packages/analytics/views/sessions.handlebars b/packages/analytics/views/sessions.handlebars index a9abf8c..236795f 100644 --- a/packages/analytics/views/sessions.handlebars +++ b/packages/analytics/views/sessions.handlebars @@ -26,7 +26,5 @@ \ No newline at end of file diff --git a/packages/analytics/views/userDetail.handlebars b/packages/analytics/views/userDetail.handlebars deleted file mode 100644 index e69de29..0000000