mirror of
https://github.com/Hessenuk/DiscordTickets.git
synced 2025-09-06 02:01:26 +03:00
fix(stats): average response/resolution times
This commit is contained in:
2
src/lib/stats.js
Normal file
2
src/lib/stats.js
Normal file
@@ -0,0 +1,2 @@
|
||||
module.exports.getAvgResolutionTime = tickets => (tickets.reduce((total, ticket) => total + (ticket.closedAt - ticket.createdAt), 0) ?? 1) / tickets.length;
|
||||
module.exports.getAvgResponseTime = tickets => (tickets.reduce((total, ticket) => total + (ticket.firstResponseAt - ticket.createdAt), 0) ?? 1) / tickets.length;
|
@@ -20,6 +20,10 @@ const { isStaff } = require('../users');
|
||||
const { Collection } = require('discord.js');
|
||||
const spacetime = require('spacetime');
|
||||
const Cryptr = require('cryptr');
|
||||
const {
|
||||
getAvgResolutionTime,
|
||||
getAvgResponseTime,
|
||||
} = require('../stats');
|
||||
const {
|
||||
decrypt,
|
||||
encrypt,
|
||||
@@ -404,10 +408,11 @@ module.exports = class TicketManager {
|
||||
|
||||
if (category.image) await channel.send(category.image);
|
||||
|
||||
const needsStats = category.openingMessage.match(/{+\s?avgResponseTime\s?}+/i) || category.openingMessage.match(/{+\s?avgResolutionTime\s?}+/i);
|
||||
const statsCacheKey = `cache/category-stats/${categoryId}`;
|
||||
let stats = await this.client.keyv.get(statsCacheKey);
|
||||
if (!stats) {
|
||||
const tickets = await this.client.prisma.ticket.findMany({
|
||||
if (needsStats && !stats) {
|
||||
const closedTickets = await this.client.prisma.ticket.findMany({
|
||||
select: {
|
||||
closedAt: true,
|
||||
createdAt: true,
|
||||
@@ -420,8 +425,8 @@ module.exports = class TicketManager {
|
||||
},
|
||||
});
|
||||
stats = {
|
||||
avgResolutionTime: ms(tickets.reduce((total, ticket) => total + (ticket.closedAt - ticket.createdAt), 0) ?? 1 / tickets.length, { long: true }),
|
||||
avgResponseTime: ms(tickets.reduce((total, ticket) => total + (ticket.firstResponseAt - ticket.createdAt), 0) ?? 1 / tickets.length, { long: true }),
|
||||
avgResolutionTime: ms(getAvgResolutionTime(closedTickets), { long: true }),
|
||||
avgResponseTime: ms(getAvgResponseTime(closedTickets), { long: true }),
|
||||
};
|
||||
this.client.keyv.set(statsCacheKey, stats, ms('1h'));
|
||||
}
|
||||
|
Reference in New Issue
Block a user