import Env from "@ioc:Adonis/Core/Env"; import fs from "fs"; import moment from "moment/moment"; import dotenv from "dotenv"; import nodeMailer from "nodemailer"; import LogDetectFile from "App/Models/LogDetectFile"; import InfoDevice from "App/Models/InfoDevice"; import KeyValue from "App/Models/KeyValue"; dotenv.config(); export const sendDeviceInfora = async () => { try { //Regex check show inventory const regexInventory = /sh.*? inv.*/; //Regex check show version const regexVersion = /sh.*? ver.*/; const regexMemory = /(\d+)K/g; const date = moment(Date.now()).format("YYYYMMDD"); const memDefault = (await KeyValue.all()) .filter((i) => i.$attributes.key === "MEMORY_DEFAULT") .map((obj) => obj.$attributes.value); const listInformation = []; let dataFile = await LogDetectFile.all(); // console.log(dataFile) // console.log(dataFile) let html = ""; //List file today const listFile = fs.readdirSync(Env.get("FOLDER_LOGS")); //Configure mail const transporter = nodeMailer.createTransport({ pool: true, host: "mail.ipsupply.com.au", port: 465, secure: true, auth: { user: "admin@apactech.io", pass: "BGK!dyt6upd2eax1bhz", }, }); //Read file in listFile await listFile.map(async (file) => { fs.readFile( Env.get("FOLDER_LOGS") + "/" + file, "utf8", async (err, data) => { if (err) { console.log(`Error reading file: ${err}`); } else { //Array line const lines = data?.split("\n"); const linesInventory = []; let DBFileCheck = dataFile.filter( (i) => i.$attributes.file_name === file )[0]; if (DBFileCheck !== undefined) { if (lines.length > DBFileCheck?.$extras.last_check_SN) { const DBFile = await LogDetectFile.find( DBFileCheck?.$attributes.id_ldf ); // console.log(DBFile) DBFile.last_check_SN = lines.length; await DBFile.save(); } } else { await LogDetectFile.firstOrCreate( { file_name: file }, { file_name: file } ); dataFile = await LogDetectFile.all(); DBFileCheck = dataFile.filter( (i) => i.$attributes.file_name === file )[0]; } //Get index of "lines" with show inv lines ?.slice(DBFileCheck?.$extras.last_check_SN, lines.length - 1) .map((line, index) => { if (line.match(regexInventory) !== null) { linesInventory.push(index); } }); //cut content with content1 = [linesInventory[index],linesInventory[index+1]] ... linesInventory?.map((line, index) => { const deviceContent = lines?.slice( linesInventory[index], linesInventory[index + 1] ); let backgroundColor = "rgb(200 200 200 / 30%)"; const showInventory = []; let check = true; let begin = 0; let end = 4; //get showInventory content while (check === true) { if ( deviceContent .slice(begin, end) .filter( (i) => i.includes("PID:") && i.includes("VID:") && i.includes("SN:") ).length > 0 ) { showInventory.push( deviceContent.slice(begin, end).join("\n") ); begin = end; end = end + 4; } else { check = false; } } const showInventoryContent = showInventory .join("\n") .split("\n") .filter( (i) => i.includes("PID:") && i.includes("VID:") && i.includes("SN:") ); //show version exists if ( deviceContent.filter( (line) => line.match(regexVersion) !== null ).length > 0 ) { const lineShowver = deviceContent.indexOf( deviceContent.filter( (line) => line.match(regexVersion) !== null )[0] ); const showVersion = deviceContent.slice( lineShowver, deviceContent.indexOf( deviceContent.filter( (line) => line.search("Configuration register") !== -1 )[0] ) + 1 ); showInventoryContent.map((u, index) => { const PID = u ?.split("VID:")[0] ?.split("PID:")[1] ?.replace(/,/g, "") .trim(); const VID = u ?.split("VID:")[1] ?.split("SN:")[0] ?.replace(/,/g, "") .trim(); const SN = u?.split("SN:")[1]?.replace(/,/g, "").trim(); // let memory = if (index > 0) { if (PID !== "" && SN !== "") { // let RAM = // showVersion // .filter((line) => line.includes("bytes of memory")) // .join("
") // .match(regexMemory) !== null // ? ( // parseInt( // showVersion // .filter((line) => // line.includes("bytes of memory") // ) // .join("
") // .match(regexMemory)[0] // ) / // 1024 / // 1024 // ).toFixed(2) + "G" // : ""; // let flash = showVersion // .filter((line) => // line.toLocaleLowerCase().includes("compactflash") // ) // .join("
"); listInformation.push({ PID: PID, VID: VID, SN: SN, RAM: "", flash: "", extra_item: "yes", }); html += `${PID} ${VID} ${SN} yes`; } } else { if (PID !== "" && SN !== "") { const memDefaultForPID = memDefault.filter((i) => PID.includes(i.split(":")[0]) )[0] !== undefined ? memDefault.filter((i) => PID.includes(i.split(":")[0]) )[0] : PID + ":N/A:N/A"; let RAM = showVersion .filter( (line) => line.includes("bytes of memory") || line.includes("bytes of physical memory") ) .join("
") .match(regexMemory) !== null ? ( parseInt( showVersion .filter( (line) => line.includes("bytes of memory") || line.includes("bytes of physical memory") ) .join("
") .match(regexMemory)[0] ) / 1024 / 1024 ).toFixed(2) + "G (D: " + memDefaultForPID.split(":")[1] + ")" : ""; let flash = showVersion .filter((line) => line.toLocaleLowerCase().includes("compactflash") ) .join("
"); listInformation.push({ PID: PID, VID: VID, SN: SN, RAM: RAM, flash: flash.match(regexMemory) !== null ? ( parseInt(flash.match(regexMemory)[0]) / 1024 / 1024 ).toFixed(2) + "G (D: " + memDefaultForPID.split(":")[2] + ")" : "", extra_item: "no", }); html += `${PID} ${VID} ${SN} ${RAM} ${ flash.match(regexMemory) !== null ? ( parseInt(flash.match(regexMemory)[0]) / 1024 / 1024 ).toFixed(2) + "G (D: " + memDefaultForPID.split(":")[2] + ")" : "" } no`; } } }); } else { //show version not exists --> RAM = N/A, Flash = N/A showInventoryContent.map((u, index) => { const PID = u ?.split("VID:")[0] ?.split("PID:")[1] ?.replace(/,/g, "") .trim(); const VID = u ?.split("VID:")[1] ?.split("SN:")[0] ?.replace(/,/g, "") .trim(); const SN = u?.split("SN:")[1]?.replace(/,/g, "").trim(); if (index > 0) { if (PID !== "" && SN !== "") { listInformation.push({ PID: PID, VID: VID, SN: SN, RAM: "", flash: "", extra_item: "yes", }); html += `${PID} ${VID} ${SN} yes`; } } else { if (PID !== "" && SN !== "") { listInformation.push({ PID: PID, VID: VID, SN: SN, RAM: "", flash: "", extra_item: "no", }); html += `${PID} ${VID} ${SN} no`; } } }); } }); } } ); }); setTimeout(async () => { if (listInformation.length > 0) { console.log(listInformation); const options = { from: "admin@apactech.io", to: "joseph@apactech.io", subject: "SN AUTO REPORT", html: "\ \ \ \ \ \ \ \ \ \ \ " + html + "\
PIDVIDSNRAMFlashExtra Item
", }; transporter.sendMail(options); await InfoDevice.createMany(listInformation); } }, 5000); // const match = "show inventory".match(regexInventory); // console.log(match) } catch (error) { console.log(error); } };