feat: Delete client session keys from Redis after 3 minutes of inactivity

feat_faro
adriano 2024-05-29 14:16:29 -03:00
parent 02ded6e4ee
commit 9e84e4cf08
9 changed files with 1096 additions and 95 deletions

View File

@ -0,0 +1,44 @@
NODE_ENV=
BACKEND_URL=http://localhost
FRONTEND_URL=http://localhost:3000
PROXY_PORT=8080
PORT=8080
DB_DIALECT=mysql
DB_HOST=localhost
DB_USER=whaticket
DB_PASS=strongpassword
DB_NAME=whaticket
# WHATSAPP OFFICIAL
VERIFY_TOKEN=HAPPY
TOKEN=EAAEPZBB2YqgwBOZBEAvPxYaO2nbPvuzU3ZBaZA6YF6tyWtjKom2yLxPxOm421njhbb1ZC2rOkyQyZCWpZBk9jXZCAaMLNY6SkNOrwPoRNaqO9Fbj31mZC8mxra08jIhBiziX7IZBFDWYbkcfw5cfLdTSys9ilfRlKsIZClOUlTiHnhSDkMvXY6rMFrvWswR2YVvJVH1qPvM7hGuuUqM
VERSION=v17.0
URL_WHATSAPP_MEDIA=https://ccsm-api.omnihit.app.br/whatsapp/official/media
URL_WHATSAPP_API=https://graph.facebook.com
JWT_SECRET=3123123213123
JWT_REFRESH_SECRET=75756756756
SENTRY_DSN=
CACHE=
WHATS_NUMBER_VALIDATOR_URL=http://localhost:8021
TOKEN_REMOTE_TICKET_CREATION=emvd7UfskjstMC99mFqs2tEiNmn05PgsUVK06TZP9LfkyjxDrsKCxlVV5ApYM7hP
TOKEN_IAM_HORACIUS_EL=emvd7UfskjstMC99mFqs2tEiNmn05PgsUVK06TZP9LfkyjxDrsKCxlVV5ApYM7hP
# omnihit da hit test bot
# APP_NAME=recrutamento_el
APP_NAME=test
BACKEND_URL_RAW=http://localhost
PUBLICKEY=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwOvEh4Qc0yeJidiX3YpDdOB/XuDeyNRaypmSyW5FjjIxBFaMiUmNSZ2X2m2LqyyrHJxQgRqwjifHUQ+ivmNBm4YFNSr05iFB/kgi/1Jmbst6h1MnmuD1YFSRnEsmdUXzhhgcj5btyjRfw6L2rGwOnqzMzS54seE1aAy+rtN82DW8wfbYU/IO83MAJiocthCBOev5MDUq6hdkGPPZ/kdFOLcQe+wt/suhmF4KRfq77X4GgLM5nAOMj7N7cJ6b97nB47krfPOMJissNzPDZ879BKeQX4t8TwJGUFNOvLd3UW3xVBTBz8pSS36VlCXjbYm44za8eTuBLDYYbGkUNEFYxwIDAQAB
REDIS_URI=redis://127.0.0.1:6379
URL_DASHBOARD_SESSIONS=http://localhost:6002
TOKEN_DASHBOARD_SESSIONS=8168dd72adb7bab7e8f54f9d022468ab

View File

@ -50,6 +50,7 @@
"socket.io-client": "^4.5.4",
"uuid": "^8.3.2",
"whatsapp-web.js": "github:pedroslopez/whatsapp-web.js",
"xml2js": "^0.6.2",
"yup": "^0.32.8"
},
"devDependencies": {

View File

@ -92,11 +92,21 @@ export const store = async (req: Request, res: Response): Promise<Response> => {
return res.status(200).json(queue);
};
export const form = async (req: Request, res: Response): Promise<Response> => {
const { form, name } = req.body;
if (!form || !name) throw new AppError("BAD REQUEST", 400);
await set(name, form);
return res.status(200).json({ [name]: form });
};
export const customization = async (
req: Request,
res: Response
): Promise<Response> => {
const { ura } = req.body;
const { ura, number } = req.body;
if (!ura) throw new AppError("BAD REQUEST", 400);
@ -184,10 +194,10 @@ export const customization = async (
}
}
await set("ura", ura);
await set(`ura_${number}`, ura);
const _ura = await get({ key: "ura", parse: true });
console.log("_URA: ", _ura);
const _ura = await get({ key: `ura_${number}`, parse: true });
console.log(`ura_${number}`, _ura);
return res.status(200).json({ new_queues });
};

View File

@ -1,54 +1,60 @@
import ListTicketTimeLife from "../services/TicketServices/ListTicketTimeLife";
import UpdateTicketService from "../services/TicketServices/UpdateTicketService";
import { delForm } from "../services/WbotServices/wbotMessageListener";
import BotIsOnQueue from "./BotIsOnQueue";
import { del } from "./RedisClient";
const fsPromises = require("fs/promises");
const fs = require('fs')
const fs = require("fs");
let timer: any
let timer: any;
const CloseBotTickets = async () => {
try {
const botInfo = await BotIsOnQueue("botqueue");
const botInfo = await BotIsOnQueue('botqueue')
if (!botInfo.userIdBot) return;
if (!botInfo.userIdBot) return
let tickets: any = await ListTicketTimeLife({
timeseconds: 60,
status: "open",
userId: botInfo.userIdBot
});
let tickets: any = await ListTicketTimeLife({ timeseconds: 60, status: 'open', userId: botInfo.userIdBot })
console.log('tickets: ', tickets)
console.log("tickets: ", tickets);
for (let i = 0; i < tickets.length; i++) {
await UpdateTicketService({
ticketData: { 'status': 'closed', 'userId': botInfo.userIdBot, 'statusChatEnd': 'FINALIZADO' },
ticketData: {
status: "closed",
userId: botInfo.userIdBot,
statusChatEnd: "FINALIZADO"
},
ticketId: tickets[i].ticket_id
});
tickets[i].id = tickets[i].ticket_id;
delForm(tickets[i]);
del(`form:${tickets[i].id}:request`);
del(`form:${tickets[i].id}:confirmation`);
}
} catch (error) {
console.log('There was an error on try close the bot tickets: ', error)
console.log("There was an error on try close the bot tickets: ", error);
}
}
};
const schedule = async () => {
try {
clearInterval(timer);
await CloseBotTickets()
await CloseBotTickets();
} catch (error) {
console.log('error on schedule: ', error)
console.log("error on schedule: ", error);
} finally {
timer = setInterval(schedule, 180000);
}
finally {
timer = setInterval(schedule, 60000);
}
}
};
timer = setInterval(schedule, 60000);
timer = setInterval(schedule, 180000);
export default schedule;

View File

@ -44,7 +44,7 @@ export async function get({ key, value, parse }: getData) {
for (const key of keys) {
const val = await redis.get(key);
if (parse) res.push(JSON.parse(val));
res.push(val);
else res.push(val);
}
return res;
}

View File

@ -11,6 +11,8 @@ queueRoutes.post("/queue", isAuth, QueueController.store);
queueRoutes.post("/queue/customization", QueueController.customization);
queueRoutes.post("/queue/form", QueueController.form);
queueRoutes.get("/queue/remote/list", isAuth, QueueController.listQueues);
queueRoutes.get("/queue/:queueId", isAuth, QueueController.show);

View File

@ -19,7 +19,7 @@ import {
import ListWhatsAppsNumber from "../WhatsappService/ListWhatsAppsNumber";
import { getWbot } from "../../libs/wbot";
import { json } from "sequelize/types";
import { QueryTypes, json } from "sequelize/types";
import { restartWhatsSession } from "../../helpers/RestartWhatsSession";
// import { insertOrUpeateWhatsCache, searchWhatsappCache } from "../../helpers/WhatsCache";
@ -58,12 +58,6 @@ const SendWhatsAppMessage = async ({
let quotedMsgSerializedId: string | undefined;
if (quotedMsg) {
await GetWbotMessage(ticket, quotedMsg.id);
quotedMsgSerializedId = SerializeWbotMsgId(ticket, quotedMsg);
}
console.log("quotedMsgSerializedId: ", quotedMsgSerializedId);
let whatsapps: any;

File diff suppressed because it is too large Load Diff