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", "socket.io-client": "^4.5.4",
"uuid": "^8.3.2", "uuid": "^8.3.2",
"whatsapp-web.js": "github:pedroslopez/whatsapp-web.js", "whatsapp-web.js": "github:pedroslopez/whatsapp-web.js",
"xml2js": "^0.6.2",
"yup": "^0.32.8" "yup": "^0.32.8"
}, },
"devDependencies": { "devDependencies": {

View File

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

View File

@ -1,54 +1,60 @@
import ListTicketTimeLife from "../services/TicketServices/ListTicketTimeLife"; import ListTicketTimeLife from "../services/TicketServices/ListTicketTimeLife";
import UpdateTicketService from "../services/TicketServices/UpdateTicketService"; import UpdateTicketService from "../services/TicketServices/UpdateTicketService";
import { delForm } from "../services/WbotServices/wbotMessageListener";
import BotIsOnQueue from "./BotIsOnQueue"; import BotIsOnQueue from "./BotIsOnQueue";
import { del } from "./RedisClient";
const fsPromises = require("fs/promises"); const fsPromises = require("fs/promises");
const fs = require('fs') const fs = require("fs");
let timer: any let timer: any;
const CloseBotTickets = async () => { const CloseBotTickets = async () => {
try { 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++) { for (let i = 0; i < tickets.length; i++) {
await UpdateTicketService({ await UpdateTicketService({
ticketData: { 'status': 'closed', 'userId': botInfo.userIdBot, 'statusChatEnd': 'FINALIZADO' }, ticketData: {
status: "closed",
userId: botInfo.userIdBot,
statusChatEnd: "FINALIZADO"
},
ticketId: tickets[i].ticket_id 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) { } 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 () => { const schedule = async () => {
try { try {
clearInterval(timer); clearInterval(timer);
await CloseBotTickets() await CloseBotTickets();
} catch (error) { } catch (error) {
console.log('error on schedule: ', error) console.log("error on schedule: ", error);
} } finally {
finally { timer = setInterval(schedule, 180000);
timer = setInterval(schedule, 60000);
}
} }
};
timer = setInterval(schedule, 60000); timer = setInterval(schedule, 180000);
export default schedule; export default schedule;

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff