Compare commits
2 Commits
aa2ee96412
...
bc7fb4424c
Author | SHA1 | Date |
---|---|---|
adriano | bc7fb4424c | |
adriano | 051e1b3b2a |
|
@ -4,78 +4,102 @@ import ShowWhatsAppService from "../services/WhatsappService/ShowWhatsAppService
|
||||||
import { logger } from "../utils/logger";
|
import { logger } from "../utils/logger";
|
||||||
import * as Sentry from "@sentry/node";
|
import * as Sentry from "@sentry/node";
|
||||||
import Whatsapp from "../models/Whatsapp";
|
import Whatsapp from "../models/Whatsapp";
|
||||||
|
import omnihitDashboardSession from "../helpers/OmnhitDashboardSession";
|
||||||
|
|
||||||
// type IndexQuery = {
|
// type IndexQuery = {
|
||||||
// centro_custo: string;
|
// centro_custo: string;
|
||||||
// };
|
// };
|
||||||
|
|
||||||
export const wbotMonitorRemote = async (req: Request, res: Response): Promise<Response> => {
|
export const wbotMonitorRemote = async (
|
||||||
|
req: Request,
|
||||||
|
res: Response
|
||||||
|
): Promise<Response> => {
|
||||||
|
const { action, whatsappId, reason } = req.body;
|
||||||
|
|
||||||
const { action, whatsappId, reason } = req.body
|
console.log(
|
||||||
|
"action: ",
|
||||||
|
action,
|
||||||
|
" | whatsappId: ",
|
||||||
|
whatsappId,
|
||||||
|
" | reason: ",
|
||||||
|
reason
|
||||||
|
);
|
||||||
|
|
||||||
console.log('action: ', action, ' | whatsappId: ', whatsappId, ' | reason: ', reason)
|
console.log("-----------> ACTION: ", req.body["action"]);
|
||||||
|
|
||||||
console.log('-----------> ACTION: ', req.body['action'])
|
const whatsapp: any = await Whatsapp.findByPk(whatsappId, { raw: true });
|
||||||
|
|
||||||
const whatsapp: any = await Whatsapp.findByPk(whatsappId, { raw: true })
|
|
||||||
|
|
||||||
if (whatsapp) {
|
|
||||||
if (action === 'disconnected') {
|
|
||||||
logger.info(`Disconnected session: ${whatsapp.name}, reason: ${reason}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const io = getIO();
|
|
||||||
io.emit("whatsappSession", {
|
|
||||||
action: "update",
|
|
||||||
session: whatsapp
|
|
||||||
});
|
|
||||||
|
|
||||||
|
if (whatsapp) {
|
||||||
|
if (action === "disconnected") {
|
||||||
|
logger.info(`Disconnected session: ${whatsapp.name}, reason: ${reason}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(200).json({ "message": "Ok" });
|
let data: any = {};
|
||||||
};
|
data.whatsapp = { ...whatsapp, DB: process.env.DB_NAME };
|
||||||
|
data.action = "update";
|
||||||
|
await omnihitDashboardSession(data);
|
||||||
|
|
||||||
|
|
||||||
export const wbotMonitorQrcodeRemote = async (req: Request, res: Response): Promise<Response> => {
|
|
||||||
|
|
||||||
const { whatsappId } = req.body
|
|
||||||
|
|
||||||
console.log('-----------> QRCODE MONITOR whatsappId: ', req.body['whatsappId'])
|
|
||||||
|
|
||||||
const whatsapp: any = await Whatsapp.findByPk(whatsappId, { raw: true })
|
|
||||||
// let whatsapp = await ShowWhatsAppService(whatsappId)
|
|
||||||
|
|
||||||
if (whatsapp) {
|
|
||||||
const io = getIO();
|
|
||||||
io.emit("whatsappSession", {
|
|
||||||
action: "update",
|
|
||||||
session: whatsapp
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return res.status(200).json({ "message": "Ok" });
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export const wbotMonitorQrcodeNumberRead = async (req: Request, res: Response): Promise<Response> => {
|
|
||||||
|
|
||||||
const { number } = req.body
|
|
||||||
|
|
||||||
console.log('-----------> number read: ', number)
|
|
||||||
|
|
||||||
const io = getIO();
|
const io = getIO();
|
||||||
io.emit("whatsappSession", {
|
io.emit("whatsappSession", {
|
||||||
action: "error",
|
action: "update",
|
||||||
msg: `Numero lido: ${number} \nEssa sessão de whatsapp foi desconectada porque o numero que esta descrito no nome dessa sessão não corresponde ao numero lido!`
|
session: whatsapp
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return res.status(200).json({ "message": "Ok" });
|
return res.status(200).json({ message: "Ok" });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const wbotMonitorQrcodeRemote = async (
|
||||||
|
req: Request,
|
||||||
|
res: Response
|
||||||
|
): Promise<Response> => {
|
||||||
|
const { whatsappId } = req.body;
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
"-----------> QRCODE MONITOR whatsappId: ",
|
||||||
|
req.body["whatsappId"]
|
||||||
|
);
|
||||||
|
|
||||||
|
const whatsapp: any = await Whatsapp.findByPk(whatsappId, { raw: true });
|
||||||
|
// let whatsapp = await ShowWhatsAppService(whatsappId)
|
||||||
|
|
||||||
|
if (whatsapp) {
|
||||||
|
let data: any = {};
|
||||||
|
data.whatsapp = { ...whatsapp, DB: process.env.DB_NAME };
|
||||||
|
data.action = "update";
|
||||||
|
await omnihitDashboardSession(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (whatsapp) {
|
||||||
|
const io = getIO();
|
||||||
|
io.emit("whatsappSession", {
|
||||||
|
action: "update",
|
||||||
|
session: whatsapp
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.status(200).json({ message: "Ok" });
|
||||||
|
};
|
||||||
|
|
||||||
|
export const wbotMonitorQrcodeNumberRead = async (
|
||||||
|
req: Request,
|
||||||
|
res: Response
|
||||||
|
): Promise<Response> => {
|
||||||
|
const { number } = req.body;
|
||||||
|
|
||||||
|
console.log("-----------> number read: ", number);
|
||||||
|
|
||||||
|
const msg = `Numero lido: ${number} \nEssa sessão de whatsapp foi desconectada porque o numero que esta descrito no nome dessa sessão não corresponde ao numero lido!`;
|
||||||
|
let data: any = {};
|
||||||
|
data.msg = msg;
|
||||||
|
data.action = "error";
|
||||||
|
await omnihitDashboardSession(data);
|
||||||
|
|
||||||
|
const io = getIO();
|
||||||
|
io.emit("whatsappSession", {
|
||||||
|
action: "error",
|
||||||
|
msg: `Numero lido: ${number} \nEssa sessão de whatsapp foi desconectada porque o numero que esta descrito no nome dessa sessão não corresponde ao numero lido!`
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.status(200).json({ message: "Ok" });
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
import axios from "axios";
|
||||||
|
|
||||||
|
async function omnihitDashboardSession(data: any) {
|
||||||
|
|
||||||
|
// console.log('DATA: ', data)
|
||||||
|
|
||||||
|
try {
|
||||||
|
await axios.post(
|
||||||
|
`${process.env.URL_DASHBOARD_SESSIONS}/api/v1/omnihit/monitor`,
|
||||||
|
data,
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${process.env.TOKEN_DASHBOARD_SESSIONS}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
console.log(
|
||||||
|
`Post request error to ${process.env.URL_DASHBOARD_SESSIONS}/api/v1/omnihit/monitor`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default omnihitDashboardSession;
|
|
@ -13,187 +13,138 @@ import SchedulingNotify from "../models/SchedulingNotify";
|
||||||
import Ticket from "../models/Ticket";
|
import Ticket from "../models/Ticket";
|
||||||
import User from "../models/User";
|
import User from "../models/User";
|
||||||
import { Sequelize, Op } from "sequelize";
|
import { Sequelize, Op } from "sequelize";
|
||||||
|
import omnihitDashboardSession from "./OmnhitDashboardSession";
|
||||||
|
|
||||||
|
const fastFolderSize = require("fast-folder-size");
|
||||||
const fastFolderSize = require('fast-folder-size')
|
const { promisify } = require("util");
|
||||||
const { promisify } = require('util')
|
const fs = require("fs");
|
||||||
const fs = require('fs')
|
|
||||||
|
|
||||||
const { exec } = require("child_process");
|
const { exec } = require("child_process");
|
||||||
|
|
||||||
let _fifo: any
|
let _fifo: any;
|
||||||
|
|
||||||
let scheduler_monitor: any;
|
let scheduler_monitor: any;
|
||||||
let timeInterval = 5
|
let timeInterval = 5;
|
||||||
|
|
||||||
const monitor = async () => {
|
const monitor = async () => {
|
||||||
|
let date = new Date();
|
||||||
|
|
||||||
let date = new Date()
|
let day = date.getDate().toString().padStart(2, "0");
|
||||||
|
let month = (date.getMonth() + 1).toString().padStart(2, "0");
|
||||||
|
let year = date.getFullYear();
|
||||||
|
|
||||||
let day = date.getDate().toString().padStart(2, '0');
|
let hour = date.getHours();
|
||||||
let month = (date.getMonth() + 1).toString().padStart(2, '0');
|
let minute = date.getMinutes();
|
||||||
let year = date.getFullYear();
|
|
||||||
|
|
||||||
let hour = date.getHours()
|
let fullDate = `${year}-${month}-${day}`;
|
||||||
let minute = date.getMinutes()
|
let dateParm = `${fullDate} ${hour.toString().padStart(2, "0")}:${minute
|
||||||
|
.toString()
|
||||||
|
.padStart(2, "0")}:00`;
|
||||||
|
|
||||||
let fullDate = `${year}-${month}-${day}`;
|
//console.log(dateParm);
|
||||||
let dateParm = `${fullDate} ${hour.toString().padStart(2, '0')}:${minute.toString().padStart(2, '0')}:00`
|
|
||||||
|
|
||||||
//console.log(dateParm);
|
try {
|
||||||
|
const { schedulingNotifies, count, hasMore } =
|
||||||
|
await ListSchedulingNotifyService({
|
||||||
|
searchParam: dateParm,
|
||||||
|
pageNumber: "1"
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
if (schedulingNotifies && schedulingNotifies.length > 0) {
|
||||||
|
for (let i = 0; i < schedulingNotifies.length; i++) {
|
||||||
const { schedulingNotifies, count, hasMore } = await ListSchedulingNotifyService({ searchParam: dateParm, pageNumber: "1" });
|
const ticket: any = await ShowTicketService(
|
||||||
|
+schedulingNotifies[i].ticketId
|
||||||
if (schedulingNotifies && schedulingNotifies.length > 0) {
|
);
|
||||||
|
|
||||||
for (let i = 0; i < schedulingNotifies.length; i++) {
|
|
||||||
|
|
||||||
const ticket: any = await ShowTicketService(+schedulingNotifies[i].ticketId);
|
|
||||||
|
|
||||||
let _ticket = await Ticket.findOne({
|
|
||||||
where: {
|
|
||||||
contactId: ticket.contactId,
|
|
||||||
status: { [Op.in]: ['open', 'pending'] }
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
await deleteScheduleByTicketIdCache(schedulingNotifies[i].ticketId)
|
|
||||||
|
|
||||||
await DeleteSchedulingNotifyService(schedulingNotifies[i].id)
|
|
||||||
|
|
||||||
if (_ticket) continue
|
|
||||||
|
|
||||||
if (ticket.dataValues.status == 'closed') {
|
|
||||||
await ticket.update({ status: 'open' })
|
|
||||||
}
|
|
||||||
const userId: number = ticket.getDataValue('userId');
|
|
||||||
let userN = '';
|
|
||||||
if(userId){
|
|
||||||
const useer = await User.findByPk(userId);
|
|
||||||
if(useer){
|
|
||||||
const userName: string = useer.getDataValue('name');
|
|
||||||
userN = `*${userName}:* \n`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await new Promise(f => setTimeout(f, 3000));
|
|
||||||
await SendWhatsAppMessage({
|
|
||||||
body: userN+schedulingNotifies[i].message, ticket
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
exec("df -h /", (error: any, stdout: any, stderr: any) => {
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
console.log(`exec error: ${error.message}`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (stderr) {
|
|
||||||
console.log(`exec stderr: ${stderr}`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
stdout = stdout.split(/\r?\n/)
|
|
||||||
stdout = stdout[1].trim().split(/\s+/)
|
|
||||||
|
|
||||||
// DISK SPACE MONITORING
|
|
||||||
const io = getIO();
|
|
||||||
io.emit("diskSpaceMonit", {
|
|
||||||
action: "update",
|
|
||||||
diskSpace: {
|
|
||||||
size: stdout[1],
|
|
||||||
used: stdout[2],
|
|
||||||
available: stdout[3],
|
|
||||||
use: stdout[4]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
let _ticket = await Ticket.findOne({
|
||||||
|
where: {
|
||||||
|
contactId: ticket.contactId,
|
||||||
|
status: { [Op.in]: ["open", "pending"] }
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await deleteScheduleByTicketIdCache(schedulingNotifies[i].ticketId);
|
||||||
|
|
||||||
|
await DeleteSchedulingNotifyService(schedulingNotifies[i].id);
|
||||||
|
|
||||||
// WHATS SESSION SIZE MONITORING
|
if (_ticket) continue;
|
||||||
// const whatsapps = await ListWhatsAppsService();
|
|
||||||
|
|
||||||
// whatsapps.forEach(async whats => {
|
if (ticket.dataValues.status == "closed") {
|
||||||
|
await ticket.update({ status: "open" });
|
||||||
|
}
|
||||||
|
const userId: number = ticket.getDataValue("userId");
|
||||||
|
let userN = "";
|
||||||
|
if (userId) {
|
||||||
|
const useer = await User.findByPk(userId);
|
||||||
|
if (useer) {
|
||||||
|
const userName: string = useer.getDataValue("name");
|
||||||
|
userN = `*${userName}:* \n`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise(f => setTimeout(f, 3000));
|
||||||
|
await SendWhatsAppMessage({
|
||||||
// const sourcePath = path.join(__dirname, `../../.wwebjs_auth/`, `session-bd_${whats.id}`)
|
body: userN + schedulingNotifies[i].message,
|
||||||
|
ticket
|
||||||
// if (fs.existsSync(sourcePath)) {
|
});
|
||||||
|
}
|
||||||
// try {
|
|
||||||
|
|
||||||
// const fastFolderSizeAsync = promisify(fastFolderSize)
|
|
||||||
|
|
||||||
// let size = await fastFolderSizeAsync(sourcePath)
|
|
||||||
|
|
||||||
// size = convertBytes(size)
|
|
||||||
|
|
||||||
|
|
||||||
// // SESSION MONITORING
|
|
||||||
// const io = getIO();
|
|
||||||
// io.emit("whatsappSessionMonit", {
|
|
||||||
// action: "update",
|
|
||||||
// whatsappSessionSize: {
|
|
||||||
// id: whats.id,
|
|
||||||
// sessionSize: size
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// catch (err) {
|
|
||||||
// console.log('An error occurred while get info from the directory: ', err);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
|
|
||||||
// // console.log('Directory not found to get size info: ', sourcePath)
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
// });
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} catch (error) {
|
|
||||||
console.log('>>> SchedulingNotifiySendMessage.ts error: ', error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exec("df -h /", (error: any, stdout: any, stderr: any) => {
|
||||||
|
if (error) {
|
||||||
|
console.log(`exec error: ${error.message}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (stderr) {
|
||||||
|
console.log(`exec stderr: ${stderr}`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
stdout = stdout.split(/\r?\n/);
|
||||||
|
stdout = stdout[1].trim().split(/\s+/);
|
||||||
|
|
||||||
|
// DISK SPACE MONITORING
|
||||||
|
const io = getIO();
|
||||||
|
io.emit("diskSpaceMonit", {
|
||||||
|
action: "update",
|
||||||
|
diskSpace: {
|
||||||
|
size: stdout[1],
|
||||||
|
used: stdout[2],
|
||||||
|
available: stdout[3],
|
||||||
|
use: stdout[4]
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
let data: any = {};
|
||||||
|
|
||||||
|
data.diskSpace = {
|
||||||
|
DB: process.env.DB_NAME,
|
||||||
|
size: stdout[1],
|
||||||
|
used: stdout[2],
|
||||||
|
available: stdout[3],
|
||||||
|
use: stdout[4]
|
||||||
|
};
|
||||||
|
data.action = "update";
|
||||||
|
omnihitDashboardSession(data);
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(">>> SchedulingNotifiySendMessage.ts error: ", error);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const SchedulingNotifySendMessage = async () => {
|
const SchedulingNotifySendMessage = async () => {
|
||||||
|
try {
|
||||||
|
clearInterval(_fifo);
|
||||||
|
|
||||||
try {
|
await monitor();
|
||||||
clearInterval(_fifo);
|
} catch (error) {
|
||||||
|
console.log("error on SchedulingNotifySendMessage: ", error);
|
||||||
await monitor()
|
} finally {
|
||||||
|
_fifo = setInterval(SchedulingNotifySendMessage, 5000);
|
||||||
} catch (error) {
|
}
|
||||||
console.log('error on SchedulingNotifySendMessage: ', error)
|
};
|
||||||
}
|
|
||||||
finally {
|
|
||||||
_fifo = setInterval(SchedulingNotifySendMessage, 5000);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_fifo = setInterval(SchedulingNotifySendMessage, 5000);
|
_fifo = setInterval(SchedulingNotifySendMessage, 5000);
|
||||||
|
|
||||||
|
module.exports = SchedulingNotifySendMessage;
|
||||||
module.exports = SchedulingNotifySendMessage
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue